Что хотелось бы добавить в AkelPad (3)

Russian main discussion
  • Author
  • Message
Offline
Posts: 351
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

Sticher78 wrote:но никто же не откажется от удобства?
Вот и ответил сам себе.
Sticher78 wrote:Off-top: Ещё бы кто под мои леворукие клешни клаву забацал с функционально-цифровым блоком слева, в пределах адекватной цены, ехх..
А на алиэкспресс смотрел? Может всё уже придумали, по крайней мере гугл картинки выдаёт.

Offline
Posts: 5
Joined: Sat Nov 09, 2019 2:53 pm

Post by hexep »

не хватает такой функции:
Image

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

Post by AZJIO »

hexep wrote:не хватает такой функции:
не хватает, но есть ColumnsReplace.js если поставить хоткей "Alt+Shift+Insert", то после выделения столбиком не отпуская клавиши "Alt+Shift" зажать ешё Insert, появится окно для ввода, ввести текст, нажать Enter, текст вставляется в столбик.
Или на Ctrl+V поставить запуск скрипта отсюда, тогда вставит из буфера обмена. Это всё с предыдущей страницы.

Offline
Posts: 5
Joined: Sat Nov 09, 2019 2:53 pm

Post by hexep »

AZJIO,

я в курсе, но это "чего не хватает", может Instructor обратит внимание.

Кстати, чуть-чуть отредактированный скрипт (не хватало повтора нумерации):

Code: Select all

// InsertTextLN.js
//
// Insert text and line number at the beginning and at the end of selection
//
// 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
//
// Argument "0" is default, can be omitted.

var oSys = AkelPad.SystemFunction();

if (oSys.Call("kernel32::GetUserDefaultLangID") == 0x0419) //Russian
{
  var pTxtCaption   = "Вставка текста и числа";
  var pTxtRO        = "Режим только для чтения.";
  var pTxtInvArg    = "Неверный аргумент: ";
  var pTxtNoColSel  = "Отсутствует выделение столбца.";
  var pTxtA         =["в начале выделения:",
                      "слева от строк:",
                      "слева каждой части выделенного столбца:"];
  var pTxtB         =["в конце выделения:",
                      "справа от строк:",
                      "справа каждой части выделенного столбца:"];
  var pTxtEscNL     = "\\n = &Новая строка";
  var pTxtEscTab    = "\\t = &Табуляция";
  var pTxtRange     = "Область";
  var pTxtSelection = "&Выделение";
  var pTxtLines     = "В&ыделенные строки";
  var pTxtColSel    = "Выд&еленные столбцы";
  var pTxtLNL       = "Номер строки с&лева";
  var pTxtLNR       = "Номер строки с&права";
  var pTxtPadLN     = "Cимвол-заполнитель:";
  var pTxtPreLN     = "Префикс:";
  var pTxtSufLN     = "Суффикс:";
  var pTxtRelLN     = "Относительная нумерация";
  var pTxtIniLN     = "Первичное число:";
  var pTxtStepLN    = "Увеличение на:";
  var pTxtRepeatLN   = "Повтор:";
  var pTxtReplace   = "&Заменять выделение";
  var pTxtOK        = "OK";
  var pTxtCancel    = "Отмена";
}
else
{
  var pTxtCaption   = "Insert text and number";
  var pTxtRO        = "Mode is read-only.";
  var pTxtInvArg    = "Invalid argument: ";
  var pTxtNoColSel  = "There is no columnar selection.";
  var pTxtA         =["at beginning of selection:",
                      "at left of lines:",
                      "at left any part of columnar selection:"];
  var pTxtB         =["at end of selection:",
                      "at right of lines:",
                      "at right any part of columnar selection:"];
  var pTxtEscNL     = "\\n = &New line";
  var pTxtEscTab    = "\\t = &Tabulation";
  var pTxtRange     = "Range";
  var pTxtSelection = "S&election";
  var pTxtLines     = "Selecte&d lines";
  var pTxtColSel    = "&Columnar selection";
  var pTxtLNL       = "Line number at &Left";
  var pTxtLNR       = "Line number at &Right";
  var pTxtPadLN     = "Padding char:";
  var pTxtPreLN     = "Prefix:";
  var pTxtSufLN     = "Suffix:";
  var pTxtRelLN     = "Relative numbers";
  var pTxtIniLN     = "First number:";
  var pTxtStepLN    = "Step:";
  var pTxtRepeatLN  = "Repeat:";
  var pTxtReplace   = "Replace &selection";
  var pTxtOK        = "OK";
  var pTxtCancel    = "Cancel";
}

