InputBox_function.js не работает на новой версии, даже пример InputBox.js не работает, крашит AkelPad. Может кто поправит?
Re: Scripts discussion (4)
Posted: Mon Aug 11, 2025 10:56 am
by VladSh
Instructor Результаты обратной трассировки по InputBox_function.js.
Re: Scripts discussion (4)
Posted: Mon Aug 11, 2025 11:04 am
by VladSh
И ещё у меня при попытке вызова FindReplaceFiles.js вылетает сообщение об ошибке:
---------------------------
Scripts plugin
---------------------------
Script: C:\Portable\AkelPad\AkelFiles\Plugs\Scripts\FindReplaceFiles.js
Line: 663
Symbol: 5
Error: Недостаточно места в стеке
Code: 800A001C
Source: Ошибка выполнения JavaScript
---------------------------
Да Нет Отмена
---------------------------
При попытке его закрыть, оно не закрывается, а в цикле появляется ещё одно такое же сообщение, и так до бесконечности. Приходится снимать задачу.
Instructor
У меня "временное решение" для FindReplaceFiles.js с новой версией Scripts-плагина не работает - та же ошибка "Недостаточно места в стеке" на строке 663.
Re: Scripts discussion (4)
Posted: Sat Aug 23, 2025 1:22 am
by AZJIO
Это? У меня работает.
Re: Scripts discussion (4)
Posted: Fri Oct 31, 2025 12:00 am
by Instructor
VladSh wrote: ↑Fri Aug 22, 2025 3:26 pmУ меня "временное решение" для FindReplaceFiles.js с новой версией Scripts-плагина не работает - та же ошибка "Недостаточно места в стеке" на строке 663.
P.S. Только что 11-я винда обновилась до сборки 26100.7171, с пакетом интерфейса компонентов 1000.26100.265.0, и на ней старый код всё ещё не работает. Проверил, т.к. надеялся, что м.б. исправили, но - нет...
Re: AkelPad и другие приложения
Posted: Wed Mar 04, 2026 1:01 am
by testuser2
Instructor, спасибо за ответы, у меня такая проблема возникла. Я сделал резидентный скрипт, который следит за вводом и выравнивает пробелы во вводимом и вставляемом коде и он работает нормально. Но, если во время выполнения скрипта я хучу убавить табуляцию (Shift + Tab) у какого-то блока текста, то прога падает с ошибкой. На Shift + Tab у меня назначен свой скрипт. В обоих скриптах прописан AkelPad.ScriptNoMutex, но это не помагает. Получается, что где-то возникает конфликт двух скриптов, вносящих изменения. Вопрос, как можно это разрулить, т.е. в скрипте перед любым внесением изменений нужно, наверное делать какую-то проверку или пропуск событий?
Re: AkelPad и другие приложения
Posted: Wed Mar 04, 2026 9:41 am
by testuser2
Выложил свои скрипты на гит. Немного переделал скрит для "shift + tab" и теперь прога не вылетает, если делать Shift + Tab аккуратней с небольшими паузами, но если делать очень быстро, можно нарваться на краш.
Re: Scripts discussion (4)
Posted: Wed Mar 04, 2026 12:59 pm
by testuser2
Все, я вроде понял. Для Shift+Tab я переделал скрипт, вроде работает без сбоев, а вот для Tab, я не могу поменять действие, которое к нему привязано. Как я понимаю, скрипты, работающие синхронно не конфликтуют с ассинхронным резидентным скриптом. Но вот если в скрипте добавить ScriptNoMutex, то он уже конкурирует с другими NoMutex и это плохо. И, по видимому, стандартные фичи, тоже ассинхронные и они также конфликтуют с резидентным скриптом. Поэтму я решил сделать скрипт для действия Tab, но у меня не получилось поменять стандартное действие назначенное на клавишу Tab. Уважаемый Instructor, не подскажете, можно ли как-то это сделать?
Re: Scripts discussion (4)
Posted: Wed Mar 04, 2026 8:32 pm
by Instructor
testuser2
JScriptCodeProcessing.js - вызывать AkelPad.ReplaceSel в оповещении AEN_TEXTINSERTEND не лучшая идея. Используйте AEN_TEXTCHANGED для этого. Возможно этого будет достаточно для исправления проблем.
Если понадобятся примеры по работе с синхронизацией (запускаем TestEvent1.js и сразу TestEvent2.js):
var oSys=AkelPad.SystemFunction();
var hEvent;
if (hEvent=oSys.Call("kernel32::OpenEvent" + _TCHAR, 0x1F0003 /*EVENT_ALL_ACCESS*/, false, "AkelPad::TestEvent"))
{
oSys.Call("kernel32::WaitForSingleObject", hEvent, -1 /*INFINITE*/);
//Work in first script is finished
oSys.Call("kernel32::SetEvent", hEvent);
oSys.Call("kernel32::CloseHandle", hEvent);
}
WScript.Echo("I'm the only one");
Re: Scripts discussion (4)
Posted: Thu Mar 05, 2026 2:14 am
by testuser2
Instructor wrote: ↑Wed Mar 04, 2026 8:32 pm
JScriptCodeProcessing.js - вызывать AkelPad.ReplaceSel в оповещении AEN_TEXTINSERTEND не лучшая идея. Используйте AEN_TEXTCHANGED для этого. Возможно этого будет достаточно для исправления проблем.
К сожалению не помогает, но я думаю, поступить по иному, просто обходить в своем обработчике все изменения, произошедшие после Tab/Shift+Tab. Спс за пример с апишными эвентами, буду знать как их сдесь использовать.
function OnSelChanging(lParam){
/*PrintLog("Начало выделения");*/
if (oSys.Call("user32::GetAsyncKeyState", 9))
if (!IsTabPressed) IsTabPressed = true
else
if (IsTabPressed) IsTabPressed = false
}