Scripts discussion (4)

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 348
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

Тут hexep указал на скрипт InsertTextLN.js и в принципе у него есть нормально работающая функция генерации чисел, которую мне пришлось делать самому (NumberListGenerator.js). Но в этом скрипте она как бы на втором плане и у него есть особенности при выделении столбиком если ширина строки короче позиции вставки (для пустых строк), то он добивает пробелами ширину и вставляет номер, я же у себя игнорировал такие строки, перескакивал через них.

В общем я сделал для этого скрипта перевод и так как мне не понятно было "Заполнитель" ни тестами ни чем, случайно заметил, то сделал поле пошире и дописал "ширины". То есть поправил только перевод и несколько координат, чтобы перевод уместился.

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=8939#p8939
// Version: 2015-09-19
// Author: KDJ
//
// *** Insert text/line number at beginning/end of selection ***
//
// Usage:
//   Call("Scripts::Main", 1, "InsertTextLN.js", "0") - insert in selection
//   Call("Scripts::Main", 1, "InsertTextLN.js", "1") - insert in each of selected lines
//   Call("Scripts::Main", 1, "InsertTextLN.js", "2") - insert in each part of columnar selection
//
// Remarks:
//   Argument "0" is default, can be omitted.
//   The script should be saved in Unicode format.

var oSys   = AkelPad.SystemFunction();
var pClass = "AkelPad::Scripts::" + WScript.ScriptName + "::" + AkelPad.GetInstanceDll();
var hDlg   = oSys.Call("User32::FindWindowExW", 0, 0, pClass, 0);

if (hDlg)
{
  if (! oSys.Call("User32::IsWindowVisible", hDlg))
    oSys.Call("User32::ShowWindow", hDlg, 8 /*SW_SHOWNA*/);
  if (oSys.Call("User32::IsIconic", hDlg))
    oSys.Call("User32::ShowWindow", hDlg, 9 /*SW_RESTORE*/);

  oSys.Call("User32::SetForegroundWindow", hDlg);
  WScript.Quit();
}

var hMainWnd  = AkelPad.GetMainWnd();
var hEditWnd  = AkelPad.GetEditWnd();
var bReadOnly = AkelPad.GetEditReadOnly(hEditWnd);
var bColSel   = AkelPad.SendMessage(hEditWnd, 3127 /*AEM_GETCOLUMNSEL*/, 0, 0);
var nStrMax   = 15;
var pStrA     = "";
var pStrB     = "";
var bEscNL    = 0;
var bEscTab   = 1;
var nRange    = 0;
var bIsLNL    = 0;
var pPadLNL   = "";
var pPreLNL   = "";
var pSufLNL   = "";
var bRelLNL   = 0;
var pIniLNL   = "1";
var pStepLNL  = "1";
var bIsLNR    = 0;
var pPadLNR   = "";
var pPreLNR   = "";
var pSufLNR   = "";
var bRelLNR   = 0;
var pIniLNR   = "1";
var pStepLNR  = "1";
var bReplace  = 0;
var nDlgX     = 200;
var nDlgY     = 100;
var lpStrsA;
var lpStrsB;

GetLangStrings();
ReadIni();

if (WScript.Arguments.length)
  nRange = parseInt(WScript.Arguments(0));

if ((nRange != 0) && (nRange != 1) && (nRange != 2))
  nRange = 0;

if ((nRange == 2) && (! bColSel))
{
  AkelPad.MessageBox(hEditWnd, pTxtNoColSel, pTxtCaption, 48 /*MB_ICONEXCLAMATION*/);
  nRange = 0;
}

var IDTXTA       = 1000;
var IDTXTB       = 1001;
var IDSTRA       = 1002;
var IDSTRB       = 1003;
var IDLNL        = 1004;
var IDISLNL      = 1005;
var IDTXTPADLNL  = 1006;
var IDPADLNL     = 1007;
var IDTXTPRELNL  = 1008;
var IDTXTSUFLNL  = 1009;
var IDPRELNL     = 1010;
var IDSUFLNL     = 1011;
var IDRELLNL     = 1012;
var IDTXTINILNL  = 1013;
var IDTXTSTEPLNL = 1014;
var IDINILNL     = 1015;
var IDSTEPLNL    = 1016;
var IDESC        = 1017;
var IDESCNL      = 1018;
var IDESCTAB     = 1019;
var IDRANGE      = 1020;
var IDSELECTION  = 1021;
var IDLINES      = 1022;
var IDCOLSEL     = 1023;
var IDREPLACE    = 1024;
var IDLNR        = 1025;
var IDISLNR      = 1026;
var IDTXTPADLNR  = 1027;
var IDPADLNR     = 1028;
var IDTXTPRELNR  = 1029;
var IDTXTSUFLNR  = 1030;
var IDPRELNR     = 1031;
var IDSUFLNR     = 1032;
var IDRELLNR     = 1033;
var IDTXTINILNR  = 1034;
var IDTXTSTEPLNR = 1035;
var IDINILNR     = 1036;
var IDSTEPLNR    = 1037;
var IDAPPLY      = 1038;
var IDOK         = 1039;
var IDCLOSE      = 1040;

AkelPad.WindowRegisterClass(pClass);