var hMainWnd     = AkelPad.GetMainWnd();
var hEditWnd     = AkelPad.GetEditWnd();
var hGuiFont     = oSys.Call("gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
var pScriptName  = WScript.ScriptName;
var hInstanceDLL = AkelPad.GetInstanceDll();
var bColSel      = AkelPad.SendMessage(hEditWnd, 3127 /*AEM_GETCOLUMNSEL*/, 0, 0);

var bCloseCombo = true;
var hWndDlg;
var lpBuffer;
var nLowParam;
var nHiwParam;
var i;

var nStrs    = 10;
var lpStrsA  = new Array(nStrs);
var lpStrsB  = new Array(nStrs);
for (i = 0; i < nStrs; ++i)
{
  lpStrsA[i] = "";
  lpStrsB[i] = "";
}

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 pRptLNL  = "1";
var bIsLNR   = 0;
var pPadLNR  = "";
var pPreLNR  = "";
var pSufLNR  = "";
var bRelLNR  = 0;
var pIniLNR  = "1";
var pStepLNR = "1";
var pRptLNR  = "1";
var bReplace = 0;

ReadWriteIni(0);

var pStrA = lpStrsA[0];
var pStrB = lpStrsB[0];

var lpWnd        = [];
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 IDRptLNL     = 1017;
var IDTXTRptLNL  = 1018;
var IDESC        = 1019;
var IDESCNL      = 1020;
var IDESCTAB     = 1021;
var IDRANGE      = 1022;
var IDSELECTION  = 1023;
var IDLINES      = 1024;
var IDCOLSEL     = 1025;
var IDLNR        = 1026;
var IDISLNR      = 1027;
var IDTXTPADLNR  = 1028;
var IDPADLNR     = 1029;
var IDTXTPRELNR  = 1030;
var IDTXTSUFLNR  = 1031;
var IDPRELNR     = 1032;
var IDSUFLNR     = 1033;
var IDRELLNR     = 1034;
var IDTXTINILNR  = 1035;
var IDTXTSTEPLNR = 1036;
var IDINILNR     = 1037;
var IDSTEPLNR    = 1038;
var IDRptLNR     = 1039;
var IDTXTRptLNR  = 1040;
var IDREPLACE    = 1041;
var IDOK         = 1042;
var IDCANCEL     = 1043;



var WNDTYPE  = 0;
var WND      = 1;
var WNDEXSTY = 2;
var WNDSTY   = 3;
var WNDX     = 4;
var WNDY     = 5;
var WNDW     = 6;
var WNDH     = 7;
var WNDTXT   = 8;

//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
//Windows      WNDTYPE, WND,WNDEXSTY,     WNDSTY,WNDX,WNDY,WNDW,WNDH,        WNDTXT
lpWnd[IDTXTA      ] = ["STATIC",   0,       0, 0x50000000,  11,  13, 239,  13, ""];
lpWnd[IDTXTB      ] = ["STATIC",   0,       0, 0x50000000, 260,  13, 239,  13, ""];
lpWnd[IDSTRA      ] = ["COMBOBOX", 0,       0, 0x50210042,  11,  28, 239,  20, ""];
lpWnd[IDSTRB      ] = ["COMBOBOX", 0,       0, 0x50210042, 260,  28, 239,  20, ""];
lpWnd[IDLNL       ] = ["BUTTON",   0,       0, 0x50000007,  11,  55, 165, 202, ""];
lpWnd[IDISLNL     ] = ["BUTTON",   0,       0, 0x50010003,  18,  69, 140,  16, pTxtLNL];
lpWnd[IDTXTPADLNL ] = ["STATIC",   0,       0, 0x50000000,  18,  93, 109,  13, pTxtPadLN];
lpWnd[IDPADLNL    ] = ["EDIT",     0,   0x200, 0x50010080,  130, 90,  20,  20, pPadLNL];
lpWnd[IDTXTPRELNL ] = ["STATIC",   0,       0, 0x50000000,  18, 116,  65,  13, pTxtPreLN];
lpWnd[IDTXTSUFLNL ] = ["STATIC",   0,       0, 0x50000000,  97, 116,  65,  13, pTxtSufLN];
lpWnd[IDPRELNL    ] = ["EDIT",     0,   0x200, 0x50010080,  18, 131,  73,  20, pPreLNL];
lpWnd[IDSUFLNL    ] = ["EDIT",     0,   0x200, 0x50010080,  97, 131,  73,  20, pSufLNL];
lpWnd[IDRELLNL    ] = ["BUTTON",   0,       0, 0x50010003,  18, 164, 155,  16, pTxtRelLN];
lpWnd[IDTXTINILNL ] = ["STATIC",   0,       0, 0x50000000,  18, 185,  90,  13, pTxtIniLN];
lpWnd[IDTXTSTEPLNL] = ["STATIC",   0,       0, 0x50000000,  18, 208,  80,  13, pTxtStepLN];
lpWnd[IDTXTRptLNL ] = ["STATIC",   0,       0, 0x50000000,  18, 231,  40,  13, pTxtRepeatLN];
lpWnd[IDINILNL    ] = ["EDIT",     0,   0x200, 0x50012080, 113, 183,  57,  20, pIniLNL];
lpWnd[IDSTEPLNL   ] = ["EDIT",     0,   0x200, 0x50012080, 103, 206,  67,  20, pStepLNL];
lpWnd[IDRptLNL    ] = ["EDIT",     0,   0x200, 0x50012080,  63, 229, 107,  20, pRptLNL];
lpWnd[IDESC       ] = ["BUTTON",   0,       0, 0x50000007, 185,  55, 140,  57, ""];
lpWnd[IDESCNL     ] = ["BUTTON",   0,       0, 0x50010003, 192,  69, 130,  16, pTxtEscNL];
lpWnd[IDESCTAB    ] = ["BUTTON",   0,       0, 0x50010003, 192,  90, 130,  16, pTxtEscTab];
lpWnd[IDRANGE     ] = ["BUTTON",   0,       0, 0x50000007, 185, 117, 140,  80, pTxtRange];
lpWnd[IDSELECTION ] = ["BUTTON",   0,       0, 0x50000009, 192, 135, 130,  16, pTxtSelection];
lpWnd[IDLINES     ] = ["BUTTON",   0,       0, 0x50000009, 192, 155, 130,  16, pTxtLines];
lpWnd[IDCOLSEL    ] = ["BUTTON",   0,       0, 0x50000009, 192, 175, 130,  16, pTxtColSel];
lpWnd[IDLNR       ] = ["BUTTON",   0,       0, 0x50000007, 334,  55, 165, 202, ""];
lpWnd[IDISLNR     ] = ["BUTTON",   0,       0, 0x50010003, 341,  69, 140,  16, pTxtLNR];
lpWnd[IDTXTPADLNR ] = ["STATIC",   0,       0, 0x50000000, 341,  93, 109,  13, pTxtPadLN];
lpWnd[IDPADLNR    ] = ["EDIT",     0,   0x200, 0x50010080, 453,  90,  20,  20, pPadLNR];
lpWnd[IDTXTPRELNR ] = ["STATIC",   0,       0, 0x50000000, 341, 116,  65,  13, pTxtPreLN];
lpWnd[IDTXTSUFLNR ] = ["STATIC",   0,       0, 0x50000000, 412, 116,  65,  13, pTxtSufLN];
lpWnd[IDPRELNR    ] = ["EDIT",     0,   0x200, 0x50010080, 341, 131,  73,  20, pPreLNR];
lpWnd[IDSUFLNR    ] = ["EDIT",     0,   0x200, 0x50010080, 420, 131,  73,  20, pSufLNR];
lpWnd[IDRELLNR    ] = ["BUTTON",   0,       0, 0x50010003, 341, 164, 155,  16, pTxtRelLN];
lpWnd[IDTXTINILNR ] = ["STATIC",   0,       0, 0x50000000, 341, 185,  90,  13, pTxtIniLN];
lpWnd[IDTXTSTEPLNR] = ["STATIC",   0,       0, 0x50000000, 341, 208,  80,  13, pTxtStepLN];
lpWnd[IDTXTRptLNR ] = ["STATIC",   0,       0, 0x50000000, 341, 231,  40,  13, pTxtRepeatLN];
lpWnd[IDINILNR    ] = ["EDIT",     0,   0x200, 0x50012080, 436, 183,  57,  20, pIniLNR];
lpWnd[IDSTEPLNR   ] = ["EDIT",     0,   0x200, 0x50012080, 426, 206,  67,  20, pStepLNR];
lpWnd[IDRptLNR    ] = ["EDIT",     0,   0x200, 0x50012080, 386, 229, 107,  20, pRptLNR];
lpWnd[IDREPLACE   ] = ["BUTTON",   0,       0, 0x50010003, 192, 205, 130,  16, pTxtReplace];
lpWnd[IDOK        ] = ["BUTTON",   0,       0, 0x50010001, 185, 234,  66,  23, pTxtOK];
lpWnd[IDCANCEL    ] = ["BUTTON",   0,       0, 0x50010000, 259, 234,  66,  23, pTxtCancel];


if (hEditWnd)
{
	if (AkelPad.GetEditReadOnly(hEditWnd))
  {
    AkelPad.MessageBox(hEditWnd, pTxtRO, pTxtCaption, 48 /*MB_ICONEXCLAMATION*/);
    WScript.Quit();
  }

  if (WScript.Arguments.length)
    nRange = parseInt(WScript.Arguments(0));
  if (!((nRange == 0) || (nRange == 1) || (nRange == 2)))
  {
    AkelPad.MessageBox(hEditWnd, pTxtInvArg + nRange, pTxtCaption, 48 /*MB_ICONEXCLAMATION*/);
    WScript.Quit();
  }
  if ((nRange == 2) && (! bColSel))
  {
    AkelPad.MessageBox(hEditWnd, pTxtNoColSel, pTxtCaption, 48 /*MB_ICONEXCLAMATION*/);
    WScript.Quit();
  }


  if (AkelPad.WindowRegisterClass(pScriptName))
  {
    if (lpBuffer=AkelPad.MemAlloc(256 * _TSIZE))
    {
      //Create dialog
      AkelPad.MemCopy(lpBuffer, pScriptName, _TSTR);
      hWndDlg=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                        0,               //dwExStyle
                        lpBuffer,        //lpClassName
                        0,               //lpWindowName
                        0x90CA0000,      //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
                        0,               //x
                        0,               //y
                        515,             //nWidth
                        295,             //nHeight
                        hMainWnd,        //hWndParent
                        0,               //ID
                        hInstanceDLL,    //hInstance
                        DialogCallback); //Script function callback. To use it class must be registered by WindowRegisterClass.
      if (hWndDlg)
      {
        //Disable main window, to make dialog modal
        oSys.Call("user32::EnableWindow", hMainWnd, false);

        //Message loop
        AkelPad.WindowGetMessage();
      }
      AkelPad.MemFree(lpBuffer);
    }
    AkelPad.WindowUnregisterClass(pScriptName);
  }
}

