Page 34 of 74
Posted: Sat Mar 26, 2011 4:36 am
by Instructor
FeyFre
Там всего три вызова:
Code: Select all
lpScriptThread->objActiveScript->lpVtbl->SetScriptState(lpScriptThread->objActiveScript, SCRIPTSTATE_DISCONNECTED);
if ((hr=lpScriptThread->objActiveScriptParse->lpVtbl->ParseScriptText(lpScriptThread->objActiveScriptParse, wpContent, 0, 0, 0, 0, 0, 0, 0, 0)) == S_OK)
*bResult=TRUE;
lpScriptThread->objActiveScript->lpVtbl->SetScriptState(lpScriptThread->objActiveScript, SCRIPTSTATE_CONNECTED);
Предложения?
Posted: Sat Mar 26, 2011 10:41 am
by FeyFre
Instructor
А что-бы я знал? Делать в лоб по прежнему. Т.е. грузить файл и кормить его внутреннему методу eval. Но это не вариант ибо остальные языки страдают. Просто изменить формулировку.
ЗЫ: В Scripts-Eng.txt в списке методов отсутствует AkelPad.Include хотя дальше он описан. В Русском всё нормально.
Posted: Sat Mar 26, 2011 3:58 pm
by Instructor
FeyFre
...отсутствует AkelPad.Include...
Добавлено.
Posted: Sat Apr 02, 2011 3:34 pm
by VladSh
Echo всё-таки метод для вывода тестовых сообщений, так вот хочется чтобы при нажатии на крестик закрытия сообщения выполнение скрипта прерывалось бы. Бывает так, что в цикле поставил Echo и скрипт зациклился, приходится снимать задачу...
Ещё пожелание, чтобы Scripts-плагин отлавливал сочетание клавиш Ctrl+Break и прерывал бы выполнение скрипта, по причине того же зацикливания; так делает Domino Designer. Эта возможность очень помогла бы, т.к. снимать задачу при каждом зацикливании - не дело.
Добавлено:
Сейчас для интереса написал такой скрипт:
Code: Select all
for (var i = 0; i < 1000000; i++)
{
AkelPad.ReplaceSel(AkelPad.GetClipboardText() + "\r");
}
WScript.Echo("|" + 1 + "|");
Открыл ещё одну вкладку, запустил скрипт комбинацией клавиш, писать стало в активное окно; в процессе выполнения скрипта переключил вкладку (это совсем даже неплохо, что это можно сделать) и запущенный скрипт стал писать уже в ту вкладку, куда я только что перешёл (а вот это не очень хорошо).
В чём спич. Дать опциональную возможность (свойство наверное) выполнять скрипт только в пределах той вкладки, в которой он был запущен, в то же время не запрещая переходить и работать в других вкладках. Т.е. реализовать запуск скриптов в фоне.
P.S. В ходе этого "теста" на моём i3 AkelPad.exe отъел 25% проца. Естественно я не дождался миллиона записей, потому закрыл вкладку, в которую производилась запись, даблкликом. Потом закрыл вторую (последнюю) вкладку. AkelPad.exe, вернее скрипт, не прекратил работу, хотя вкладок не было (куда он продолжал писать - непонятно), потом скрипт доработал и после закрытия мессежда AkelPad закрылся.
И тут пожелание: прекращать выполнение скриптов, если нет ни одного окна, в которой бы было установлено (тем несуществующим пока свойством, что я писал выше), что работать только с этой вкладкой.
Хотя такое поведение желательно было бы по умолчанию, т.к. большинство скриптов работают с текущей вкладкой, а скриптов, которые обрабатывают несколько файлов-вкладок сразу единицы.
Posted: Sat Apr 02, 2011 6:47 pm
by FeyFre
Ещё пожелание, чтобы Scripts-плагин отлавливал сочетание клавиш Ctrl+Break
Хорошо было бы, если бы Вы объяснили как практически заставить любой скрипт прерваться.
Сейчас для интереса написал такой скрипт:
Всё правильно: в каждой итерации Вы просите выполнить замену в
текущем окне редактирования. И пока работаете меняете текущее окно. Иного эффекта ждать не стоило.
И тут пожелание: прекращать выполнение скриптов, если нет ни одного окна, в которой бы было установлено (тем несуществующим пока свойством, что я писал выше), что работать только с этой вкладкой.
Хотя такое поведение желательно было бы по умолчанию, т.к. большинство скриптов работают с текущей вкладкой, а скриптов, которые обрабатывают несколько файлов-вкладок сразу единицы
Не надо по-умолчанию.
Posted: Sat Apr 02, 2011 7:17 pm
by Infocatcher
FeyFre
Вроде бы, утверждалось, что каждый скрипт выполняется в отдельном потоке. Стало быть, можно завершить этот поток.
P.S. С AkelPad.ReplaceSel() и иже с ним нужен дополнительный аргумент для указания нужного окна редактирования.
Posted: Sat Apr 02, 2011 8:45 pm
by FeyFre
Infocatcher
Сорри за сравнение, но если Вас снимут с жены в самый ответственный момент, то какова будет Ваша реакция, и тем более реакция жены?
Так и с любым потоком, на любой ОС-и, на любом процессоре и контроллере: если принудительно прибить поток не дав коду убрать за собой, ничего хорошего ждать не стоит: утечки памяти, утечки ресурсов, блокировка ресурсов объектами синхронизации, и как следствие часто не возможно запустить функцию заново. А в нашем случае именно это и случится: поток убьют, и при этом ни один ресурс не будет освобожден.
Posted: Sat Apr 02, 2011 10:16 pm
by Infocatcher
FeyFre
А в данном случае есть альтернатива? Ну, кроме как прибить процесс AkelPad'а.
утечки памяти
MemAlloc() делает AkelPad, так что тут можно запомнить, для какого скрипта была выделена память, и освободить ее.
И при таком подходе надо запретить завершение процессов/потоков диспетчере задач и его многочисленных аналогах.
Posted: Sat Apr 02, 2011 10:32 pm
by FeyFre
Infocatcher
А в данном случае есть альтернатива? Ну, кроме как прибить процесс AkelPad'а.
Альтернатива? Ну например писать качественные скрипты. Такие, которые будут учитывать что их могут захотеть прервать.
Например, тот же Калькулятор в поставке Windows: задай считать 99999999! - он не повиснет на всегда, он периодически будет спрашивать, а не передумал ли пользователь. Вот эта программа написана хорошо.
MemAlloc() делает AkelPad, так что тут можно запомнить, для какого скрипта была выделена память, и освободить ее.
MemAlloc() вызывается мизерное количество раз, по сравнению с остальными функциями.
И при таком подходе надо запретить завершение процессов/потоков диспетчере задач и его многочисленных аналогах.
Одно дело, когда сторонний софт вмешивается в работу процессов - тут уж только юзер виновен во всех вытекающих, а другое когда приложение само себе делает плохо.
Posted: Sun Apr 03, 2011 12:08 am
by Infocatcher
FeyFre
А если скрипт может зависнуть при использовании нативной функции (а он может)? Навелосипедировать аналог с прерываниями на случай затяжных вычислений?
Другое дело, что этим должен заниматься скриптовый движок. Вот в Firefox будет периодически спрашивать про зависший скрипт. А нам не повезло.
Все же гораздо проще и удобнее встроить достаточно простой хак, чем заставить всех писать качественные скрипты. Плюс для отладки пригодится. Тогда надо еще и главное окно включать и разрешать перерисовку.
Posted: Sun Apr 03, 2011 8:59 am
by FeyFre
А если скрипт может зависнуть при использовании нативной функции (а он может)? Навелосипедировать аналог с прерываниями на случай затяжных вычислений?
От висящего нативного кода Вам точно ничего не поможет.
Другое дело, что этим должен заниматься скриптовый движок. Вот в Firefox будет периодически спрашивать про зависший скрипт. А нам не повезло.
FireFox может себе такое позволить, ибо всё что делается на JavaScript - делается FireFox-ом: ни один сторонний нативный код не участвует в JavaScript. У нас же всё с точностью до наоборот: весь JavaScript чужой. Плюс у нас есть ещё и VBScript, и другие движки языков WHS, и сам интерфейс WHS. Вы уверенны что этот хак подходит к им всем?
Posted: Mon Apr 11, 2011 2:01 pm
by us-us
Прочитал всю ветку, освещения такого вопроса не нашел:
Есть ли способ запускать определенный скрипт при открытии любого файла на редактирование автоматически?
А если сейчас такого способа нет, можно ли его реализовать? Например в виде плагина-"довеска" к Scripts-плагину, в котором можно выбрать скрипты, выполняющиеся сами при открытии любого файла.

