Page 1 of 1

Применение скрипта ко всем вкладкам

Posted: Thu Dec 03, 2015 6:09 pm
by vadim
В AkelPad открыто несколько файлов, каждый в своей вкладке.
Есть Ява скрипт Script.js. Я могу его применить в AkelPad примерно так:
-"Скрипт" Call("Scripts::Main", 1, "Script.js")
Но это скрипт применится только к активной в данный момент вкладке.
А как его применить ко всем открытым в AkelPad файлам, не переходя из вкладки во вкладку вручную?

В операции "Поиск/Замена" такая возможность есть.

Posted: Thu Dec 03, 2015 8:37 pm
by KDJ
vadim

Code: Select all

var hMainWnd     = AkelPad.GetMainWnd();
var lpFrameStart = AkelPad.SendMessage(hMainWnd, 1290 /*AKD_FRAMEFINDW*/, 1 /*FWF_CURRENT*/, 0);
var lpFrameCur   = lpFrameStart;

if (lpFrameStart)
{
  do
  {
    WScript.Echo("Edit file: " + AkelPad.GetEditFile(0));

    lpFrameCur = AkelPad.SendMessage(hMainWnd, 1290 /*AKD_FRAMEFINDW*/, 9 /*FWF_TABNEXT*/, lpFrameCur);
    AkelPad.SendMessage(hMainWnd, 1285 /*AKD_FRAMEACTIVATE*/, 0, lpFrameCur);
  }
  while (lpFrameCur && (lpFrameCur != lpFrameStart))
}

Posted: Sat Dec 05, 2015 7:59 am
by vadim
Спасибо, KDJ!
Насколько я понял, чтобы скрипты применялись ко всем вкладкам, эту часть нужно вставлять в каждый JS-скрипт. И вставлять нужно примерно так:

Code: Select all

var hMainWnd     = AkelPad.GetMainWnd();
var lpFrameStart = AkelPad.SendMessage(hMainWnd, 1290 /*AKD_FRAMEFINDW*/, 1 /*FWF_CURRENT*/, 0);
var lpFrameCur   = lpFrameStart;

if (lpFrameStart)
{
  do
  {
    WScript.Echo("Edit file: " + AkelPad.GetEditFile(0));

   -------------
    КОД СКРИПТА
   -------------

    lpFrameCur = AkelPad.SendMessage(hMainWnd, 1290 /*AKD_FRAMEFINDW*/, 9 /*FWF_TABNEXT*/, lpFrameCur);
    AkelPad.SendMessage(hMainWnd, 1285 /*AKD_FRAMEACTIVATE*/, 0, lpFrameCur);
  }
  while (lpFrameCur && (lpFrameCur != lpFrameStart))
}
Запрос:

Code: Select all

    WScript.Echo("Edit file: " + AkelPad.GetEditFile(0));
вероятно, можно исключить? Мне он мешает.

Posted: Sat Dec 05, 2015 8:26 am
by Skif_off
vadim
WScript.Echo для примера, замените на код скрипта или, наверное, проще на вызов нужного скрипта с AkelPad.Call(), чтобы использовать для каждой вкладки только при необходимости.

Posted: Sat Dec 05, 2015 8:49 am
by vadim
Вроде работает, спасибо!

Posted: Sun Dec 06, 2015 5:56 pm
by KDJ
vadim
New script can be useful: RunScriptOnEachTab.js.

Posted: Sun Dec 06, 2015 6:44 pm
by Lenchik
KDJ
Thank you. Would be great also to have not only command interface, buta visual also. Some text block (like one i am writing this post in). And some dropdown list-menu or something to select template from scripts available - "scriptname(|cursor|)" with insert button because we can call several scripts from command option of your script.
Maybe also check for line length if it is restricted somehow.

Posted: Sun Dec 06, 2015 8:58 pm
by KDJ
Lenchik
This GUI already exists: runScript.js.
It is necessary to connect in some way both scripts.
I think it will be easier for Infocatcher to add in runScript.js the option of running on all tabs.

Posted: Mon Dec 07, 2015 3:37 pm
by vadim
KDJ wrote:vadim
New script can be useful: RunScriptOnEachTab.js.
Ну! Так даже лучше, возможностей больше. Спасибо!