AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Работа скриптов в автоматическом режиме

 
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian)
View previous topic :: View next topic  
Author Message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 4640

PostPosted: Sun Apr 24, 2011 4:21 pm    Post subject: Работа скриптов в автоматическом режиме Reply with quote

1. Примеры скриптов, которые после запуска останутся в памяти и будет реагировать на определенные события в AkelPad'е:

AutoScript-Sample1.js

Code:
//// Force turning on AECO_ENTIRENEWLINEDRAW setting for every edit window.

if ((hScript=AkelPad.ScriptHandle(WScript.ScriptName, 3 /*SH_FINDSCRIPT*/)) && AkelPad.ScriptHandle(hScript, 13 /*SH_GETMESSAGELOOP*/))
{
  //Script is running, second call close it.
  AkelPad.ScriptHandle(hScript, 33 /*SH_CLOSESCRIPT*/);
}
else
{
  //Script initialized after empty tab is already created.
  OnEditStart(AkelPad.GetEditWnd());

  if (hSubClass=AkelPad.WindowSubClass(1 /*WSC_MAINPROC*/, MainCallback, 0x40B /*AKDN_EDIT_ONSTART*/))
  {
    //Allow other scripts running and unlock main thread from waiting this script.
    AkelPad.ScriptNoMutex(0x3 /*ULT_UNLOCKSCRIPTSQUEUE|ULT_UNLOCKPROGRAMTHREAD*/);

    //Message loop
    AkelPad.WindowGetMessage();

    AkelPad.WindowUnsubClass(1 /*WSC_MAINPROC*/);
  }
}

function MainCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 0x40B /*AKDN_EDIT_ONSTART*/)
  {
    OnEditStart(wParam);
  }
}

function OnEditStart(hWnd)
{
  AkelPad.SendMessage(hWnd, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 0x8000 /*AECO_ENTIRENEWLINEDRAW*/);
}



AutoScript-Sample2.js

Code:
//// Turn on word wrap for .c, .cpp, .h files and turn off for others.

var hMainWnd=AkelPad.GetMainWnd();

if ((hScript=AkelPad.ScriptHandle(WScript.ScriptName, 3 /*SH_FINDSCRIPT*/)) && AkelPad.ScriptHandle(hScript, 13 /*SH_GETMESSAGELOOP*/))
{
  //Script is running, second call close it.
  AkelPad.ScriptHandle(hScript, 33 /*SH_CLOSESCRIPT*/);
}
else
{
  //Script initialized after empty tab is already created.
  OnEditStart(AkelPad.GetEditWnd());

  if (hSubClass=AkelPad.WindowSubClass(1 /*WSC_MAINPROC*/, MainCallback, 0x40B /*AKDN_EDIT_ONSTART*/, 0x436 /*AKDN_OPENDOCUMENT_FINISH*/, 0x438 /*AKDN_SAVEDOCUMENT_FINISH*/))
  {
    //Allow other scripts running and unlock main thread from waiting this script.
    AkelPad.ScriptNoMutex(0x3 /*ULT_UNLOCKSCRIPTSQUEUE|ULT_UNLOCKPROGRAMTHREAD*/);

    //Message loop
    AkelPad.WindowGetMessage();

    AkelPad.WindowUnsubClass(1 /*WSC_MAINPROC*/);
  }
}

function MainCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 0x40B /*AKDN_EDIT_ONSTART*/)
  {
    OnEditStart(wParam);
  }
  else if (uMsg == 0x436 /*AKDN_OPENDOCUMENT_FINISH*/ ||
           uMsg == 0x438 /*AKDN_SAVEDOCUMENT_FINISH*/)
  {
    //Get current file extension
    var pFile=AkelPad.GetEditFile(0);
    var nExtPos=pFile.lastIndexOf(".");
    var pExt="";

    if (nExtPos != -1)
      pExt=pFile.substr(nExtPos).toLowerCase();
    if (pExt == ".c" || pExt == ".cpp" || pExt == ".h")
    {
      //Turn on word wrap for matched files
      if (!AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 17 /*FI_WORDWRAP*/, 0))
        AkelPad.Command(4209 /*IDM_VIEW_WORDWRAP*/);
    }
  }
}

function OnEditStart(hWnd)
{
  //Turn off word wrap for any new window
  if (AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 17 /*FI_WORDWRAP*/, 0))
    AkelPad.Command(4209 /*IDM_VIEW_WORDWRAP*/);
}




2. В командной строке запуска AkelPad'а или в ручном параметре "CmdLineBegin" добавляем следующую команду:
Code:
/Call("Scripts::Main", 2, "AutoScript-Sample1.js")


Last edited by Instructor on Sat Aug 25, 2012 7:18 am; edited 7 times in total
Back to top
View user's profile Send private message Send e-mail
DrakonHaSh



Joined: 19 Mar 2011
Posts: 93

