| View previous topic :: View next topic |
| Author |
Message |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4640
|
Posted: Sun Apr 24, 2011 4:21 pm Post subject: Работа скриптов в автоматическом режиме |
|
|
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 |
|
 |
DrakonHaSh
Joined: 19 Mar 2011 Posts: 93
|
Posted: Mon Apr 25, 2011 4:28 pm Post subject: |
|
|
однозначно круто, что akel такой гибкий и настраиваемый скриптами почти на все, что угодно. и однозначный респект Автору за это.
у предложенного варианта есть маленький недостаточек - необходимость модификации командной строки открытия файлов, т.е. модификации реестра (файловые ассоциации) и настроек программ, вызывающих akel, а в идеале хотелось чтобы обработка событий была более универсальной (т.е. встроенной в akel или какой нить плагин) |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4640
|
Posted: Mon Apr 25, 2011 5:59 pm Post subject: |
|
|
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 |
|
 |
DrakonHaSh
Joined: 19 Mar 2011 Posts: 93
|
Posted: Wed Apr 27, 2011 7:59 am Post subject: |
|
|
| класс ! спасибо ! |
|
| Back to top |
|
 |
F. Phoenix
Joined: 24 Dec 2011 Posts: 113
|
Posted: Thu Jan 10, 2013 2:04 am Post subject: |
|
|
...
Если ты обо мне, то лучше сразу плагин, позволяющий биндить команды на события - вмиг 100500 проблем решит Вот только чую, кодер все ж полегче расширить. А резидентные скрипты вечно запущенными держать ради такой штуки как-то и не тянет - скорее уж лишнюю кнопку на тулбар прилеплю. Просто было бы удобно, если б и сами нормально детектились. |
|
| Back to top |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 1888 Location: Vinnitsa, Ukraine
|
Posted: Thu Jan 10, 2013 9:52 am Post subject: |
|
|
| F. Phoenix, состояниме на "сейчас" скрипы могут лишь чуть меньше чем могут плагины(с точки зрения взаимодействия с АР). Совсем на капельку меньше. 2 из 3 моих плагинов можно переписать на скрипты без потери функционала. |
|
| Back to top |
|
 |
Fr0sT
Joined: 24 Jul 2007 Posts: 850
|
Posted: Thu Jan 10, 2013 1:17 pm Post subject: |
|
|
| Quote: | | плагин, позволяющий биндить команды на события |
Хорошая идея, в самом деле. |
|
| Back to top |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 1888 Location: Vinnitsa, Ukraine
|
Posted: Thu Jan 10, 2013 3:15 pm Post subject: |
|
|
| Fr0sT, ну дык Scripts же! У меня как-то чесались руки такое сделать, так себе всё идеально представлял... но до дела просто не дошло. Скажем так, тогда не хотелось так особо тратить время на то, что никому и не нужно. |
|
| Back to top |
|
 |
Fr0sT
Joined: 24 Jul 2007 Posts: 850
|
Posted: Fri Jan 11, 2013 6:47 am Post subject: |
|
|
FeyFre, Scripts-ом надо ко всему ручками цеплять, а тут был бы список, как макросы в Ворде: OnAppStart, OnDocLoad и т.п.
Предложение: хотя бы ini опцию, чтобы быстрой командой "сохранить как" сохранять в utf8 БЕЗ BOM. Либо добавлять этот вариант в список доступных кодировок. Поясню, почему: это меню намного быстрее для сохранения файла в нужной кодировке, чем "Файл->Сохранить как..." Ну а сам BOM, как показывает опыт, скорее вреден, чем полезен: до сих пор прорва утилит на нём затыкается. |
|
| Back to top |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 1888 Location: Vinnitsa, Ukraine
|
Posted: Fri Jan 11, 2013 10:27 am Post subject: |
|
|
| Quote: | | Предложение: хотя бы ini опцию, чтобы быстрой командой "сохранить как" сохранять в utf8 БЕЗ BOM. | Command(4137) - Save file as UTF8 without BOM - цепляете это на гор.клавишу, меню, тулбар.
| Quote: | | FeyFre, Scripts-ом надо ко всему ручками цеплять, а тут был бы список, как макросы в Ворде: OnAppStart, OnDocLoad и т.п. |
Ну дык а кто нам помешает этот самый список организовать. Скрипт диспетчер выдаст на гора интерфейс, в котором будут перечисленны события, и можно будет тупо птичками оставить разрешить/запретить обработчики. |
|
| Back to top |
|
 |
F. Phoenix
Joined: 24 Dec 2011 Posts: 113
|
Posted: Mon Jan 14, 2013 11:42 pm Post subject: |
|
|
Кстати, скриптом, забинденным на открытие файлов, еще было бы удобно кодировку детектить в некоторых форматах  |
|
| Back to top |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 1888 Location: Vinnitsa, Ukraine
|
Posted: Tue Jan 15, 2013 12:13 am Post subject: |
|
|
Можно. Но делать то кому?
Если я возьмусь за что-то полезное, то к счастью АР у меня далеко не на первом месте. |
|
| Back to top |
|
 |
|
|
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
|
Powered by phpBB © 2001, 2005 phpBB Group
|