//////////////
function DialogCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 1)  //WM_CREATE
  {
    //Dialog caption
    AkelPad.MemCopy(lpBuffer, pTxtCaption, _TSTR);
    oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, lpBuffer);

    //Create windows
    for (i = 1000; i < lpWnd.length; ++i)
    {
      AkelPad.MemCopy(lpBuffer, lpWnd[i][WNDTYPE], _TSTR);
      lpWnd[i][WND] = oSys.Call("user32::CreateWindowEx" + _TCHAR,
                                lpWnd[i][WNDEXSTY],//dwExStyle
                                lpBuffer,          //lpClassName
                                0,                 //lpWindowName
                                lpWnd[i][WNDSTY],  //dwStyle
                                lpWnd[i][WNDX],    //x
                                lpWnd[i][WNDY],    //y
                                lpWnd[i][WNDW],    //nWidth
                                lpWnd[i][WNDH],    //nHeight
                                hWnd,              //hWndParent
                                i,                 //ID
                                hInstanceDLL,      //hInstance
                                0);                //lpParam
      //Set font and text
      SetWindowFontAndText(lpWnd[i][WND], hGuiFont, lpWnd[i][WNDTXT]);
    }

    SetWindowFontAndText(lpWnd[IDTXTA][WND], hGuiFont, pTxtA[nRange]);
    SetWindowFontAndText(lpWnd[IDTXTB][WND], hGuiFont, pTxtB[nRange]);

    //Fill combobox
    for (i = 0; i < nStrs; ++i)
    {
      AkelPad.MemCopy(lpBuffer, lpStrsA[i], _TSTR);
      AkelPad.SendMessage(lpWnd[IDSTRA][WND], 0x143 /*CB_ADDSTRING*/, 0, lpBuffer);
      AkelPad.MemCopy(lpBuffer, lpStrsB[i], _TSTR);
      AkelPad.SendMessage(lpWnd[IDSTRB][WND], 0x143 /*CB_ADDSTRING*/, 0, lpBuffer);
    }
    AkelPad.SendMessage(lpWnd[IDSTRA][WND], 0x14E /*CB_SETCURSEL*/, 0, 0);
    AkelPad.SendMessage(lpWnd[IDSTRB][WND], 0x14E /*CB_SETCURSEL*/, 0, 0);

    //Check
    if (bIsLNL)  AkelPad.SendMessage(lpWnd[IDISLNL][WND],  241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
    if (bRelLNL) AkelPad.SendMessage(lpWnd[IDRELLNL][WND], 241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
    for (i = IDTXTPADLNL; i <= IDRELLNL; ++i)
      oSys.Call("user32::EnableWindow", lpWnd[i][WND], bIsLNL);
    for (i = IDTXTINILNL; i <= IDTXTRptLNL; ++i)
      oSys.Call("user32::EnableWindow", lpWnd[i][WND], (bIsLNL && bRelLNL));

    if (bEscNL)  AkelPad.SendMessage(lpWnd[IDESCNL][WND],  241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
    if (bEscTab) AkelPad.SendMessage(lpWnd[IDESCTAB][WND], 241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
    AkelPad.SendMessage(lpWnd[IDSELECTION + nRange][WND], 241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
    oSys.Call("user32::EnableWindow", lpWnd[IDCOLSEL][WND], bColSel);

    if (bIsLNR)  AkelPad.SendMessage(lpWnd[IDISLNR][WND],  241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
    if (bRelLNR) AkelPad.SendMessage(lpWnd[IDRELLNR][WND], 241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
    for (i = IDTXTPADLNR; i <= IDRELLNR; ++i)
      oSys.Call("user32::EnableWindow", lpWnd[i][WND], bIsLNR);
    for (i = IDTXTINILNR; i <= IDTXTRptLNR; ++i)
      oSys.Call("user32::EnableWindow", lpWnd[i][WND], (bIsLNR && bRelLNR));
    if (bReplace) AkelPad.SendMessage(lpWnd[IDREPLACE][WND], 241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);

    //Set limit edit text
    AkelPad.SendMessage(lpWnd[IDPADLNL][WND], 197 /*EM_LIMITTEXT*/, 1, 0);
    AkelPad.SendMessage(lpWnd[IDPADLNR][WND], 197 /*EM_LIMITTEXT*/, 1, 0);

    //Center dialog
    CenterWindow(hEditWnd, hWnd);
  }

  else if (uMsg == 7)  //WM_SETFOCUS
    oSys.Call("user32::SetFocus", lpWnd[IDSTRA][WND]);

  else if (uMsg == 256)  //WM_KEYDOWN
  {
    if (bCloseCombo)
    {
      if (wParam == 27)  //VK_ESCAPE
        //Escape key pushes Cancel button
        oSys.Call("user32::PostMessage" + _TCHAR, hWndDlg, 273 /*WM_COMMAND*/, IDCANCEL, 0);
      else if (wParam == 13)  //VK_RETURN
        //Return key pushes OK button
        oSys.Call("user32::PostMessage" + _TCHAR, hWndDlg, 273 /*WM_COMMAND*/, IDOK, 0);
    }
  }

  else if (uMsg == 273)  //WM_COMMAND
  {
    nLowParam = LoWord(wParam);
    nHiwParam = HiWord(wParam);

    if ((nLowParam == IDSTRA) || (nLowParam == IDSTRB))
    {
      if (nHiwParam == 7 /*CBN_DROPDOWN*/)
        bCloseCombo = false;
      else if (nHiwParam == 8 /*CBN_CLOSEUP*/)
        bCloseCombo = true;
    }

    else if ((nLowParam == IDISLNL) || (nLowParam == IDRELLNL))
    {
      bIsLNL  = AkelPad.SendMessage(lpWnd[IDISLNL][WND],  240 /*BM_GETCHECK*/, 0, 0);
      bRelLNL = AkelPad.SendMessage(lpWnd[IDRELLNL][WND], 240 /*BM_GETCHECK*/, 0, 0);
      for (i = IDTXTPADLNL; i <= IDRELLNL; ++i)
        oSys.Call("user32::EnableWindow", lpWnd[i][WND], bIsLNL);
      for (i = IDTXTINILNL; i <= IDTXTRptLNL; ++i)
        oSys.Call("user32::EnableWindow", lpWnd[i][WND], (bIsLNL && bRelLNL));
    }

    else if (nLowParam == IDESCNL)
      bEscNL = AkelPad.SendMessage(lpWnd[IDESCNL][WND], 240 /*BM_GETCHECK*/, 0, 0);

    else if (nLowParam == IDESCTAB)
      bEscTab = AkelPad.SendMessage(lpWnd[IDESCTAB][WND], 240 /*BM_GETCHECK*/, 0, 0);

    else if ((nLowParam >= IDSELECTION) && (nLowParam <= IDCOLSEL))
    {
      nRange = nLowParam - IDSELECTION;
      SetWindowFontAndText(lpWnd[IDTXTA][WND], hGuiFont, pTxtA[nRange]);
      SetWindowFontAndText(lpWnd[IDTXTB][WND], hGuiFont, pTxtB[nRange]);
    }

    else if ((nLowParam == IDISLNR) || (nLowParam == IDRELLNR))
    {
      bIsLNR  = AkelPad.SendMessage(lpWnd[IDISLNR][WND],  240 /*BM_GETCHECK*/, 0, 0);
      bRelLNR = AkelPad.SendMessage(lpWnd[IDRELLNR][WND], 240 /*BM_GETCHECK*/, 0, 0);
      for (i = IDTXTPADLNR; i <= IDRELLNR; ++i)
        oSys.Call("user32::EnableWindow", lpWnd[i][WND], bIsLNR);
      for (i = IDTXTINILNR; i <= IDTXTRptLNR; ++i)
        oSys.Call("user32::EnableWindow", lpWnd[i][WND], (bIsLNR && bRelLNR));
    }

    else if (nLowParam == IDREPLACE)
      bReplace = AkelPad.SendMessage(lpWnd[IDREPLACE][WND], 240 /*BM_GETCHECK*/, 0, 0);

    else if (nLowParam == IDOK)
    {
      //pStrA
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDSTRA][WND], lpBuffer, 256);
      pStrA = AkelPad.MemRead(lpBuffer, _TSTR);
      for (i = 0; i < nStrs; ++i)
      {
        if (lpStrsA[i] == pStrA)
          lpStrsA.splice(i, 1);
      }
      lpStrsA.unshift(pStrA);
      if (lpStrsA.length > nStrs)
        lpStrsA.pop();
      else
      {
        while (lpStrsA.length < nStrs)
          lpStrsA.push("");
      }

      //pStrB
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDSTRB][WND], lpBuffer, 256);
      pStrB = AkelPad.MemRead(lpBuffer, _TSTR);
      for (i = 0; i < nStrs; ++i)
      {
        if (lpStrsB[i] == pStrB)
          lpStrsB.splice(i, 1);
      }
      lpStrsB.unshift(pStrB);
      if (lpStrsB.length > nStrs)
        lpStrsB.pop();
      else
      {
        while (lpStrsB.length < nStrs)
          lpStrsB.push("");
      }

      //pPadLNL
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDPADLNL][WND], lpBuffer, 256);
      pPadLNL = AkelPad.MemRead(lpBuffer, _TSTR);

      //pPreLNL
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDPRELNL][WND], lpBuffer, 256);
      pPreLNL = AkelPad.MemRead(lpBuffer, _TSTR);

      //pSufLNL
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDSUFLNL][WND], lpBuffer, 256);
      pSufLNL = AkelPad.MemRead(lpBuffer, _TSTR);

      //pIniLNL
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDINILNL][WND], lpBuffer, 256);
      pIniLNL = AkelPad.MemRead(lpBuffer, _TSTR);

      //pStepLNL
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDSTEPLNL][WND], lpBuffer, 256);
      pStepLNL = AkelPad.MemRead(lpBuffer, _TSTR);

      //pRptLNL
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDRptLNL][WND], lpBuffer, 256);
      pRptLNL = AkelPad.MemRead(lpBuffer, _TSTR);

      //pPadLNR
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDPADLNR][WND], lpBuffer, 256);
      pPadLNR = AkelPad.MemRead(lpBuffer, _TSTR);

      //pPreLNR
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDPRELNR][WND], lpBuffer, 256);
      pPreLNR = AkelPad.MemRead(lpBuffer, _TSTR);

      //pSufLNR
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDSUFLNR][WND], lpBuffer, 256);
      pSufLNR = AkelPad.MemRead(lpBuffer, _TSTR);

      //pIniLNR
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDINILNR][WND], lpBuffer, 256);
      pIniLNR = AkelPad.MemRead(lpBuffer, _TSTR);

      //pStepLNR
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDSTEPLNR][WND], lpBuffer, 256);
      pStepLNR = AkelPad.MemRead(lpBuffer, _TSTR);

      //pRptLNR
      oSys.Call("user32::GetWindowText" + _TCHAR, lpWnd[IDRptLNR][WND], lpBuffer, 256);
      pRptLNR = AkelPad.MemRead(lpBuffer, _TSTR);

      InsertText();

      oSys.Call("user32::PostMessage" + _TCHAR, hWndDlg, 16 /*WM_CLOSE*/, 0, 0);
    }

    else if (nLowParam == IDCANCEL)
      oSys.Call("user32::PostMessage" + _TCHAR, hWndDlg, 16 /*WM_CLOSE*/, 0, 0);
  }

  else if (uMsg == 16)  //WM_CLOSE
  {
    ReadWriteIni(1);

    //Enable main window
    oSys.Call("user32::EnableWindow", hMainWnd, true);

    //Destroy dialog
    oSys.Call("user32::DestroyWindow", hWnd);
  }

  else if (uMsg == 2)  //WM_DESTROY
  {
    //Exit message loop
    oSys.Call("user32::PostQuitMessage", 0);
  }

  else
  {
    if (oSys.Call("user32::GetFocus") != lpWnd[IDCANCEL][WND])
      oSys.Call("user32::DefDlgProc" + _TCHAR, hWnd, 1025 /*DM_SETDEFID*/, IDOK, 0);
  }

  return 0;
}

