Page 3 of 4
Помощь в написании Lua-плагина
Posted: Mon 13 Apr, 2020 18:00
by Majestio
Latest post of the previous page:
zg, кросава!!!!!
deleted: А где лежит имя-файла запускаемого макро? (вопрос отпал)
Помощь в написании Lua-плагина
Posted: Mon 13 Apr, 2020 19:02
by buniak_a_h
Majestio wrote: ↑Mon 13 Apr, 2020 17:36
Smitis, увы - все равно ругается.
вот полный код макро:
Я же писал: троеточие должно быть ВНЕ функции. Потому что внутри - это относится к аргументам вызова именно этой функции.
И к тому же я аргументировал, почему для этого надо завести отдельную переменную.
Если выполнить - как раз и получите код от
zg
Помощь в написании Lua-плагина
Posted: Tue 14 Apr, 2020 06:45
by Majestio
buniak_a_h, сорри, тупанул с ...)
Помощь в написании Lua-плагина
Posted: Fri 17 Apr, 2020 18:17
by Majestio
С очередным вопросом прошу хелпу!
Ситуация следующая. Из файла у меня скрипт читает строки. Нужно отсеять все строки кроме строк формата:
'F,"Инструмент-1","Команда-1.cmd"' или 'С,"Инструмент-2","Команда-2.cmd"', а результат положить в ранее
объявленный массив Cmd. Где каждый элемент массива - должен быть тройкой из распарсенных значений,
если парсинг прошел удачно. Я этого написал регулярку ^(F|C)\s*,\s*"\s*([^"]+?)\s*"\s*,\s*"\s*([^"]+?)\s*"\s*$
Только вот как ее использовать? Допустим тем же far'овским regex?
Отбой, решил сам:
Code: Select all
local Cmd = {}
local Idx = 1
for line in Conf:lines() do
if regex.match(line,'^(F|C)') then
for w1,w2,w3 in regex.gmatch(line, '^(F|C)\\s*,\\s*"\\s*([^"]+?)\\s*"\\s*,\\s*"\\s*([^"]+?)\\s*"\\s*$') do
Cmd[Idx] = {w1,w2,w3}
end
Idx = Idx + 1
end
end
Помощь в написании Lua-плагина
Posted: Fri 17 Apr, 2020 21:39
by Majestio
Ну вот тут уж точно без вас закопаюсь ... Я гарантирую!!!
Синтетический пример ...
Мне нужно из моего макро запустить команду, например, 'cmd /C ruby.exe stuff.rb ', но выполнить так:
1) Чтобы не открывалось консольное окно
2) Чтобы вывод этой команды в STDOUT я мог записать в переменную моего скрипта
Хелп !!!
Помощь в написании Lua-плагина
Posted: Fri 17 Apr, 2020 21:52
by Majestio
buniak_a_h wrote: ↑Sat 11 Apr, 2020 08:03a) Для "обработчиков текста" - может, вообще имело бы смысл написать его на макро? Чтоб не париться с временным файлом?
Не не не ... То, что я смогу написать на Perl 5 за 5 мин, на Lua я потрачу день. Я уже был столкнулся с работой с регэкспами на Lua. По сравнению с Перловкой - это просто кровище из глаз!
buniak_a_h wrote: ↑Sat 11 Apr, 2020 08:03б) Для компилятора: есть у меня скрипт, запускающий компилятор с языка Харбор (наследник Clipper-а). Скрипт при наличии ошибок открывает новый редактор внизу экрана и вешает на
Enter
переход в основной редактор на соответствующую ошибке строку. На самом деле скриптом пользовался довольно интенсивно года три (это я к тому, что тяжёлых ошибок там уже нет, и он удобен). Видимо, для адаптации к Вашим условиям надо будет подправить пути к компилятору, команды вызова (у меня их две - для компиляции с отладкой и без) и шаблон парсинга строки с описанием ошибки. Если Ваш компилятор возвращает ErrorLevel, то это будет просто замечательно.Надо?(для примера
Пока нужен просто запуск без открытия консольного окна и чтение STDOUT запускаемого процесса. Я об этом чуть выше написал. Может быть потом парсинг STDOUT прикручу - но пока нужно просто добить макро "в базовой комплектации" ))
Помощь в написании Lua-плагина
Posted: Fri 17 Apr, 2020 23:42
by zg
Majestio wrote: ↑Fri 17 Apr, 2020 21:39Мне нужно из моего макро запустить команду, например, 'cmd /C ruby.exe stuff.rb ', но выполнить так:
1) Чтобы не открывалось консольное окно
2) Чтобы вывод этой команды в STDOUT я мог записать в переменную моего скрипта
Хелп !!!
на форуме поиск есть.
Помощь в написании Lua-плагина
Posted: Sat 18 Apr, 2020 00:26
by buniak_a_h
Majestio, посмотрите io.popen и hf:lines() - запуск внешнего процесса с перехватом stdout-а
Помощь в написании Lua-плагина
Posted: Sat 18 Apr, 2020 07:54
by John Doe
Вот тут пример макроса, который берёт блок из редактора, и заменяет его содержимое на то что вернет внешний фильтр.
viewtopic.php?f=7&t=7383
Помощь в написании Lua-плагина
Posted: Sat 18 Apr, 2020 08:44
by buniak_a_h
Ладно, вот пример (хотя вся информация у Вас уже есть):
local out={}
local hf = io.popen( [[ruby.exe "stuff.rb"]] ) -- Рекомендую в этом месте использовать [[…]] чтоб не париться с кавычками и слэшами
if hf then
for l in hf:lines() do
l = win.OemToUtf8(l) -- если вывод может содержать символы > 127
out[#out+1] = l
end
hf::close()
end
Помощь в написании Lua-плагина
Posted: Sat 18 Apr, 2020 16:07
by citRiks
Majestio wrote: ↑Fri 17 Apr, 2020 21:52
Не не не ... То, что я смогу написать на Perl 5 за 5 мин, на Lua я потрачу день. Я уже был столкнулся с работой с регэкспами на Lua. По сравнению с Перловкой - это просто кровище из глаз!
Существуют интересные проекты по переводу с других языков в Луа,
или в исходный код Луа, или в байт-код Луа,
даю ссылку, может кому поможет:
https://github.com/hengestone/lua-languages
Про Перл я к сожалению там не нашел,
но например есть Питун, ЖабаCкрипт, Дот.Нет
Помощь в написании Lua-плагина
Posted: Sat 18 Apr, 2020 16:24
by buniak_a_h
Majestio wrote: ↑Fri 17 Apr, 2020 21:52
То, что я смогу написать на Perl 5 за 5 мин, на Lua я потрачу день. Я уже был столкнулся с работой с регэкспами на Lua
Может, Вы не заметили… В LuaFAR-е две библиотеки работы с регэкспами: в стиле lua (escape-символ - "%") и в стале Perl (escape-символ - "\"). Перловский доступен из библиотеки regex.
Помощь в написании Lua-плагина
Posted: Tue 21 Apr, 2020 11:16
by Majestio
buniak_a_h wrote: ↑Sat 18 Apr, 2020 08:44
Ладно, вот пример (хотя вся информация у Вас уже есть):
Сенкс, все работает норм, за исключением перехвата STDERR. Хотя изначально я про это и забыл.
Но вот
John Doe (Thx!) дал ссылочку с примером расширенного варианта запуска (с перехватом STDOUT и STDERR).
Поэкспериментирую с тамошней самопальной функцией pipe.
Помощь в написании Lua-плагина
Posted: Tue 21 Apr, 2020 11:17
by Majestio
buniak_a_h wrote: ↑Sat 18 Apr, 2020 16:24
Может, Вы не заметили… В LuaFAR-е две библиотеки работы с регэкспами: в стиле lua (escape-символ - "%") и в стале Perl (escape-символ - "\"). Перловский доступен из библиотеки regex.
Нет, это я в самом начале своего скрипта уже начал пользовать - regex. Просто самое использование регэкспов в Перле и Lua - две громаднейшие разницы.
Помощь в написании Lua-плагина
Posted: Tue 21 Apr, 2020 11:28
by Majestio
zg wrote: ↑Fri 17 Apr, 2020 23:42на форуме поиск есть.
Да, спасибо, глянул - но это вариант наверное самый последний буду смотреть. Уж больно api-шный)
Помощь в написании Lua-плагина
Posted: Tue 21 Apr, 2020 17:24
by Majestio
Всем привет, и очередной вопрос) Каким образом узнать, что в редакторе в данный момент установлена настройка "Использовать BOM" при записи файла? Это мне нужно для сброса текущего содержимого во временный файл, и чтобы было один-к-одному по сравнению со штатным сохранением. Пока без разбору пишу:
Code: Select all
File:write(string.char(239,187,191))
А хотелось бы немного более по-фэншую. А в chm-хелпе по LuaFar'у этого не нахожу.