Помощь в написании Lua-плагина
Помощь в написании Lua-плагина
Всем привет!
Я не фанат "плагино-писания", просто уже давно нужна одна функциональность от редактора Far'а, без которой уже никак. Поэтому решился на сие. А хочу сделать следующее:
1) По горячей клавише в редакторе вызывается плагин, выводящий диалог, в котором только список команд
2) Команды читаются из моего файла конфигурации
3) При запуске команды из диалога:
* текущее содержимое редактора сбрасывается во временный файл
* запускается внешний обработчик на этот временный файл (допустим astyle.exe, или perl.exe, или fasm.exe ... & etc.)
* содержимое уже обработанного временного файла загружается назад в редактор
* временный файл удаляется
4) Если в файле конфигурации задана определенная метка - после отработки команды из диалога вызывается другой диалог, содержащий результат отработки команды.
Естественно, хочу предусмотреть функционал 1) для обработчиков текста, 2) просто для компиляторов
Пока единственная просьба: накидать скрипт, который выводит диалог, содержащий listbox, и такой же - содержащий textarea. Ну или ткнуть носом в документацию, где почитать (посмотреть пример) про создание и вывод диалогов.
Я не фанат "плагино-писания", просто уже давно нужна одна функциональность от редактора Far'а, без которой уже никак. Поэтому решился на сие. А хочу сделать следующее:
1) По горячей клавише в редакторе вызывается плагин, выводящий диалог, в котором только список команд
2) Команды читаются из моего файла конфигурации
3) При запуске команды из диалога:
* текущее содержимое редактора сбрасывается во временный файл
* запускается внешний обработчик на этот временный файл (допустим astyle.exe, или perl.exe, или fasm.exe ... & etc.)
* содержимое уже обработанного временного файла загружается назад в редактор
* временный файл удаляется
4) Если в файле конфигурации задана определенная метка - после отработки команды из диалога вызывается другой диалог, содержащий результат отработки команды.
Естественно, хочу предусмотреть функционал 1) для обработчиков текста, 2) просто для компиляторов
Пока единственная просьба: накидать скрипт, который выводит диалог, содержащий listbox, и такой же - содержащий textarea. Ну или ткнуть носом в документацию, где почитать (посмотреть пример) про создание и вывод диалогов.
- buniak_a_h
- Posts: 4236
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 643 times
- Contact:
Помощь в написании Lua-плагина
Повесьте несколько макросов на одну горячую клавишу - и будет Вам меню с выбором нужного действия
a) Для "обработчиков текста" - может, вообще имело бы смысл написать его на макро? Чтоб не париться с временным файлом?
б) Для компилятора: есть у меня скрипт, запускающий компилятор с языка Харбор (наследник Clipper-а). Скрипт при наличии ошибок открывает новый редактор внизу экрана и вешает на
Enter
переход в основной редактор на соответствующую ошибке строку. На самом деле скриптом пользовался довольно интенсивно года три (это я к тому, что тяжёлых ошибок там уже нет, и он удобен). Видимо, для адаптации к Вашим условиям надо будет подправить пути к компилятору, команды вызова (у меня их две - для компиляции с отладкой и без) и шаблон парсинга строки с описанием ошибки. Если Ваш компилятор возвращает ErrorLevel, то это будет просто замечательно.Надо?(для примера)
Ройте в направлении far.Menu или Menu.Show. Например:
Помощь в написании Lua-плагина
buniak_a_h, благодарю!!!
А как такое же сделать, но используя форму диалога?
А как такое же сделать, но используя форму диалога?
- buniak_a_h
- Posts: 4236
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 643 times
- Contact:
Помощь в написании Lua-плагина
Majestio,
- Составляете массив элементов диалога. Каждый элемент массива описывает один элемент диалога (текст DI_TEXT, поле ввода DI_EDITб кнопка DI_BUTTON, список DI_LISTBOX, …). Для DI_LISTBOX составляете список строк (массив таблиц с полем то ли text=, то ли Text=, не помню).
- При необходимости определяете функцию-хендлер (для обработки нестандартных ситуаций, например, нажатий на бутоны
- Вызываете функцию far.Dialog
- buniak_a_h
- Posts: 4236
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 643 times
- Contact:
Помощь в написании Lua-плагина
P/S. Примеров скриптов (в т.ч. с диалогами) очень много в ветках форума Полезные макросы и скрипты и Обсуждение макросов
- buniak_a_h
- Posts: 4236
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 643 times
- Contact:
Помощь в написании Lua-плагина
Вообще-то, функционально МЕНЮ - это частный случай диалога. Я не добавлял заголовка. А так-то там есть всё, что Вы хотите получить.
- buniak_a_h
- Posts: 4236
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 643 times
- Contact:
Помощь в написании Lua-плагина
На самом деле я не думаю, что кто-нить будет писать специализированный плагин, потребовавшийся одному человеку. Тем более, что описанное Вами вполне реализуется макросом. Так что мне кажется, Вы не туда написали.
Помощь в написании Lua-плагина
buniak_a_h, да да, все верно - я должен был в разделе макросов спросить. Ошибся.
-
- Posts: 6819
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 528 times
Помощь в написании Lua-плагина
Есть готовые плагины, делающие нечто подобное. Может быть и скрипты тоже.
Например, можно попробовать https://plugring.farmanager.com/plugin.php?pid=974&l=ru
Если хорошо поищете, наверняка ещё что-нибудь найдётся.
Это я не к тому, чтобы отбить у вас охоту сделать что-то своё, но познакомиться с существующими изделиями не помешает.
Например, можно попробовать https://plugring.farmanager.com/plugin.php?pid=974&l=ru
Если хорошо поищете, наверняка ещё что-нибудь найдётся.
Это я не к тому, чтобы отбить у вас охоту сделать что-то своё, но познакомиться с существующими изделиями не помешает.
Помощь в написании Lua-плагина
Посмотрел плагин выше - нет, не то. Тем более, там реальный плагин (не скрипт), править такое - только тратить время. Я когда-то, со времен Far 1.6 плотно сидел на написании плагинов, по работе надо было. Сейчас, с поддержкой Lua, считаю что для написания "живого" плагина нужно еще постараться найти "тему", большинство может и должно решаться скриптами.
Ну а по моей задаче ... уверен, что ее скриптом порешаю с "малой кровью". Хотя и Lua толком не знаю, так экспериментировал малеха.
Помощь в написании Lua-плагина
попутно частный вопрос)
Мне нужно получить полный путь к моему макро, который я пишу. Я нашел решение:
Но это явный костыль. За счет забитого явно 'scripts\\EditorTools'. А как найти правильно полный путь? Без привязки к моему 'EditorTools'?
Мне нужно получить полный путь к моему макро, который я пишу. Я нашел решение:
Code: Select all
local CurPath = far.PluginStartupInfo().ModuleDir..'scripts\\EditorTools'
- buniak_a_h
- Posts: 4236
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 643 times
- Contact:
Помощь в написании Lua-плагина
buniak_a_h, упс ... немного не понял Покажи, плс, правильный код.
Если что, мне надо как-то "адресоваться" к моему конфигу "C:\Tools\Far3-x64\Profile\Macros\scripts\EditorTools\EditorTools.conf", но только не "хардкодом".
Если что, мне надо как-то "адресоваться" к моему конфигу "C:\Tools\Far3-x64\Profile\Macros\scripts\EditorTools\EditorTools.conf", но только не "хардкодом".
Last edited by Majestio on Sat 11 Apr, 2020 11:41, edited 1 time in total.