function SetWindowFontAndText(hWnd, hFont, pText)
{
  var lpWindowText;

  AkelPad.SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, true);

  if (lpWindowText=AkelPad.MemAlloc(256 * _TSIZE))
  {
    AkelPad.MemCopy(lpWindowText, pText.substr(0, 255), _TSTR);
    oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, lpWindowText);

    AkelPad.MemFree(lpWindowText);
  }
}

function CenterWindow(hWndParent, hWnd)
{
  var lpRect;
  var rcWndParent=[];
  var rcWnd=[];
  var X;
  var Y;

  if (lpRect=AkelPad.MemAlloc(16))  //sizeof(RECT)
  {
    if (!hWndParent)
      hWndParent=oSys.Call("user32::GetDesktopWindow");

    oSys.Call("user32::GetWindowRect", hWndParent, lpRect);
    RectToArray(lpRect, rcWndParent);

    oSys.Call("user32::GetWindowRect", hWnd, lpRect);
    RectToArray(lpRect, rcWnd);

    //Center window
    X=rcWndParent.left + ((rcWndParent.right - rcWndParent.left) / 2 - (rcWnd.right - rcWnd.left) / 2);
    Y=rcWndParent.top + ((rcWndParent.bottom - rcWndParent.top) / 2 - (rcWnd.bottom - rcWnd.top) / 2);

    oSys.Call("user32::SetWindowPos", hWnd, 0, X, Y, 0, 0, 0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);

    AkelPad.MemFree(lpRect);
  }
}

