Помощь в написании Lua-плагина

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
User avatar
Majestio
Posts: 32
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 2 times

Помощь в написании Lua-плагина

Post by Majestio »

Всем привет!

Я не фанат "плагино-писания", просто уже давно нужна одна функциональность от редактора Far'а, без которой уже никак. Поэтому решился на сие. А хочу сделать следующее:

1) По горячей клавише в редакторе вызывается плагин, выводящий диалог, в котором только список команд
2) Команды читаются из моего файла конфигурации
3) При запуске команды из диалога:
* текущее содержимое редактора сбрасывается во временный файл
* запускается внешний обработчик на этот временный файл (допустим astyle.exe, или perl.exe, или fasm.exe ... & etc.)
* содержимое уже обработанного временного файла загружается назад в редактор
* временный файл удаляется
4) Если в файле конфигурации задана определенная метка - после отработки команды из диалога вызывается другой диалог, содержащий результат отработки команды.

Естественно, хочу предусмотреть функционал 1) для обработчиков текста, 2) просто для компиляторов

Пока единственная просьба: накидать скрипт, который выводит диалог, содержащий listbox, и такой же - содержащий textarea. Ну или ткнуть носом в документацию, где почитать (посмотреть пример) про создание и вывод диалогов.
User avatar
Majestio
Posts: 32
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 2 times

Помощь в написании Lua-плагина

Post by Majestio »

Упс ... похоже не в том разделе создал топик... Сорри.
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

Помощь в написании Lua-плагина

Post by buniak_a_h »

Majestio wrote: Sat 11 Apr, 2020 07:31 Несколько "заметок на полях".
1) По горячей клавише в редакторе вызывается плагин, выводящий диалог, в котором только список команд
Повесьте несколько макросов на одну горячую клавишу - и будет Вам меню с выбором нужного действия :-)
Majestio wrote: Sat 11 Apr, 2020 07:31 Естественно, хочу предусмотреть функционал 1) для обработчиков текста, 2) просто для компиляторов
a) Для "обработчиков текста" - может, вообще имело бы смысл написать его на макро? Чтоб не париться с временным файлом?
б) Для компилятора: есть у меня скрипт, запускающий компилятор с языка Харбор (наследник Clipper-а). Скрипт при наличии ошибок открывает новый редактор внизу экрана и вешает на Enter переход в основной редактор на соответствующую ошибке строку. На самом деле скриптом пользовался довольно интенсивно года три (это я к тому, что тяжёлых ошибок там уже нет, и он удобен). Видимо, для адаптации к Вашим условиям надо будет подправить пути к компилятору, команды вызова (у меня их две - для компиляции с отладкой и без) и шаблон парсинга строки с описанием ошибки. Если Ваш компилятор возвращает ErrorLevel, то это будет просто замечательно.
Надо?(для примера)
Majestio wrote: Sat 11 Apr, 2020 07:31 Пока единственная просьба: накидать скрипт, который выводит диалог, содержащий listbox, и такой же - содержащий textarea. Ну или ткнуть носом в документацию, где почитать (посмотреть пример) про создание и вывод диалогов.
Ройте в направлении far.Menu или Menu.Show. Например:
  1. local Choice=Menu.Show('aaaaa\nbbbbb\nccccc', nil, 8+0x200)
  2. if Choice==1 then
  3.  -- …
  4. elseif Choice==2 then
  5.  -- …
  6. elseif Choice==3 then
  7.  -- …
  8. else
  9.  return
  10. end
User avatar
Majestio
Posts: 32
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 2 times

Помощь в написании Lua-плагина

Post by Majestio »

buniak_a_h, благодарю!!!
А как такое же сделать, но используя форму диалога?
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

Помощь в написании Lua-плагина

Post by buniak_a_h »