//0x50000000 = WS_VISIBLE|WS_CHILD
//0x50000007 = WS_VISIBLE|WS_CHILD|BS_GROUPBOX
//0x50000009 = WS_VISIBLE|WS_CHILD|BS_AUTORADIOBUTTON
//0x50010000 = WS_VISIBLE|WS_CHILD|WS_TABSTOP
//0x50010001 = WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_DEFPUSHBUTTON
//0x50010003 = WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX
//0x50010080 = WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL
//0x50012080 = WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL|ES_NUMBER
//0x50210042 = WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_VSCROLL|CBS_DROPDOWN|CBS_AUTOHSCROLL
//0x90CA0040 = WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|DS_SETFONT
AkelPad.CreateDialog(0, pClass, pTxtCaption, 0x90CA0040, nDlgX, nDlgY, 485, 275, hMainWnd, DialogCallback, 0x2 /*CDF_PIXELS*/, 0, 0, "MS Shell Dlg", 1, 8, "|",
  //ExSt, Class,      Title,         Style,        X,   Y,   W,   H, ID,      lParam,
  0x0000, "STATIC",   "",            0x50000000,  10,  10, 225,  13, IDTXTA,       0, "|",
  0x0000, "STATIC",   "",            0x50000000, 250,  10, 225,  13, IDTXTB,       0, "|",
  0x0000, "COMBOBOX", "",            0x50210042,  10,  26, 225,  21, IDSTRA,       0, "|",
  0x0000, "COMBOBOX", "",            0x50210042, 250,  26, 225,  21, IDSTRB,       0, "|",
  0x0000, "BUTTON",   "",            0x50000007,  10,  55, 155, 177, IDLNL,        0, "|",
  0x0000, "BUTTON",   pTxtLNL,       0x50010003,  20,  70, 135,  16, IDISLNL,      0, "|",
  0x0000, "STATIC",   pTxtPadLN,     0x50000000,  20,  93,  115,  13, IDTXTPADLNL,  0, "|",
  0x0200, "EDIT",     pPadLNL,       0x50010080,  135,  91,  20,  20, IDPADLNL,     0, "|",
  0x0000, "STATIC",   pTxtPreLN,     0x50000000,  20, 117,  65,  13, IDTXTPRELNL,  0, "|",
  0x0000, "STATIC",   pTxtSufLN,     0x50000000,  90, 117,  65,  13, IDTXTSUFLNL,  0, "|",
  0x0200, "EDIT",     pPreLNL,       0x50010080,  20, 132,  65,  20, IDPRELNL,     0, "|",
  0x0200, "EDIT",     pSufLNL,       0x50010080,  90, 132,  65,  20, IDSUFLNL,     0, "|",
  0x0000, "BUTTON",   pTxtRelLN,     0x50010003,  20, 165, 135,  16, IDRELLNL,     0, "|",
  0x0000, "STATIC",   pTxtIniLN,     0x50000000,  20, 186,  65,  13, IDTXTINILNL,  0, "|",
  0x0000, "STATIC",   pTxtStepLN,    0x50000000,  90, 186,  65,  13, IDTXTSTEPLNL, 0, "|",
  0x0200, "EDIT",     pIniLNL,       0x50012080,  20, 201,  65,  20, IDINILNL,     0, "|",
  0x0200, "EDIT",     pStepLNL,      0x50012080,  90, 201,  65,  20, IDSTEPLNL,    0, "|",
  0x0000, "BUTTON",   "",            0x50000007, 175,  55, 135,  58, IDESC,        0, "|",
  0x0000, "BUTTON",   pTxtEscNL,     0x50010003, 185,  70, 120,  16, IDESCNL,      0, "|",
  0x0000, "BUTTON",   pTxtEscTab,    0x50010003, 185,  90, 120,  16, IDESCTAB,     0, "|",
  0x0000, "BUTTON",   pTxtRange,     0x50000007, 175, 122, 135,  81, IDRANGE,      0, "|",
  0x0000, "BUTTON",   pTxtSelection, 0x50000009, 185, 140, 120,  16, IDSELECTION,  0, "|",
  0x0000, "BUTTON",   pTxtLines,     0x50000009, 185, 160, 120,  16, IDLINES,      0, "|",
  0x0000, "BUTTON",   pTxtColSel,    0x50000009, 185, 180, 120,  16, IDCOLSEL,     0, "|",
  0x0000, "BUTTON",   pTxtReplace,   0x50010003, 185, 215, 125,  16, IDREPLACE,    0, "|",
  0x0000, "BUTTON",   "",            0x50000007, 320,  55, 155, 177, IDLNR,        0, "|",
  0x0000, "BUTTON",   pTxtLNR,       0x50010003, 330,  70, 135,  16, IDISLNR,      0, "|",
  0x0000, "STATIC",   pTxtPadLN,     0x50000000, 330,  93,  115,  13, IDTXTPADLNR,  0, "|",
  0x0200, "EDIT",     pPadLNR,       0x50010080, 445,  91,  20,  20, IDPADLNR,     0, "|",
  0x0000, "STATIC",   pTxtPreLN,     0x50000000, 330, 117,  65,  13, IDTXTPRELNR,  0, "|",
  0x0000, "STATIC",   pTxtSufLN,     0x50000000, 400, 117,  65,  13, IDTXTSUFLNR,  0, "|",
  0x0200, "EDIT",     pPreLNR,       0x50010080, 330, 132,  65,  20, IDPRELNR,     0, "|",
  0x0200, "EDIT",     pSufLNR,       0x50010080, 400, 132,  65,  20, IDSUFLNR,     0, "|",
  0x0000, "BUTTON",   pTxtRelLN,     0x50010003, 330, 165, 135,  16, IDRELLNR,     0, "|",
  0x0000, "STATIC",   pTxtIniLN,     0x50000000, 330, 186,  65,  13, IDTXTINILNR,  0, "|",
  0x0000, "STATIC",   pTxtStepLN,    0x50000000, 400, 186,  65,  13, IDTXTSTEPLNR, 0, "|",
  0x0200, "EDIT",     pIniLNR,       0x50012080, 330, 201,  65,  20, IDINILNR,     0, "|",
  0x0200, "EDIT",     pStepLNR,      0x50012080, 400, 201,  65,  20, IDSTEPLNR,    0, "|",
  0x0000, "BUTTON",   pTxtApply,     0x50010000, 120, 242,  75,  23, IDAPPLY,      0, "|",
  0x0000, "BUTTON",   pTxtOK,        0x50010001, 205, 242,  75,  23, IDOK,         0, "|",
  0x0000, "BUTTON",   pTxtClose,     0x50010000, 290, 242,  75,  23, IDCLOSE,      0, "|"
  );

if (hDlg)
{
  AkelPad.ScriptNoMutex();
  AkelPad.WindowGetMessage(0x2 /*WGM_NOKEYSEND*/);
}

AkelPad.WindowUnregisterClass(pClass);

