sTxtBegToCaret = "&1 - До каретки";
sTxtCaretToEnd = "&2 - После каретки";
каретка \ курсор - как понятнее.
Да, наверное, лучше в таком варианте...
А каретка - это, имхо, устаревшее название относительно компьютера, наследие от печатных машинок...
курсор - будет более понятное название.
Подскажите, пожалуйста, нужен совет: скрипт Andrey_A_ADeletePhrasesInText.vbs не работает уже несколько версий AkelPad, но возможность удалить строки просто выделив текст и запустив скрипт нужна,
// Argumens:
// -delete=
// 0 - удаление строки (по умолчанию);
// 1 - очистка строки;
// -direction=
// 0 - поиск с начала (по умолчанию);
// 1 - вниз;
// 2 - вверх;
// -case=
// 0 - не учитывать регистр (по умолчанию);
// 1 - учитывать регистр;
var nArgDel = AkelPad.GetArgValue("delete", 1);
var nArgDir = AkelPad.GetArgValue("direction", 0);
var nArgCas = AkelPad.GetArgValue("case", 0);
var hMainWnd = AkelPad.GetMainWnd();
var hWndEdit = AkelPad.GetEditWnd();
var oSys = AkelPad.SystemFunction();
var nStart = AkelPad.GetSelStart();
var pSearchText = AkelPad.GetSelText();
var nFlag;
var nWordWrap;
var nResult;
// Flags:
switch (nArgDir)
{
case 0:
nFlag = 0x00200001; /*FRF_DOWN|FRF_BEGINNING*/
break;
case 1:
nFlag = 0x00000001; /*FRF_DOWN*/
break;
case 2:
nFlag = 0x00100000; /*FRF_UP*/
break;
}
if (nArgCas == 1)
nFlag = nFlag + 0x00000004; /* +FRF_MATCHCASE*/
// Lock edit windows
ScrollLock(hWndEdit, true);
SetRedraw(hWndEdit, false);
// Disable word wrap if it enabled
nWordWrap = AkelPad.SendMessage(hWndEdit, 3241 /*AEM_GETWORDWRAP*/, 0, 0);
if (nWordWrap > 0)
AkelPad.Command(4209 /*IDM_VIEW_WORDWRAP*/);
// Find
if (nArgDel == 0)
{
// Delete lines:
if (nFlag > 0x00100000)
AkelPad.SetSel(0, 0);
else
{
AkelPad.SetSel(nStart, nStart);
AkelPad.Command(4197 /*IDM_EDIT_DELLINE*/, 1); //Delete current line
}
for (;;)
{
nResult = AkelPad.TextFind(hWndEdit, pSearchText, nFlag);
if (nResult != -1)
{
AkelPad.SetSel(nResult, nResult);
AkelPad.Command(4197 /*IDM_EDIT_DELLINE*/, 1);
}
else
break;
}
}
else
{
// Clean lines (replace on ""):
if (nFlag > 0x00100000)
AkelPad.SetSel(0, 0);
else
{
AkelPad.SetSel(nStart, nStart);
CleanLine(AkelPad.GetSelStart()); //Clean current line
}
for (;;)
{
nResult = AkelPad.TextFind(hWndEdit, pSearchText, nFlag);
if (nResult != -1)
CleanLine(nResult);
else
break;
}
}
// Enable word wrap if it was enabled
if (nWordWrap > 0)
AkelPad.Command(4209 /*IDM_VIEW_WORDWRAP*/);
// Restore cursor position
AkelPad.SetSel(nStart, nStart);
// Unlock and redraw edit windows
ScrollLock(hWndEdit, false);
SetRedraw(hWndEdit, true);
//
function CleanLine(nPos)
{
var nLine = AkelPad.SendMessage(hWndEdit, 1078 /*EM_EXLINEFROMCHAR*/, 0, nPos);
var nLineIndex = AkelPad.SendMessage(hWndEdit, 187 /*EM_LINEINDEX*/, nLine, 0);
var nLineLength = AkelPad.SendMessage(hWndEdit, 193 /*EM_LINELENGTH*/, AkelPad.GetSelStart(), 0);
AkelPad.SetSel(nLineIndex, nLineIndex + nLineLength, 0x008 /*AESELT_LOCKSCROLL*/);
AkelPad.ReplaceSel("");
}
function SetRedraw(hWnd, bRedraw)
{
AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
bRedraw && oSys.Call("user32::InvalidateRect", hWnd, 0, true);
}
function ScrollLock(hWnd, bLock)
{
AkelPad.SendMessage(hWnd, 3185 /*AEM_LOCKSCROLL*/, 3 /*SB_BOTH*/, bLock);
}
, но теперь возник вопрос: а может, зря и стоит разобраться, как это делает LinesFilter.js (с массивом вроде)? Хотел с AkelPad.TextFind(), чтобы не зависеть от символов, на которых могут споткнуться методы JScript, но не сглупил ли?
Не рекомендую. Если текст достаточно большой (скажем строк 200 000) и искомого текста много - выполнения скрипта не дождетесь.
Один из моих первых (или самый первый?) скрипт на JScript. Вроде из скрипта Andrey_A_A DeletePhrasesInText.vbs и переделанный.
Kley VladSh
Спасибо, сглупил, пожалуй, но хотя бы кое-какие знания приобрёл - не совсем бестолково
У AkelPad.TextFind() есть преимущество - можно искать не по всему тексту, а ещё вверх и вниз, но сейчас подумал: получить номер текущей строки легко, он же станет и номером ячейки массива. Надо будет прикинуть, а пригодиться ли на самом деле.