PostPosted: Mon Apr 25, 2011 4:28 pm    Post subject: Reply with quote

однозначно круто, что akel такой гибкий и настраиваемый скриптами почти на все, что угодно. и однозначный респект Автору за это.

у предложенного варианта есть маленький недостаточек - необходимость модификации командной строки открытия файлов, т.е. модификации реестра (файловые ассоциации) и настроек программ, вызывающих akel, а в идеале хотелось чтобы обработка событий была более универсальной (т.е. встроенной в akel или какой нить плагин)
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 4640

PostPosted: Mon Apr 25, 2011 5:59 pm    Post subject: Reply with quote

DrakonHaSh
В 4.6.0 будут доступны два новых ручных параметра: "CmdLineBegin" и "CmdLineEnd". В "CmdLineBegin" можно будет указать
Code:
/Call("Scripts::Main", 2, "AutoScript.js")


Last edited by Instructor on Wed May 11, 2011 7:30 pm; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
DrakonHaSh



Joined: 19 Mar 2011
Posts: 93

PostPosted: Wed Apr 27, 2011 7:59 am    Post subject: Reply with quote

класс ! спасибо !
Back to top
View user's profile Send private message
F. Phoenix



Joined: 24 Dec 2011
Posts: 113

PostPosted: Thu Jan 10, 2013 2:04 am    Post subject: Reply with quote

...

Если ты обо мне, то лучше сразу плагин, позволяющий биндить команды на события - вмиг 100500 проблем решит Rolling Eyes Вот только чую, кодер все ж полегче расширить. А резидентные скрипты вечно запущенными держать ради такой штуки как-то и не тянет - скорее уж лишнюю кнопку на тулбар прилеплю. Просто было бы удобно, если б и сами нормально детектились.
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 1888
Location: Vinnitsa, Ukraine

PostPosted: Thu Jan 10, 2013 9:52 am    Post subject: Reply with quote

F. Phoenix, состояниме на "сейчас" скрипы могут лишь чуть меньше чем могут плагины(с точки зрения взаимодействия с АР). Совсем на капельку меньше. 2 из 3 моих плагинов можно переписать на скрипты без потери функционала.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Fr0sT



Joined: 24 Jul 2007
Posts: 850

PostPosted: Thu Jan 10, 2013 1:17 pm    Post subject: Reply with quote

Quote:
плагин, позволяющий биндить команды на события

Хорошая идея, в самом деле.
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 1888
Location: Vinnitsa, Ukraine

PostPosted: Thu Jan 10, 2013 3:15 pm    Post subject: Reply with quote

Fr0sT, ну дык Scripts же! У меня как-то чесались руки такое сделать, так себе всё идеально представлял... но до дела просто не дошло. Скажем так, тогда не хотелось так особо тратить время на то, что никому и не нужно.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Fr0sT



Joined: 24 Jul 2007
Posts: 850

PostPosted: Fri Jan 11, 2013 6:47 am    Post subject: Reply with quote

FeyFre, Scripts-ом надо ко всему ручками цеплять, а тут был бы список, как макросы в Ворде: OnAppStart, OnDocLoad и т.п.

Предложение: хотя бы ini опцию, чтобы быстрой командой "сохранить как" сохранять в utf8 БЕЗ BOM. Либо добавлять этот вариант в список доступных кодировок. Поясню, почему: это меню намного быстрее для сохранения файла в нужной кодировке, чем "Файл->Сохранить как..." Ну а сам BOM, как показывает опыт, скорее вреден, чем полезен: до сих пор прорва утилит на нём затыкается.
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 1888
Location: Vinnitsa, Ukraine

PostPosted: Fri Jan 11, 2013 10:27 am    Post subject: Reply with quote

Quote:
Предложение: хотя бы ini опцию, чтобы быстрой командой "сохранить как" сохранять в utf8 БЕЗ BOM.
Command(4137) - Save file as UTF8 without BOM - цепляете это на гор.клавишу, меню, тулбар.

Quote:
FeyFre, Scripts-ом надо ко всему ручками цеплять, а тут был бы список, как макросы в Ворде: OnAppStart, OnDocLoad и т.п.

Ну дык а кто нам помешает этот самый список организовать. Скрипт диспетчер выдаст на гора интерфейс, в котором будут перечисленны события, и можно будет тупо птичками оставить разрешить/запретить обработчики.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
F. Phoenix



Joined: 24 Dec 2011
Posts: 113

PostPosted: Mon Jan 14, 2013 11:42 pm    Post subject: Reply with quote

Кстати, скриптом, забинденным на открытие файлов, еще было бы удобно кодировку детектить в некоторых форматах Rolling Eyes
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 1888
Location: Vinnitsa, Ukraine

PostPosted: Tue Jan 15, 2013 12:13 am    Post subject: Reply with quote

Можно. Но делать то кому?
Если я возьмусь за что-то полезное, то к счастью АР у меня далеко не на первом месте.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group