function DialogCallback(hWnd, uMsg, wParam, lParam)
{
  var nID, i;

  if (uMsg == 272 /*WM_INITDIALOG*/)
  {
    hDlg = hWnd;

    //Fill comboboxes
    for (i = 0; i < lpStrsA.length; ++i)
      SendDlgItemMessage(IDSTRA, 323 /*CB_ADDSTRING*/, 0, lpStrsA[i]);
    for (i = 0; i < lpStrsB.length; ++i)
      SendDlgItemMessage(IDSTRB, 323 /*CB_ADDSTRING*/, 0, lpStrsB[i]);
    SetDlgItemText(IDSTRA, pStrA);
    SetDlgItemText(IDSTRB, pStrB);

    //Check
    CheckDlgButton(IDISLNL,   bIsLNL);
    CheckDlgButton(IDRELLNL,  bRelLNL);
    CheckDlgButton(IDESCNL,   bEscNL);
    CheckDlgButton(IDESCTAB,  bEscTab);
    CheckDlgButton(IDREPLACE, bReplace);
    CheckDlgButton(IDISLNR,   bIsLNR);
    CheckDlgButton(IDRELLNR,  bRelLNR);

    //Set limit edit text
    SendDlgItemMessage(IDPADLNL, 197 /*EM_LIMITTEXT*/, 1, 0);
    SendDlgItemMessage(IDPADLNR, 197 /*EM_LIMITTEXT*/, 1, 0);
  }

  else if (uMsg == 6 /*WM_ACTIVATE*/)
  {
    if (LoWord(wParam))
    {
      hEditWnd  = AkelPad.GetEditWnd();
      bReadOnly = AkelPad.GetEditReadOnly(hEditWnd);
      bColSel   = AkelPad.SendMessage(hEditWnd, 3127 /*AEM_GETCOLUMNSEL*/, 0, 0);

      if (hEditWnd && (! bReadOnly))
      {
        for (i = IDTXTA; i <= IDOK; ++i)
          oSys.Call("User32::EnableWindow", GetDlgItem(i), 1);
        for (i = IDTXTPADLNL; i <= IDRELLNL; ++i)
          oSys.Call("User32::EnableWindow", GetDlgItem(i), bIsLNL);
        for (i = IDTXTINILNL; i <= IDSTEPLNL; ++i)
          oSys.Call("User32::EnableWindow", GetDlgItem(i), (bIsLNL && bRelLNL));
        for (i = IDTXTPADLNR; i <= IDRELLNR; ++i)
          oSys.Call("User32::EnableWindow", GetDlgItem(i), bIsLNR);
        for (i = IDTXTINILNR; i <= IDSTEPLNR; ++i)
          oSys.Call("User32::EnableWindow", GetDlgItem(i), (bIsLNR && bRelLNR));

        if ((nRange == 2) && (! bColSel))
          nRange = 0;

        oSys.Call("User32::CheckRadioButton", hDlg, IDSELECTION, IDCOLSEL, IDSELECTION + nRange);
        oSys.Call("User32::EnableWindow", GetDlgItem(IDCOLSEL), bColSel);

        SetDlgItemText(IDTXTA, pTxtA[nRange]);
        SetDlgItemText(IDTXTB, pTxtB[nRange]);
      }
      else
      {
        for (i = IDTXTA; i <= IDOK; ++i)
          oSys.Call("User32::EnableWindow", GetDlgItem(i), 0);

        oSys.Call("User32::DefDlgProcW", hDlg, 1025 /*DM_SETDEFID*/, IDCLOSE, 0);
      }
    }
  }

  else if (uMsg == 273 /*WM_COMMAND*/)
  {
    nID = LoWord(wParam);

    if ((nID == IDISLNL) || (nID == IDRELLNL))
    {
      bIsLNL  = IsDlgButtonChecked(IDISLNL);
      bRelLNL = IsDlgButtonChecked(IDRELLNL);
      for (i = IDTXTPADLNL; i <= IDRELLNL; ++i)
        oSys.Call("User32::EnableWindow", GetDlgItem(i), bIsLNL);
      for (i = IDTXTINILNL; i <= IDSTEPLNL; ++i)
        oSys.Call("User32::EnableWindow", GetDlgItem(i), (bIsLNL && bRelLNL));
    }

    else if (nID == IDESCNL)
      bEscNL = IsDlgButtonChecked(nID);

    else if (nID == IDESCTAB)
      bEscTab = IsDlgButtonChecked(nID);

    else if ((nID >= IDSELECTION) && (nID <= IDCOLSEL))
    {
      nRange = nID - IDSELECTION;
      SetDlgItemText(IDTXTA, pTxtA[nRange]);
      SetDlgItemText(IDTXTB, pTxtB[nRange]);
    }

    else if (nID == IDREPLACE)
      bReplace = IsDlgButtonChecked(IDREPLACE);

    else if ((nID == IDISLNR) || (nID == IDRELLNR))
    {
      bIsLNR  = IsDlgButtonChecked(IDISLNR);
      bRelLNR = IsDlgButtonChecked(IDRELLNR);
      for (i = IDTXTPADLNR; i <= IDRELLNR; ++i)
        oSys.Call("User32::EnableWindow", GetDlgItem(i), bIsLNR);
      for (i = IDTXTINILNR; i <= IDSTEPLNR; ++i)
        oSys.Call("User32::EnableWindow", GetDlgItem(i), (bIsLNR && bRelLNR));
    }

    else if ((nID == IDAPPLY) || (nID == IDOK))
    {
      InsertText();

      if (nID == IDOK)
        oSys.Call("User32::PostMessageW", hDlg, 16 /*WM_CLOSE*/, 0, 0);
    }

    else if ((nID == IDCLOSE) || (nID == 2 /*IDCANCEL*/))
      oSys.Call("User32::PostMessageW", hDlg, 16 /*WM_CLOSE*/, 0, 0);
  }

  else if (uMsg == 16 /*WM_CLOSE*/)
  {
    WriteIni();
    oSys.Call("User32::PostQuitMessage", 0);
    oSys.Call("User32::DestroyWindow", hDlg);
  }

  return 0;
}

function LoWord(nParam)
{
  return (nParam & 0xFFFF);
}

//function HiWord(nParam)
//{
//  return ((nParam >> 16) & 0xFFFF);
//}

function GetDlgItem(nID)
{
  return oSys.Call("User32::GetDlgItem", hDlg, nID);
}

function SendDlgItemMessage(nID, uMsg, wParam, lParam)
{
  return oSys.Call("User32::SendDlgItemMessageW", hDlg, nID, uMsg, wParam, lParam);
}

function GetDlgItemText(nID)
{
  var nTextLen = SendDlgItemMessage(nID, 14 /*WM_GETTEXTLENGTH*/, 0, 0);
  var pText    = "";
  var lpBuffer;

  if (nTextLen)
  {
    lpBuffer = AkelPad.MemAlloc(nTextLen * 2 + 2);
    oSys.Call("User32::GetDlgItemTextW", hDlg, nID, lpBuffer, nTextLen + 1);
    pText = AkelPad.MemRead(lpBuffer, 1 /*DT_UNICODE*/);
    AkelPad.MemFree(lpBuffer);
  }

  return pText;
}

function SetDlgItemText(nID, pText)
{
  oSys.Call("User32::SetDlgItemTextW", hDlg, nID, pText);
}

function IsDlgButtonChecked(nID)
{
  return oSys.Call("User32::IsDlgButtonChecked", hDlg, nID);
}

function CheckDlgButton(nID, bCheck)
{
  oSys.Call("User32::CheckDlgButton", hDlg, nID, bCheck);
}

function SetRedraw(hWnd, bRedraw)
{
	AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
	bRedraw && oSys.Call("User32::InvalidateRect", hWnd, 0, true);
}

function Pad(pString, nLen, pType, pChar)
{
  var i = 0;

  if (! pType) pType = "R";
  if (! pChar) pChar = " ";

  if (pType == "R")
  {
    while (pString.length < nLen)
      pString += pChar;
  }
  else if (pType == "L")
  {
    while (pString.length < nLen)
      pString = pChar + pString;
  }
  else if (pType == "C")
  {
    while (pString.length < nLen)
    {
      if ((i % 2) == 0)
        pString += pChar;
      else
        pString = pChar + pString;
      ++ i;
    }
  }
  return pString;
}