Majestio,
  1. Составляете массив элементов диалога. Каждый элемент массива описывает один элемент диалога (текст DI_TEXT, поле ввода DI_EDITб кнопка DI_BUTTON, список DI_LISTBOX, …). Для DI_LISTBOX составляете список строк (массив таблиц с полем то ли text=, то ли Text=, не помню).
  2. При необходимости определяете функцию-хендлер (для обработки нестандартных ситуаций, например, нажатий на бутоны
  3. Вызываете функцию far.Dialog
Подробности - в мануале. Мануалы - в %FarHome%\Encyclopedia
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

Помощь в написании Lua-плагина

Post by buniak_a_h »

P/S. Примеров скриптов (в т.ч. с диалогами) очень много в ветках форума Полезные макросы и скрипты и Обсуждение макросов
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

Помощь в написании Lua-плагина

Post by buniak_a_h »

Majestio wrote: Sat 11 Apr, 2020 08:11 buniak_a_h, благодарю!!!
А как такое же сделать, но используя форму диалога?
Вообще-то, функционально МЕНЮ - это частный случай диалога. Я не добавлял заголовка. А так-то там есть всё, что Вы хотите получить.
User avatar
Majestio
Posts: 32
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 2 times

Помощь в написании Lua-плагина

Post by Majestio »

buniak_a_h, огромное спасибо!!!
Буду разбираться.
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

Помощь в написании Lua-плагина

Post by buniak_a_h »

Majestio wrote: Sat 11 Apr, 2020 07:31 Я не фанат "плагино-писания", просто уже давно нужна одна функциональность от редактора
На самом деле я не думаю, что кто-нить будет писать специализированный плагин, потребовавшийся одному человеку. Тем более, что описанное Вами вполне реализуется макросом. Так что мне кажется, Вы не туда написали.
User avatar
Majestio
Posts: 32
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 2 times

Помощь в написании Lua-плагина

Post by Majestio »

buniak_a_h, да да, все верно - я должен был в разделе макросов спросить. Ошибся.
Shmuel
Posts: 6401
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 401 times

Помощь в написании Lua-плагина

Post by Shmuel »

Есть готовые плагины, делающие нечто подобное. Может быть и скрипты тоже.
Например, можно попробовать https://plugring.farmanager.com/plugin.php?pid=974&l=ru
Если хорошо поищете, наверняка ещё что-нибудь найдётся.
Это я не к тому, чтобы отбить у вас охоту сделать что-то своё, но познакомиться с существующими изделиями не помешает.
User avatar
Majestio
Posts: 32
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 2 times

Помощь в написании Lua-плагина

Post by Majestio »

Shmuel wrote: Sat 11 Apr, 2020 09:14Это я не к тому, чтобы отбить у вас охоту сделать что-то своё, но познакомиться с существующими изделиями не помешает.
Посмотрел плагин выше - нет, не то. Тем более, там реальный плагин (не скрипт), править такое - только тратить время. Я когда-то, со времен Far 1.6 плотно сидел на написании плагинов, по работе надо было. Сейчас, с поддержкой Lua, считаю что для написания "живого" плагина нужно еще постараться найти "тему", большинство может и должно решаться скриптами.

Ну а по моей задаче ... уверен, что ее скриптом порешаю с "малой кровью". Хотя и Lua толком не знаю, так экспериментировал малеха.
User avatar
Majestio
Posts: 32
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 2 times

Помощь в написании Lua-плагина

Post by Majestio »

попутно частный вопрос)
Мне нужно получить полный путь к моему макро, который я пишу. Я нашел решение:

Code: Select all

local CurPath = far.PluginStartupInfo().ModuleDir..'scripts\\EditorTools'
Но это явный костыль. За счет забитого явно 'scripts\\EditorTools'. А как найти правильно полный путь? Без привязки к моему 'EditorTools'?
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

Помощь в написании Lua-плагина

Post by buniak_a_h »

Вне функций ... - это путь к файлу с макросом.
User avatar
Majestio
Posts: 32
Joined: Mon 22 Aug, 2016 08:58
Has thanked: 2 times

Помощь в написании Lua-плагина

Post by Majestio »

buniak_a_h, упс ... немного не понял :( Покажи, плс, правильный код.
Если что, мне надо как-то "адресоваться" к моему конфигу "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.
Post Reply

Return to “Нужна помощь”