function RectToArray(lpRect, rcRect)
{
  rcRect.left=AkelPad.MemRead(lpRect, 3 /*DT_DWORD*/);
  rcRect.top=AkelPad.MemRead(lpRect + 4, 3 /*DT_DWORD*/);
  rcRect.right=AkelPad.MemRead(lpRect + 8, 3 /*DT_DWORD*/);
  rcRect.bottom=AkelPad.MemRead(lpRect + 12, 3 /*DT_DWORD*/);
  return rcRect;
}

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

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

function ReadWriteIni(bWrite)
{
  var oFSO     = new ActiveXObject("Scripting.FileSystemObject");
  var pIniName = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf(".")) + ".ini";
  var nError;
  var oFile;
  var pTxtIni;
  var i;

  if (bWrite)
  {
    pTxtIni = 'lpStrsA=[';

    for (i = 0; i < nStrs; ++i)
    {
      pTxtIni += '"' + lpStrsA[i].replace(/[\\"]/g, "\\$&") + '"';
      if (i < (nStrs - 1))
        pTxtIni += ',';
      else
        pTxtIni += '];\r\nlpStrsB=[';
    }

    for (i = 0; i < nStrs; ++i)
    {
      pTxtIni += '"' + lpStrsB[i].replace(/[\\"]/g, "\\$&") + '"';
      if (i < (nStrs - 1))
        pTxtIni += ',';
      else
        pTxtIni += '];\r\n';
    }

    pTxtIni += 'bEscNL='    + bEscNL   + ';\r\n' + 
               'bEscTab='   + bEscTab  + ';\r\n' +
               'bIsLNL='    + bIsLNL   + ';\r\n' +
               'pPadLNL="'  + pPadLNL.replace(/[\\"]/g, "\\$&") + '";\r\n' + 
               'pPreLNL="'  + pPreLNL.replace(/[\\"]/g, "\\$&") + '";\r\n' +
               'pSufLNL="'  + pSufLNL.replace(/[\\"]/g, "\\$&") + '";\r\n' +
               'bRelLNL='   + bRelLNL  + ';\r\n' +
               'pIniLNL="'  + pIniLNL  + '";\r\n' +
               'pStepLNL="' + pStepLNL + '";\r\n' +
               'pRptLNL="'  + pRptLNL + '";\r\n' +
               'bIsLNR='    + bIsLNR   + ';\r\n' +
               'pPadLNR="'  + pPadLNR.replace(/[\\"]/g, "\\$&") + '";\r\n' + 
               'pPreLNR="'  + pPreLNR.replace(/[\\"]/g, "\\$&") + '";\r\n' +
               'pSufLNR="'  + pSufLNR.replace(/[\\"]/g, "\\$&") + '";\r\n' +
               'bRelLNR='   + bRelLNR  + ';\r\n' +
               'pIniLNR="'  + pIniLNR  + '";\r\n' +
               'pStepLNR="' + pStepLNR + '";\r\n' +
               'pRptLNR="'  + pRptLNR + '";\r\n' +
               'bReplace='  + bReplace + ';'

    oFile = oFSO.OpenTextFile(pIniName, 2, true, -1);
    oFile.Write(pTxtIni);
    oFile.Close();
  }

  else if (oFSO.FileExists(pIniName))
  {
    try
    {
      eval(AkelPad.ReadFile(pIniName));
    }
    catch (nError)
    {
    }
  }
}

function SetRedraw(hWnd, bRedraw)
{
	var oSys = AkelPad.SystemFunction();
	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 lpLinNumL = new Array(nLines);
  var lpLinNumR = new Array(nLines);
  var nStep;
  var nRepeat;
  var nIniNum;
  var nLenNum;
  var lpLines;
  var pTxt;
  var i;
  var curNumber;
  var curLine;

  for (i=0; i < nLines; ++i)
  {
    lpLinNumL[i] = "";
    lpLinNumR[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);
      nRepeat   = parseInt(pRptLNL);
      nIniNum = parseInt(pIniLNL);
    }
    else
    {
      nStep   = 1;
      nRepeat   = 1;
      nIniNum = nLine1 + 1;
    }

    curNumber = nIniNum;
    curLine = 0;
    if (nRepeat == 0)
      nRepeat = 1; // Without this we might get an infinite loop while calculating the set "numbers" below.

    while (curLine < nLines)
    {
      for (i=0; i < nRepeat; ++i)
      {
        curLine += 1;
        if (curLine > nLines)
          break;
      }
      curNumber += nStep;
    }
    nLenNum = String(curNumber).length;

    curNumber = nIniNum;
    curLine = 0;

    while (curLine < nLines)
    {
      for (i=0; i < nRepeat; ++i)
      {
        lpLinNumL[curLine] = pPreLNL + Pad(String(curNumber), nLenNum, "L", pPadLNL) + pSufLNL;
        curLine += 1;
        if (curLine > nLines)
          break;
      }
      curNumber += nStep;
    }
  }

  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;
    }


    curNumber = nIniNum;
    curLine = 0;
    if (nRepeat == 0)
      nRepeat = 1; // Without this we might get an infinite loop while calculating the set "numbers" below.

    while (curLine < nLines)
    {
      for (i=0; i < nRepeat; ++i)
      {
        curLine += 1;
        if (curLine > nLines)
          break;
      }
      curNumber += nStep;
    }
    nLenNum = String(curNumber).length;

    curNumber = nIniNum;
    curLine = 0;

    while (curLine < nLines)
    {
      for (i=0; i < nRepeat; ++i)
      {
        lpLinNumR[curLine] = pPreLNR + Pad(String(curNumber), nLenNum, "L", pPadLNR) + pSufLNR;
        curLine += 1;
        if (curLine > nLines)
          break;
      }
      curNumber += nStep;
    }
  }


  // insert in selection
  if (nRange == 0)
    pTxt = pStrA + lpLinNumL[0] +
           (bReplace ? "" : AkelPad.GetSelText(1 /*\r*/)) +
           lpLinNumR[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);
    }

    pTxt    = AkelPad.GetSelText(1 /*\r*/);
    lpLines = pTxt.split("\r");

    for (i=0; i < nLines; ++i)
      lpLines[i] = pStrA + lpLinNumL[i] +
                   (bReplace ? "" : lpLines[i]) +
                   lpLinNumR[i] + pStrB;

    pTxt = lpLines.join("\r");
  }

  AkelPad.ReplaceSel(pTxt, true);

  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);
}

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

Post by AZJIO »

hexep wrote:Кстати, чуть-чуть отредактированный скрипт (не хватало повтора нумерации):
Что то я пару раз уронил AkelPad с этим скриптом, выделив столбиком, пытаясь вставить нумерацию.

Offline
Posts: 5
Joined: Sat Nov 09, 2019 2:53 pm

Post by hexep »

AZJIO
интересно, каким образом ) так то, у меня akelpad ни разу не падал.

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

Post by AZJIO »

hexep wrote:AZJIO
интересно, каким образом ) так то, у меня akelpad ни разу не падал.
Проверил оригинал от KDJ - не падает.
Он крутит проц на полную катушку, я снимаю задачу. Как будто из цикла не может выпрыгнуть где-то.

Offline
Posts: 1
Joined: Sun Dec 15, 2019 8:52 pm

Post by buka2 »

Привет!

Возможно ли в Akelpad сделать авто-перенос строк с сохранением отступа? Чтобы текст переносился не в начало строки, а как на скриншоте:

Image

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

Post by AZJIO »

В языках программирования есть префиксы и суффиксы, например:
#константа
$переменная
@макрос
и т.д.
Хорошо бы задать разделители в кодере, а ещё лучше например при клике на слове при нажатом Ctrl выделялся бы текст с захватом разделителей указанных в кодере, например Del=#$@ и при Ctrl выше указанные лексемы захватываются с префиксами. В Notepad++ двойной клик при зажатом Ctrl выделяет между скобками, но такая фича в AkelPad уже поддержана плагом XBrackets.

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

Post by opk44 »

buka2 wrote:Возможно ли в Akelpad сделать авто-перенос строк с сохранением отступа? Чтобы текст переносился не в начало строки, а как на скриншоте
См. справку "\AkelFiles\Docs\AkelHelp-Rus.htm" раздел "Клавиатурные команды":
Ctrl+L Включить/выключить режим "Сохранять отступы слева"
Ctrl+Enter Вставить новую строку с сохранением отступов слева, если отключено "Сохранять отступы слева".
Вставить новую строку без сохранения отступов слева, если включено "Сохранять отступы слева".
Опция дублирована в меню "Настройки":
[Настройки]-->[Сохранять отступы слева_______Ctrl+L]

Offline
Posts: 1
Joined: Wed Dec 18, 2019 9:48 am

Post by buka2(copy) »

opk44 wrote:См. справку "\AkelFiles\Docs\AkelHelp-Rus.htm" раздел "Клавиатурные команды":
Ctrl+L Включить/выключить режим "Сохранять отступы слева"
Ctrl+Enter Вставить новую строку с сохранением отступов слева, если отключено "Сохранять отступы слева".
Вставить новую строку без сохранения отступов слева, если включено "Сохранять отступы слева".
Опция дублирована в меню "Настройки":
[Настройки]-->[Сохранять отступы слева_______Ctrl+L]
opk44, Увы, это все пальцем в небо - не имеет ровным счетом никакого отношения к томy, что указано на скриншоте:

Image

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

Post by VladSh »

buka2 wrote:Привет!

Возможно ли в Akelpad сделать авто-перенос строк с сохранением отступа? Чтобы текст переносился не в начало строки, а как на скриншоте:

Image
Так он так и переносится. После первой строки нашал Ввод, дотолкал куда нужно табуляцией и жми сколько угодно Ввод - будет тебе отступ на каждой строке.

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

Post by opk44 »

buka2(copy) wrote:Увы, это все пальцем в небо - не имеет ровным счетом никакого отношения к томy, что указано на скриншоте
В AkelPad, как и во всех* остальных plain-text редакторах сплошной левый отступ в свернутых строках не поддерживается.
--
*известных мне

UPD. Поправка. HippoEdit поддерживает подобное форматирование. Поэтому верна только часть утверждения: "В AkelPad сплошной левый отступ в свернутых строках не поддерживается".

Offline
Posts: 1
Joined: Fri Dec 20, 2019 9:13 am

Post by buka3(copy) »

opk44, на скриншоте Scintilla. Может в AkelPad это можно как-то активировать? Или добиться схожего эффекта без перекомпиляции? Плачу 100 руб. за интеллектуальное решение!

Offline
Posts: 157
Joined: Thu Nov 26, 2015 8:03 pm
Location: Rostov-on-Don

Post by Eskander88 »

нужен структурированный ресурс документации, где можно было бы быстрее находить ответы на свои вопросы по разделам... скрипты, методы, объекты - с описанием и примером.
Прошу прощения, но вот ситуация когда в одной ветке 500+ постов, да ещё не работает часть функционала, ну просто нонсенс..
и вроде бы ты помнишь, что какой-то функционал мелькал на форуме, но найти не можешь..

P.S. В какой программе записываете такие гифки
buka2(copy) wrote: Image
Post Reply