function InsertText()
{
  var nWordWrap = AkelPad.SendMessage(hEditWnd, 3241 /*AEM_GETWORDWRAP*/, 0, 0);

  SetRedraw(hEditWnd, false);
  if (nWordWrap > 0)
    AkelPad.Command(4209 /*IDM_VIEW_WORDWRAP*/);

  var nBegSel  = AkelPad.GetSelStart();
  var nEndSel  = AkelPad.GetSelEnd();
  var nLine1   = AkelPad.SendMessage(hEditWnd, 1078 /*EM_EXLINEFROMCHAR*/, 0, nBegSel);
  var nLine2   = AkelPad.SendMessage(hEditWnd, 1078 /*EM_EXLINEFROMCHAR*/, 0, nEndSel);
  var nLines   = nLine2 - nLine1 + 1;
  var aLinNumL = new Array(nLines);
  var aLinNumR = new Array(nLines);
  var nStep;
  var nIniNum;
  var nLenNum;
  var aLines;
  var pText;
  var i;

  if (pStrA = GetDlgItemText(IDSTRA))
  {
    if (! FindInArray(lpStrsA, pStrA))
    {
      lpStrsA.unshift(pStrA);
      SendDlgItemMessage(IDSTRA, 330 /*CB_INSERTSTRING*/, 0, pStrA);

      if (lpStrsA.length > nStrMax)
      {
        lpStrsA.length = nStrMax;
        SendDlgItemMessage(IDSTRA, 324 /*CB_DELETESTRING*/, nStrMax, 0);
      }
    }
  }

  if (pStrB = GetDlgItemText(IDSTRB))
  {
    if (! FindInArray(lpStrsB, pStrB))
    {
      lpStrsB.unshift(pStrB);
      SendDlgItemMessage(IDSTRB, 330 /*CB_INSERTSTRING*/, 0, pStrB);

      if (lpStrsB.length > nStrMax)
      {
        lpStrsB.length = nStrMax;
        SendDlgItemMessage(IDSTRB, 324 /*CB_DELETESTRING*/, nStrMax, 0);
      }
    }
  }

  pPadLNL  = GetDlgItemText(IDPADLNL);
  pPreLNL  = GetDlgItemText(IDPRELNL);
  pSufLNL  = GetDlgItemText(IDSUFLNL);
  pIniLNL  = GetDlgItemText(IDINILNL);
  pStepLNL = GetDlgItemText(IDSTEPLNL);
  pPadLNR  = GetDlgItemText(IDPADLNR);
  pPreLNR  = GetDlgItemText(IDPRELNR);
  pSufLNR  = GetDlgItemText(IDSUFLNR);
  pIniLNR  = GetDlgItemText(IDINILNR);
  pStepLNR = GetDlgItemText(IDSTEPLNR);

  for (i = 0; i < nLines; ++i)
  {
    aLinNumL[i] = "";
    aLinNumR[i] = "";
  }

  if (bEscNL)
  {
    pStrA = pStrA.replace(/\\n/g, "\r");
    pStrB = pStrB.replace(/\\n/g, "\r");
  }

  if (bEscTab)
  {
    pStrA = pStrA.replace(/\\t/g, "\t");
    pStrB = pStrB.replace(/\\t/g, "\t");
  }

  if (bIsLNL)
  {
    if (pPadLNL == "")
      pPadLNL = " ";

    if (bRelLNL)
    {
      nStep   = parseInt(pStepLNL);
      nIniNum = parseInt(pIniLNL);
      nLenNum = String((nIniNum + nStep * (nLines - 1))).length;
    }
    else
    {
      nStep   = 1;
      nIniNum = nLine1 + 1;
      nLenNum = String(nLine2 + 1).length;
    }

    for (i = 0; i < nLines; ++i)
      aLinNumL[i] = pPreLNL + Pad(String(nIniNum + nStep * i), nLenNum, "L", pPadLNL) + pSufLNL;
  }

  if (bIsLNR)
  {
    if (pPadLNR == "")
      pPadLNR = " ";

    if (bRelLNR)
    {
      nStep   = parseInt(pStepLNR);
      nIniNum = parseInt(pIniLNR);
      nLenNum = String((nIniNum + nStep * (nLines - 1))).length;
    }
    else
    {
      nStep   = 1;
      nIniNum = nLine1 + 1;
      nLenNum = String(nLine2 + 1).length;
    }

    for (i = 0; i < nLines; ++i)
      aLinNumR[i] = pPreLNR + Pad(String(nIniNum + nStep * i), nLenNum, "L", pPadLNR) + pSufLNR;
  }

  // insert in selection
  if (nRange == 0)
    pText = pStrA + aLinNumL[0] +
            (bReplace ? "" : AkelPad.GetSelText(1 /*\r*/)) +
            aLinNumR[nLines - 1] + pStrB;

  // insert in each of selected lines and columnar selection
  else
  {
    if (nRange == 1)
    {
      nEndSel = AkelPad.SendMessage(hEditWnd, 187 /*EM_LINEINDEX*/, nLine2, 0) + AkelPad.SendMessage(hEditWnd, 193 /*EM_LINELENGTH*/, nEndSel, 0);
      AkelPad.SetSel(nBegSel, nEndSel);
    }

    pText  = AkelPad.GetSelText(1 /*\r*/);
    aLines = pText.split("\r");

    for (i = 0; i < nLines; ++i)
      aLines[i] = pStrA + aLinNumL[i] +
                  (bReplace ? "" : aLines[i]) +
                  aLinNumR[i] + pStrB;

    pText = aLines.join("\r");
  }

  AkelPad.ReplaceSel(pText, -1);

  if (((nRange == 0) && bColSel) || (nRange == 2))
    AkelPad.SendMessage(hEditWnd, 3128 /*AEM_UPDATESEL*/, 0x1 /*AESELT_COLUMNON*/, 0);

  if (nWordWrap > 0)
    AkelPad.Command(4209 /*IDM_VIEW_WORDWRAP*/);
  SetRedraw(hEditWnd, true);
}

function FindInArray(lpArray, pText)
{
  for (var i = 0; i < lpArray.length; ++i)
  {
    if (lpArray[i] == pText)
      return true;
  }
  return false;
}

function ReadIni()
{
  var i;

  try
  {
    eval(ReadIni.Text = AkelPad.ReadFile(WScript.ScriptFullName.replace(/\.js$/i, ".ini"), 0x1D /*OD_ADT_BINARY_ERROR|OD_ADT_DETECT_CODEPAGE|OD_ADT_DETECT_BOM|OD_ADT_NOMESSAGES*/));
  }
  catch (oError)
  {}

  if (! lpStrsA)
    lpStrsA = [];
  if (! lpStrsB)
    lpStrsB = [];

  if (lpStrsA.length > nStrMax)
    lpStrsA.length = nStrMax;
  if (lpStrsB.length > nStrMax)
    lpStrsB.length = nStrMax;

  //for compatibility with ver. 2015-01-07
  for (i = lpStrsA.length - 1; i >= 0; --i)
  {
    if (! lpStrsA[i])
      lpStrsA.splice(i, 1);
  }
  for (i = lpStrsB.length - 1; i >= 0; --i)
  {
    if (! lpStrsB[i])
      lpStrsB.splice(i, 1);
  }
}

