Проверка корректности скрипта в редакторе + выполнение
Posted: Fri 24 May, 2013 14:09
by John Doe
Набор макросов, помогающих в отладке lua-скриптов, открытых в редакторе.
Активируются только при filemask="*.lua;*.moon"
* CtrlEnter
Предназначен для проверки корректности редактируемого макроса.
При наличии выделения — работает с выделением.
Если ошибок нет, то предлагаются действия на выбор:
Reload All выполняет перезагрузку макросов.
Файл предварительно сохраняется, если в процессе сохранения возникли вопросы, то макросы не перезагружаются
Execute выполнить сам скрипт, или выделенную часть.
Если скрипт возвращает значения, то они отображаются.
Variables после исполнения скрипта или выделенной части отображает результирующие значения переменных скрипта: локальных и окружения (если присутствуют). Если скрипт возвращает значения, то они тоже отображаются.
Требуется модуль Lua Explorer.
Если редактируемый файл расположен не в папке scripts, то курсор устанавливается на кнопку Execute.
* CtrlShiftEnter (только при наличии выделения)
После исполнения выделенной части скрипта отображает список возвращённых значений (если в тексте отсутствует ключевое слово return, то оно добавляется в начало).
Перед запуском запрашиваются значения переменных (environment), можно перечислить через запятую
.
Настраивается опциями в начале файла, или настройками в пользовательском scriptscfg (пример прилагается)
Файл скрипта переименован
Проверка корректности скрипта в редакторе + выполнение
Posted: Sun 01 Dec, 2019 23:30
by HaRT
buniak_a_h wrote: ↑Sun 01 Dec, 2019 02:46
Добрый день.
При использовании макроса MacroCheck я заметил одну особенность: в far.Message (с тремя кнопками) иногда активной бывает первая кнопка (которая в фигурных скобках; видимо - DIF_DEFAULTBUTTON, а иногда - вторая (в исходном скрипте это - строка 169)
[…]
От чего зависит эта "стартовая кнопка" в указанном скрипте? А то очень неудобно бывает - она иногда на первой кнопке (Reload All), а иногда - на второй (Execute).
Во избежание офтопика там просьба обсуждать тут.
Проверка корректности скрипта в редакторе + выполнение
Posted: Mon 02 Dec, 2019 14:21
by John Doe
buniak_a_h wrote:
От чего зависит эта "стартовая кнопка" в указанном скрипте?
От расположения проверяемого скрипта: если он в Scripts, то предлагается перезагрузить макросы.
Если в другом месте - то запустить скрипт открытый в редакторе.
Проверка корректности скрипта в редакторе + выполнение
Posted: Mon 02 Dec, 2019 15:46
by buniak_a_h
John Doe wrote: ↑Mon 02 Dec, 2019 14:21
От расположения проверяемого скрипта: если он в Scripts, то предлагается перезагрузить макросы.
Если в другом месте - то запустить скрипт открытый в редакторе.
Спасибо, я уже поискал слово Keys и понял логику. Просто у меня для перезагрузки макросов другой скрипт используется, а "плавающая" стартовая кнопка - не удобно. Но идею я понял. Спасибо. А то иногда хочется в подтверждении "опасных" действий сделать умолчательной кнопку "Нет"; приходится менять их местами (вместо ";YesNo" указывать "No;Yes". Некузяво…)
Проверка корректности скрипта в редакторе + выполнение
Posted: Wed 11 Dec, 2019 05:24
by buniak_a_h
Новая версия FAR-а (увы, не нашёл, с какой версии. На 5511 ещё работало; на 5523 уже нет) перестала работать проверка и запуск. Проблема в том, что в макросе указано action=checkMacro;. Раньше это означало вызов без параметров. Теперь передаётся параметр - таблица. Замените, пожалуйста, action=checkMacro; на
Проверка корректности скрипта в редакторе + выполнение
Posted: Wed 11 Dec, 2019 09:39
by buniak_a_h
Жму download получаю 404: Not Found . ЧЯДНТ?
Проверка корректности скрипта в редакторе + выполнение
Posted: Wed 11 Dec, 2019 11:33
by John Doe
Исправлено
Проверка корректности скрипта в редакторе + выполнение
Posted: Sat 01 Feb, 2020 03:11
by buniak_a_h
У меня одного такая беда?
При вызове из МЕНЮ плагинов пункта [ Reload Macro ] требуется модуль tooltip . А где его берут?
Строка 126: require"tooltip" ("(re)loaded in "..elapsed.." ms","Macros",1000)
Проверка корректности скрипта в редакторе + выполнение
Posted: Sat 01 Feb, 2020 10:11
by John Doe
Подозреваю что я его не выкладывал.
Но вы можете без особого вреда для функциональности просто закомментировать эту строку. (а две предыдущие можете попробовать раскомментировать)
Проверка корректности скрипта в редакторе + выполнение
Posted: Tue 04 Feb, 2020 09:15
by John Doe
buniak_a_h wrote: ↑Sat 01 Feb, 2020 03:11
требуется модуль tooltip
Это был эксперимент по реализации подобия "тултипа" немодальным диалогом, чтобы на время его отображения выполнение прочих действий не останавливалось.
local id = win.Uuid"45B09D0D-6AE8-416C-BB5A-F5FA7B5CC430"
local F = far.Flags
local DEF_TIMEOUT = 3000
local function Message(text,title,timeout)--X,Y
--todo title width
--todo wide screen
local len = text:len()
local items = {
--[[01]] {F.DI_SINGLEBOX,0,0,len+2,3,0,0,0,0,title},
--[[02]] {F.DI_TEXT, 1,1,0,0,0,0,0,0,text},--todo center
}
local flags = F.FDLG_NONMODAL
local timer
local hDlg = far.DialogInit(id,-1,-1,len+2,3,len,items,flags,function(hDlg,Msg)
if Msg==F.DN_CLOSE and timer then timer:Close() end
end)
if timeout~=false then
timeout = (timeout or DEF_TIMEOUT)--*1000
timer = far.Timer(timeout,function(t) t:Close(); hDlg:send"DM_CLOSE" end)
end
return hDlg
end
return Message
Проверка корректности скрипта в редакторе + выполнение
Posted: Fri 10 Apr, 2020 21:10
by citRiks
Скрипт интересный
А почему бы в него не добавить загрузку открытого макроса?
"Загрузить все" работает конечно, но не мгновенно скажем так,
а хотелось бы быстренько перезагрузить именно редактируемый макрос
Проверка корректности скрипта в редакторе + выполнение
Posted: Sat 11 Apr, 2020 07:25
by John Doe
Апи не предусматривает такой возможности.
Проверка корректности скрипта в редакторе + выполнение
Posted: Sat 11 Apr, 2020 14:03
by citRiks
John Doe,
Интересно, на поверхности АПИ вроде действительно не лежит.
Но не может же такого быть чтобы совсем нельзя было бы?
Загрузить новый макрос вроде как можно не залезая слишком глубоко:
-- from %FARHOME%\Plugins\LuaMacro\macrotest.lua
local function test_far_MacroAdd()
local area, key, descr = "MACROAREA_SHELL", "CtrlA", "Test MacroAdd"
local Id = far.MacroAdd(area, nil, key, [[A = { b=5 }]], descr)
assert(type(Id)=="userdata" and far.MacroDelete(Id))
Id = far.MacroAdd(-1, nil, key, [[A = { b=5 }]], descr)
assert(not Id) -- bad area
Id = far.MacroAdd(area, nil, key, [[A = { b:5 }]], descr)
assert(not Id) -- bad code
Id = far.MacroAdd(area, "KMFLAGS_MOONSCRIPT", key, [[A = { b:5 }]], descr)
assert(type(Id)=="userdata" and far.MacroDelete(Id))
Id = far.MacroAdd(area, "KMFLAGS_MOONSCRIPT", key, [[A = { b=5 }]], descr)
assert(not Id) -- bad code
Id = far.MacroAdd(area, nil, key, [[@c:\myscript 5+6,"foo"]], descr)
assert(type(Id)=="userdata" and far.MacroDelete(Id))
Id = far.MacroAdd(area, nil, key, [[@c:\myscript 5***6,"foo"]], descr)
assert(type(Id)=="userdata" and far.MacroDelete(Id)) -- with @ there is no syntax check till the macro runs
Id = far.MacroAdd(nil, nil, key, [[@c:\myscript]])
assert(type(Id)=="userdata" and far.MacroDelete(Id)) -- check default area (MACROAREA_COMMON)
local Id = far.MacroAdd(area,nil,key,[[Keys"F7" assert(Dlg.Id=="FAD00DBE-3FFF-4095-9232-E1CC70C67737") Keys"Esc"]],descr)
assert(0==mf.eval("Shell/"..key, 2))
assert(far.MacroDelete(Id))
Id = far.MacroAdd(area,nil,key,[[a=5]],descr,function(id,flags) return false end)
assert(-2 == mf.eval("Shell/"..key, 2))
assert(far.MacroDelete(Id))
Id = far.MacroAdd(area,nil,key,[[a=5]],descr,function(id,flags) error"deliberate error" end)
assert(-2 == mf.eval("Shell/"..key, 2))
assert(far.MacroDelete(Id))
Id = far.MacroAdd(area,nil,key,[[a=5]],descr,function(id,flags) return id==Id end)
assert(0 == mf.eval("Shell/"..key, 2))
assert(far.MacroDelete(Id))
end
С другой стороны, действительно не совсем понятно как удалять созданный или уже существующий.
С третьей стороны, мировая практика показывает, что все что можно добавляется то и удаляется.
Если скрестить эту странцу: https://api.farmanager.com/ru/service_f ... ntrol.html
..с этим файлом:
%FARHOME%\Plugins\LuaMacro\utils.lua
.. то наверное что-то получится.
Как вы думаете, может открыть еще одно неуспешное рац. предложение? ))
практическая польза:
Если изменил один макрос, то не надо перезагружать все на свете
Проверка корректности скрипта в редакторе + выполнение
Posted: Sat 11 Apr, 2020 15:25
by buniak_a_h
citRiks wrote: ↑Sat 11 Apr, 2020 14:03
Как вы думаете, может открыть еще одно неуспешное рац. предложение?
Ей бо, игра не стоит свеч. Ну, выиграете пару микросекунд … К тому же перезагрузка макросов переинициализирует локальные переменные.
Ну и:
citRiks wrote: ↑Sat 11 Apr, 2020 14:03
мировая практика показывает, что все что можно добавляется то и удаляется.
Мировая практика как раз показывает, что это - не так. Всё, что добавляется, можно пометить на удаление (заблокированные файлы, например), или сделать невидимыми (в инете, как известно, ничего не пропадает, только прячется).
Как Вы могли заметить, макросы не удаляются, а только disable-ятся. В общем, понятно: не нужно париться с освобождением ресурсов, сборкой мусора, не надо бояться, что какой-нить хендл повторится (новому будет выделен тот, что был у старого). Многие так делают, в т.ч. и СУБД разные (запись не удаляется до регламентных работ). В нашем случае реальное удаление произойдёт после перезапуска ФАРа. Вряд ли это - то, что Вы бы хотели (перезагрузить один макрос и перезапустить ФАР) .)