Posted: Mon Apr 11, 2011 3:35 pm
by FeyFre
us-us
Можно запустить скрипт перед открытием любого из интересующих Вас файлов. Скрип останется работать, и будет видеть открытый каждый открываемый файл, и делать что нужно.
Posted: Mon Apr 11, 2011 3:43 pm
by us-us
FeyFre
Не, это не то

Хочется именно автоматического "подхвата" определенных пользователем скриптов. В идеале, чтобы флагами служили открытие/закрытие файла.
Например, открываю я текстовый файл расшаренный по сети, срабатывает скрипт, который создает рядом с ним lock-файл, а при закрытии этот же скрипт его удаляет.
Это первое, что навскидку пришло в голову
З.Ы.: Хотя.. вариант с запуском скрипта до открытия файлов - тоже вариант, но всё портит необходимость хоть и один раз, но все же запускать его
вручную.
Posted: Mon Apr 11, 2011 3:58 pm
by FeyFre
us-us
Такого у нас пока нету.
И пусть скрипты сами решают, какие файлы обслуживать, а не наоборот.
Тут ещё не решена проблема корректного завершения висящего в фоне скрипта при закрытии редактора.
А если сделают автозапуск скриптов, то не малую часть плагинов можно буде переписать в скрипты. Так что пока не мечтайте.