function WriteIni()
{
  var lpRect = AkelPad.MemAlloc(16); //sizeof(RECT)
  var pText  = 'lpStrsA=[';
  var i;

  oSys.Call("User32::GetWindowRect", hDlg, lpRect);
  oSys.Call("User32::ScreenToClient", hMainWnd, lpRect);
  nDlgX = AkelPad.MemRead(_PtrAdd(lpRect,  0), 3 /*DT_DWORD*/);
  nDlgY = AkelPad.MemRead(_PtrAdd(lpRect,  4), 3 /*DT_DWORD*/);
  AkelPad.MemFree(lpRect);

  for (i = 0; i < lpStrsA.length; ++i)
  {
    pText += '"' + EscapeStr(lpStrsA[i]) + '"';
    if (i < lpStrsA.length - 1)
      pText += ',';
  }
  pText += '];\r\nlpStrsB=[';

  for (i = 0; i < lpStrsB.length; ++i)
  {
    pText += '"' + EscapeStr(lpStrsB[i]) + '"';
    if (i < lpStrsB.length - 1)
      pText += ',';
  }
  pText += '];\r\n';

  pText += 'pStrA="'    + EscapeStr(pStrA)   + '";\r\n' + 
           'pStrB="'    + EscapeStr(pStrB)   + '";\r\n' + 
           'bEscNL='    + bEscNL   + ';\r\n' + 
           'bEscTab='   + bEscTab  + ';\r\n' +
           'bIsLNL='    + bIsLNL   + ';\r\n' +
           'pPadLNL="'  + EscapeStr(pPadLNL) + '";\r\n' + 
           'pPreLNL="'  + EscapeStr(pPreLNL) + '";\r\n' +
           'pSufLNL="'  + EscapeStr(pSufLNL) + '";\r\n' +
           'bRelLNL='   + bRelLNL  + ';\r\n' +
           'pIniLNL="'  + pIniLNL  + '";\r\n' +
           'pStepLNL="' + pStepLNL + '";\r\n' +
           'bIsLNR='    + bIsLNR   + ';\r\n' +
           'pPadLNR="'  + EscapeStr(pPadLNR) + '";\r\n' + 
           'pPreLNR="'  + EscapeStr(pPreLNR) + '";\r\n' +
           'pSufLNR="'  + EscapeStr(pSufLNR) + '";\r\n' +
           'bRelLNR='   + bRelLNR  + ';\r\n' +
           'pIniLNR="'  + pIniLNR  + '";\r\n' +
           'pStepLNR="' + pStepLNR + '";\r\n' +
           'bReplace='  + bReplace + ';\r\n' +
           'nDlgX='     + nDlgX + ';\r\n' +
           'nDlgY='     + nDlgY + ';'

  if (pText != ReadIni.Text) 
    AkelPad.WriteFile(WScript.ScriptFullName.replace(/\.js$/i, ".ini"), pText, pText.length, 1200 /*UTF-16LE*/, true);
}

function EscapeStr(pStr)
{
  return pStr.replace(/[\\"]/g, '\\$&').replace(/\n/g, '\\n').replace(/\r/g, '\\r');
}

function GetLangStrings()
{
  switch (AkelPad.GetLangId())
  {
    case 1045: //Polish
      pTxtCaption   = "Wstaw tekst i numer wiersza";
      pTxtNoColSel  = "Brak zaznaczenia pionowego.";
      pTxtA         =["Na początku zaznaczenia:",
                      "Na początku wierszy:",
                      "Z lewej każdej części zaznaczenia:"];
      pTxtB         =["Na końcu zaznaczenia:",
                      "Na końcu wierszy:",
                      "Z prawej każdej części zaznaczenia:"];
      pTxtEscNL     = "\\n = &Nowy wiersz";
      pTxtEscTab    = "\\t = &Tabulacja";
      pTxtRange     = "Zakres";
      pTxtSelection = "Z&aznaczenie";
      pTxtLines     = "Zaznaczone &wiersze";
      pTxtColSel    = "Pionow&e zaznaczenie";
      pTxtLNL       = "Numer wiersza z &Lewej";
      pTxtLNR       = "Numer wiersza z &Prawej";
      pTxtPadLN     = "Wypełnienie:";
      pTxtPreLN     = "Prefiks:";
      pTxtSufLN     = "Sufiks:";
      pTxtRelLN     = "Numeracja względna";
      pTxtIniLN     = "Pierwszy nr:";
      pTxtStepLN    = "Skok:";
      pTxtReplace   = "Usuń &zaznaczenie";
      pTxtApply     = "Wykonaj";
      pTxtOK        = "OK";
      pTxtClose     = "Zamknij";
      break;
    case 1049: //Russian translation by F. Phoenix
      pTxtCaption   = "Вставка текста и номеров строк";
      pTxtNoColSel  = "Нет выделенного столбиком.";
      pTxtA         =["В начале выделенного:",
                      "В начале каждой строки выделенного:",
                      "В начале каждого участка выделенного:"];
      pTxtB         =["В конце выделенного:",
                      "В конце каждой строки выделенного:",
                      "В конце каждого участка выделенного:"];
      pTxtEscNL     = "\\n = &Новая строка";
      pTxtEscTab    = "\\t = &Табуляция";
      pTxtRange     = "Область применения";
      pTxtSelection = "В&ыделение";
      pTxtLines     = "Выделенные &строки";
      pTxtColSel    = "&Выделено столбцом";
      pTxtLNL       = "Номера строк с&лева";
      pTxtLNR       = "Номера строк с&права";
      pTxtPadLN     = "Заполнитель ширины:";
      pTxtPreLN     = "Префикс:";
      pTxtSufLN     = "Суффикс:";
      pTxtRelLN     = "&Своя нумерация";
      pTxtIniLN     = "Отсчёт от:";
      pTxtStepLN    = "Увелич. на:";
      pTxtReplace   = "Замена &выделенного";
      pTxtApply     = "Применить";
      pTxtOK        = "OK";
      pTxtClose     = "Закрыть";
      break; 
    default: //English
      pTxtCaption   = "Insert text and line number";
      pTxtNoColSel  = "There is no columnar selection.";
      pTxtA         =["At beginning of selection:",
                      "At left of lines:",
                      "At left any part of columnar selection:"];
      pTxtB         =["At end of selection:",
                      "At right of lines:",
                      "At right any part of columnar selection:"];
      pTxtEscNL     = "\\n = &New line";
      pTxtEscTab    = "\\t = &Tabulation";
      pTxtRange     = "Range";
      pTxtSelection = "S&election";
      pTxtLines     = "Selecte&d lines";
      pTxtColSel    = "&Columnar selection";
      pTxtLNL       = "Line number at &Left";
      pTxtLNR       = "Line number at &Right";
      pTxtPadLN     = "Padding char:";
      pTxtPreLN     = "Prefix:";
      pTxtSufLN     = "Suffix:";
      pTxtRelLN     = "Relative numbers";
      pTxtIniLN     = "First number:";
      pTxtStepLN    = "Step:";
      pTxtReplace   = "Replace &selection";
      pTxtApply     = "Apply";
      pTxtOK        = "OK";
      pTxtClose     = "Close";
  }
}


И добавил описание этого скрипта в справку.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

AZJIO wrote:Скрипту toggleComments.js можно добавить флаг инвертирования для многострочного комментария.
А что не так с существующим флагом ("-preferLineComments")? Поясните свою мысль.
AZJIO wrote:Описание к флагу -ignoreLineCommentsAfterCode можно сделать:
игнорировать "код // комментарий", то есть если курсор находится внутри комментария, то:
true - добавит комментирование в начало строки
false - уберёт существующее комментирование
если нет иных особенностей.
А "если есть", то ещё абзац написать?
AZJIO wrote:И указать параметры по умолчанию.
В моей установленной версии скрипта (0.4.4) у всех параметров дефолтные значения в описании явным образом помечены (за одним единственным исключением "-blockCommentsEntireLines=1"). Убедитесь, что у вас актуальная версия (0.4.4) скрипта.

Offline
Posts: 348
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

opk44 wrote:А что не так с существующим флагом ("-preferLineComments")? Поясните свою мысль.
Ну я добавил нужно инвертирование как флаг частное для этого случая, сейчас закомментированное комментируется дважды. Это имеет смысл тоже, потому что инвертирование может расскомментировать описание, но я часто использовал инвертирование в Notepad++.
opk44 wrote:А "если есть", то ещё абзац написать?
моя версия может оказаться частным, надо тестировать языки например html, где нет однострочных комментариев. Но там там где не имеет смысл нет смысла забивать голову лишней инфой, а краткое описание "игнорировать" здесь понятно только когда сам написал скрипт.
opk44 wrote:Убедитесь, что у вас актуальная версия (0.4.4) скрипта.
да, у меня 0.4.4, ну это можно списать на стилистику описаний, я привык, что

Code: Select all

//   -saveLastExt=0                     - don't save last used extension
//               =1                     - save only typed (default)
//               =2                     - always save
записан как

Code: Select all

//   -saveLastExt=1                     
//               =0                     - don't save last used extension
//               =1                     - (default) save only typed
//               =2                     - always save
или

Code: Select all

//   -saveLastExt - сохранять ли последнее расширение
//               =0                     - нет
//               =1                     - (default) только введённый
//               =2                     - да всегда
а текст (default) всегда в начале строки.
Иначе меня начинает путать другой параметр, например -removeSpaces=true, является ли он по умолчанию. Хотя сейчас я понимаю, что для логических параметров умолчальное является приравненным, а для чисел указывается (default).

_____________________
Кстати, для InsertTextLN.js параметр "шаг" можно было бы позволить -1, чтобы импортировать обратный отсчёт.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

AZJIO wrote:
opk44 wrote:А что не так с существующим флагом ("-preferLineComments")? Поясните свою мысль.
Ну я добавил нужно инвертирование как флаг частное для этого случая, сейчас закомментированное комментируется дважды. Это имеет смысл тоже, потому что инвертирование может расскомментировать описание, но я часто использовал инвертирование в Notepad++.
Понятнее не стало. Не знаю какой язык является для вас родным, но у меня такое чувство, что читаю гугло-перевод с какого-то неизвестного мне языка.

Offline
Posts: 348
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

opk44 wrote:Понятнее не стало.
было

Code: Select all

$LngMs1='Ошибка'
; $LngMs2='Выделите текст, который требуется отправить в справку'
$LngMs3='Слово в списке UDF, но каталог Include не найден'
стало

Code: Select all

; $LngMs1='Ошибка'
; ; $LngMs2='Выделите текст, который требуется отправить в справку'
; $LngMs3='Слово в списке UDF, но каталог Include не найден'
должно было быть

Code: Select all

; $LngMs1='Ошибка'
$LngMs2='Выделите текст, который требуется отправить в справку'
; $LngMs3='Слово в списке UDF, но каталог Include не найден'

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

opk44 wrote:Не знаю какой язык является для вас родным, но у меня такое чувство, что читаю гугло-перевод с какого-то неизвестного мне языка.
У меня такое же ощущение.

Offline
Posts: 348
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

VladSh
Теперь будем обсуждать меня? Я вот тоже удивлён отсутствием понимания слова "инвертирование", по моему оно одно даёт весь смысл происходящего, но я не хотел об этом расписывать на несколько статей в виде постов на форуме. А описывать очевидное всегда сложно, обычно надо чувствовать где человек не понимает и где надо сделать упор, а когда это аксиома и надо её объяснить, тут я пас.
Ну я добавил
Добавил текст в пост о том, что нужно инвертирование. Писать это в виде прямой речи?
Ну я добавил:
- "нужно инвертирование как флаг"
Но я подумал вы же программисты, вам не нужна запятая перед "чтобы", потому что само слово "чтобы" является ключевым, хотя это будет по правилам написания. Но если мне достаточно легко в этом не запутаться, то я посчитал, что и вам тоже. Ну ладно в следующий раз буду писать вам короткими предложениями, чтобы вы не строили из себя жертву, а у меня не было ощущения что вы собираетесь меня потроллить из зависти.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

1.
AZJIO wrote:Я вот тоже удивлён отсутствием понимания слова "инвертирование", по моему оно одно даёт весь смысл происходящего
В оригинале фраза звучала так:
добавить флаг инвертирования для многострочного комментария
В паре с предыдущим сообщением, не вызывало сомнений, что речь идёт именно о (в вашей терминологии) "блочном комментарии". Соответственно, были основания предполагать, что вы желаете использовать "строчные" комментарии вместо "блочных"

Code: Select all

/*.....     ==>     //.....
.......     ==>     //.....
.....*/     ==>     //.....
2.
я подумал вы же программисты, вам не нужна запятая
Хорошая шутка

3.
вы собираетесь меня потроллить из зависти
Не сомневайся, камрад. Исключительно из зависти.

DV
Offline
Posts: 1291
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

CommandPalette.js
Версия 0.1.2 - небольшие улучшения в отображении списка команд (конфигурируемо) и в фильтрации команд

Offline
Posts: 348
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

DV wrote:CommandPalette.js
Версия 0.1.2 - небольшие улучшения в отображении списка команд (конфигурируемо) и в фильтрации команд
Можно ли получить команды из текущего меню? То есть не англоязычное, а экспортировать из dll, язык которого указан, а также извлечь из своего меню.
Не сразу догадался нажать Enter, чтобы команда выполнилась. Можно добавить описание: поиск команды по мере набора части слова и "Enter" на выполнение. Я такое в линукс часто видел, как будто это встроенная в линукс фича.

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

AZJIO wrote:поиск команды по мере набора части слова и "Enter" на выполнение. Я такое в линукс часто видел, как будто это встроенная в линукс фича.
Этой фиче уж как 35 лет, - впервые появилась в Lotus, - так, на лету, работает поиск и переход в любом окне со списками.

Offline
Posts: 348
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

Вообще полезный скрипт. Много пунктов меню могут находится неизвестно где, по разному быть переведены, разная комплектация, а тут ввёл допустим "кодиров" и весь функционал представлен с хоткеями.

Может пункты сделать в ini? Что упростит наполнение командами, скопировав как есть ком.строку из меню в ini. Возможно после анализа сохранить в бинарную форму для более быстрого анализа. Всё равно интерпретатору нужно анализировать массив введённых в коде команд.
Добавить запуск JS-скриптов с параметрами.

Написал на AutoIt3 скрипт -

Code: Select all

$sText = FileRead(@ScriptDir & '\массив команд.txt')
; $sText2 = FileRead(@ScriptDir & '\список команд.txt') ; тут я сначала руками готовил список, а потом начальный этап написал в коде
$sText2 = FileRead(@ScriptDir & '\меню весь.txt')


$aMenu=StringRegExp($sText2, '(".+?") Command\((\d+)\)', 3) ; получаем массив пункт+код
$sText2=''
; генерируем текстовый файл, а мог бы работать с массивом, но да ладно, если изначально сделал через текст
For $i = 0 To UBound($aMenu) - 1 Step 2
	$sText2 &= $aMenu[$i] & ' ' & $aMenu[$i + 1]  & @CRLF
Next
$sText2 = StringReplace($sText2, "&", "") ; удаляем амперсанд, он нам не нужен в этих пунктах
; Exit MsgBox(0, 'Готово', $sText2) ; можем посмотреть текстовые данные без обработки с выходом


$iCount = 0
$a = StringRegExp($sText, ' *?\[ ?(\d{4}), *?".+?" *?\],', 4) ; ищем все строки команд в оригинале
For $i = 0 To UBound($a) - 1
	$aTmp = $a[$i]
	$aFound = StringRegExp($sText2, '"(.+?)" ' & $aTmp[1], 1) ; ищем одноимённый код в нашем меню
	; Если нашли (нет ошибок), то заменяем эту строку нашей строкой, по сути текстовую часть
	If Not @error Then
		; $sText = StringRegExpReplace($sText, $aTmp[0], '  [ ' & $aTmp[1] & ',  "\* ' & $aFound[0] & '" ],') ; из-за амперсанда плохо работает, нужно экранирование
		$sText = StringRegExpReplace($sText, ' *?\[ ?' & $aTmp[1] & ', *?"(.+?:).+?" *?\],', '  [ ' & $aTmp[1] & ',  "\*\1 ' & $aFound[0] & '" ],')
		; считаем число замен, что говорит что скрипт работает
		If Not @error Then
			$iCount += 1
		EndIf
	EndIf
Next

; пишем в новый файл
$hFile = FileOpen(@ScriptDir & '\массив команд 2.txt', 2)
FileWrite($hFile, $sText)
FileClose($hFile)

MsgBox(0, 'Готово', "замен: " & $iCount)

могу скомпилированный дать с файлами для примера.

то есть я получил

Code: Select all

  [ 4101,  "*Файл: Новый	Ctrl+N" ],
  [ 4102,  "*Файл: Новое окно	Ctrl+Shift+N" ],
  [ 4103,  "*Файл: Открыть...	Ctrl+O" ],
  [ 4104,  "*Файл: Переоткрыть	F5" ],
  [ 4105,  "*Файл: Сохранить	Ctrl+S = F2" ],
  [ 4106,  "*Файл: Сохранить как...	Ctrl+Shift+S" ],
  [ 4107,  "*Файл: Установки страницы..." ],
  [ 4108,  "*Файл: Печать...	Ctrl+P" ],
  [ 4109,  "*Файл: Выход	Esc" ],
  [ 4110,  "*Файл: Сохранить все	Ctrl+Alt+F2" ],
  [ 4111,  "*Файл: Сохранить все как..." ],
  [ 4113,  "Файл: Печать" ],
  [ 4114,  "*Файл: Предпросмотр..." ],
  [ 4121,  "*Файл: Определить заново	Alt + F5" ],
  [ 4122,  "*Файл: Открыть как ANSI	Alt + W" ],
  [ 4123,  "*Файл: Открыть как OEM	Alt + D" ],
  [ 4124,  "*Файл: Открыть как KOIR	Alt + K" ],
  [ 4125,  "*Файл: Открыть как UTF16LE	Alt + L" ],
  [ 4126,  "*Файл: Открыть как UTF16BE	Alt + B" ],
  [ 4127,  "*Файл: Открыть как UTF8	Alt + U" ],
  [ 4131,  "*Файл: Сохранить как ANSI	Shift + Alt + W" ],
  [ 4132,  "*Файл: Сохранить как OEM	Shift + Alt + D" ],
  [ 4133,  "*Файл: Сохранить как KOIR	Shift + Alt + K" ],
  [ 4134,  "*Файл: Сохранить как UTF16LE	Shift + Alt + L" ],
  [ 4135,  "*Файл: Сохранить как UTF16BE	Shift + Alt + B" ],
  [ 4136,  "*Файл: Сохранить как UTF8	Shift + Alt + U" ],
  [ 4137,  "Файл: Сохранить как UTF-8 без BOM" ],
  [ 4140,  "*Правка: Конт. меню преобр. кодировок	F12" ],
  [ 4151,  "*Правка: Отменить	Ctrl+Z" ],
  [ 4152,  "*Правка: Вернуть отменённое	Ctrl+Shift+Z" ],
  [ 4153,  "*Правка: Вырезать	Ctrl+X" ],
  [ 4154,  "*Правка: Копировать	Ctrl+C" ],
  [ 4155,  "*Правка: Вставить	Ctrl+V" ],
  [ 4156,  "*Правка: Удалить	Del" ],
  [ 4157,  "*Правка: Выделить всё	Ctrl+A" ],
  [ 4158,  "*Правка: Найти...	Ctrl+F" ],
  [ 4159,  "*Правка: Найти следующее	F3" ],
  [ 4160,  "*Правка: Найти предыдущее	Shift+F3" ],
  [ 4161,  "*Правка: Заменить...	Ctrl+H/R" ],
  [ 4162,  "*Правка: Перейти к...	Ctrl+G" ],
  [ 4163,  "*Правка: Запуск 'Таблица символов'	Ctrl+I" ],
  [ 4164,  "Правка: Вкладка Отступ" ],
  [ 4165,  "Правка: Tab отступ, если несколько строк выбраны" ],
  [ 4166,  "Правка: Tab Unindent, если несколько строк выбраны другой Tab Отступ" ],
  [ 4167,  "Правка: Tab Unindent, если несколько строк выбрано" ],
  [ 4168,  "Правка: Space Отступ" ],
  [ 4169,  "Правка: Space отступ, если несколько строк выбраны" ],
  [ 4170,  "Правка: Space Unindent, если несколько строк выбрано другое Space Отступ" ],
  [ 4171,  "Правка: Space Unindent только если несколько строк выбрано" ],
  [ 4172,  "Правка: Удалить первый символ" ],
  [ 4173,  "Правка: Удалить первый символ, только если выбор не пустой" ],
  [ 4174,  "*Правка: Удалить пробелы и табы в конце строк	Alt+Backspace" ],
  [ 4175,  "*Правка: В ВЕРХНИЙ	Ctrl+6" ],
  [ 4176,  "*Правка: в нижний	Ctrl+7" ],
  [ 4177,  "*Правка: Как предложение с заглавной	Ctrl+8" ],
  [ 4178,  "*Правка: Каждое Слово С Заглавной	Ctrl+9" ],
  [ 4179,  "*Правка: иНВЕРТИРОВАНИЕ	Ctrl+0" ],
  [ 4180,  "*Правка: Преобразование по кругу (5 видов)	Ctrl+5" ],
  [ 4182,  "*Правка: Перекодировать...	Alt+R" ],
  [ 4183,  "*Правка: Вставить дату	Ctrl+D" ],
  [ 4184,  "*Правка: DOS/Windows (0Dh, 0Ah)" ],
  [ 4185,  "*Правка: Unix (0Ah)" ],
  [ 4186,  "*Правка: Mac (0Dh)" ],
  [ 4190,  "Правка: режим вставки / замена символов" ],
  [ 4191,  "Правка: Вставить как ANSI текст" ],
  [ 4192,  "*Правка: Вставить в вертикал. выделение	Alt+V" ],
  [ 4193,  "Правка: Вставить текст после вставки" ],
  [ 4194,  "Правка: Вставить текст в зависимости от случая выбора" ],
  [ 4195,  "Правка: Удалить все пробелы в выборе" ],
  [ 4196,  "Правка: Вставить новую строку с отступом (` Держите левую spaces` выключен)" ],
  [ 4197,  "Правка: Удалить текущую строку" ],
  [ 4198,  "Правка: Переместить курсор в противоположный конец выбора" ],
  [ 4199,  "Правка: Переместить курсор на предыдущее местоположение" ],
  [ 4200,  "Правка: Переместить курсор к следующему месту" ],
  [ 4201,  "*Вид: Шрифт..." ],
  [ 4202,  "*Вид: Цвет..." ],
  [ 4204,  "Вид: Увеличить шрифт 1PT" ],
  [ 4205,  "Вид: Уменьшить шрифт 1PT" ],
  [ 4206,  "Вид: Восстановить шрифт размер при запуске" ],
  [ 4209,  "*Вид: Перенос строк	Ctrl+U" ],
  [ 4210,  "*Вид: Поверх всех	Ctrl+T" ],
  [ 4211,  "*Вид: Строка состояния" ],
  [ 4212,  "*Вид: Распределить в 4 панели" ],
  [ 4213,  "*Вид: Распределить вертикально" ],
  [ 4214,  "*Вид: Распределить горизонтально" ],
  [ 4215,  "Вид: окно Split (вкл / выкл)" ],
  [ 4216,  "*Вид: Только чтение (блокир. в редакторе)" ],
  [ 4251,  "*Опции: Выполнить/Открыть	Ctrl+F5" ],
  [ 4252,  "*Опции: Не менять время файла" ],
  [ 4253,  "*Опции: Следить за изменением файла" ],
  [ 4254,  "*Опции: Сохранять отступы слева	Ctrl+L" ],
  [ 4255,  "*Опции: Не открывать файл дважды" ],
  [ 4256,  "*Опции: Не открывать программу дважды" ],
  [ 4259,  "*Опция: Плагины...	Alt+P" ],
  [ 4260,  "*Опция: Настройки..." ],
  [ 4261,  "*Опции: Одно окно (SDI)" ],
  [ 4262,  "*Опции: Несколько окон (MDI)" ],
  [ 4263,  "*Опции: Псевдо-несколько окон (PMDI)" ],
  [ 4301,  "*Опции: Сверху" ],
  [ 4302,  "*Опции: Снизу" ],
  [ 4303,  "*Опции: Скрыть" ],
  [ 4304,  "*Опции: Стандарт" ],
  [ 4305,  "*Опции: Кнопки" ],
  [ 4306,  "*Опции: Плоские кнопки" ],
  [ 4307,  "*Окно: Горизонтально" ],
  [ 4308,  "*Окно: Вертикально" ],
  [ 4309,  "*Окно: Каскадом" ],
  [ 4310,  "*Опции: Следующее Предыдущее" ],
  [ 4311,  "*Опция: Правый Левый" ],
  [ 4316,  "Окно: Активация следующая вкладка" ],
  [ 4317,  "Окно: Activate предыдущая вкладка" ],
  [ 4318,  "*Окно: Закрыть" ],
  [ 4319,  "*Окно: Закрыть все" ],
  [ 4320,  "*Окно: Закрыть все кроме текущей" ],
  [ 4321,  "Окно: Закрыть все неизмененные вкладки" ],
  [ 4322,  "Окно: закладка Clone ток" ],
  [ 4323,  "Окно: Копировать путь текущей вкладки Файл" ],
  [ 4324,  "Файл: Закрыть файл" ],
  [ 4325,  "Файл: Закрыть файл и выйти (SDI) или закрыть текущую вкладку (MDI / PMDI)" ],
  [ 4327,  "*Окно: Выбрать окно...	F10" ],
  [ 4331,  "Окно: Восстановление / главное окно Maximize" ],
  [ 4332,  "Окно: Следующее диалоговое окно Активировать" ],
  [ 4333,  "Окно: предыдущее диалоговое окно Активировать" ],
  [ 4341,  "Вид: Активация следующей панели (Разделить окно)" ],
  [ 4342,  "Вид: Активировать предыдущую панель (Разделить окно)" ],
  [ 4351,  "*Справка: О программе..." ],
  [ 4352,  "Справка: Руководство ..." ],
  [ 4353,  "*Справка: Обновление..." ],
  [ 5001,  "*Файл: Удаление несуществующих" ],

звёздочкой я обозначил пункты, которые подверглись замене

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

> на AutoIt3 скрипт
Оказывается это обычный Basic с другим символом комментов и парочкой других таких же мелочей :lol:

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

VladSh
Во-первых, не совсем обычный. Во-вторых, а что же в этом плохого для скриптового языка? Было бы гораздо более "странно", будь он (этот язык) ни на кого не похож.
AutoIt v3 is a freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting.
Более того, судя по описанию, максимальная похожесть на BASIC считается самим автором его первейшей "фичей":
Features:
Easy to learn BASIC-like syntax
...

Offline
Posts: 348
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

opk44
Это описание AutoIt есть на русском, как и вся справка (уровнем выше). Я попробовал PureBasic и хотя есть похожесть это не отменяет изучение. То к чему привык в одном приходится делать совершенно по другому в другом. Мало функций, которые можно сказать, что сменилось название, на самом деле сменились все свойства, поведение и т.д.

Жаль у меня не хватает время, потому что надо на долго засесть за работу, чтобы изменить справку js в контексте AkelPad. В справке есть общее описание, но было бы здорово если бы там были реальные примеры, которые можно было бы применить. К примеру в справке AutoIt скрипт можно запустить прямо из справки, почему бы такое не сделать в AkelPad, но тогда в папке скриптов будет 1000 файлов. Как бы сделать, чтобы в папке скриптов была папка "Examples" и можно было бы сделать пути в справке направляя на эти примеры, клик открывает его в AkelPad, и по хоткею запускаем скрипт в AkelPad. Вот тогда было бы удобно быстро учиться и функционал был бы раскрыт.
Post Reply