Page 25 of 40

LuaMacro — Lua как язык макросов

Posted: Mon 16 Jul, 2012 13:44
by John Doe
Проект Spring (обсуждение) влился в стабильную версию Far Manager 3.0.

Таким образом, в макросах сейчас доступны:
  • Стандартные функции и библиотеки Lua.
  • В фаре используется LuaJIT (обсуждение), что (в частности) даёт доступ к библиотеке FFI (обсуждение), и некоторые другие расширения.
  • "Надстройка" над Lua: MoonScript (Подробности и обсуждение)
  • Функции API плагинов, посредством библиотеки LuaFAR (см. luafar_manual.chm)
  • Функции старого макроязыка (API макросов) (Обновление)
    Актуальный мануал, отражающий после перехода на Lua: macroapi_manual.ru.chm.
    (Мануал весьма лаконичен, вместо описания функции старого макроязыка приведены ссылки на устаревший раздел )
См. также:

Re: LuaMacro — Lua как язык макросов

Posted: Tue 17 Jun, 2014 14:49
by John Doe

Latest post of the previous page:

Shmuel wrote:
John Doe wrote:А для чего может понадобиться воссоздавать виртуальную машину?
Это примерно соответствует полной перезагрузке плагина. То-есть, начинаем с чистого листа.
В другой аппликации у меня это уже много лет, и практика показала, что пользуюсь.
Конкретные примеры - отладка при изменениях в самом плагине, замена lpeg.dll и т.д.
Сейчас после такой перезагрузки не выполняются макросы RunAfterFARStart, так и задумано?

И интересно, почему это сделано переменной, а не спецфункцией?

Re: LuaMacro — Lua как язык макросов

Posted: Tue 17 Jun, 2014 14:54
by Shmuel
John Doe wrote:Сейчас после такой перезагрузки не выполняются макросы RunAfterFARStart, так и задумано?

И интересно, почему это сделано переменной, а не спецфункцией?
1. RunAfterFARStart как бы ассоциировано со стартом Фара, а не плагина. Но вы заронили у меня сомнения.
2. Это ещё может измениться. Дело в том, что при вызове этой спецфункции никаких немедленных действий всё равно бы не производилось, разве что сохранение её параметров.

Re: LuaMacro — Lua как язык макросов

Posted: Thu 26 Jun, 2014 09:30
by John Doe
build 3962
Windows XP x86

Удаляю файл дерева, запускаю lua:mmode(1,0) Keys "CtrlT Tab" far.Show(Area.Current)
Ожидаю что сообщение будет выведено после открытия дерева.
В реальности сразу выводится nil, и после закрытия сообщения сканирование дерева продолжается.
Что не так?

Re: LuaMacro — Lua как язык макросов

Posted: Thu 26 Jun, 2014 09:42
by Shmuel
John Doe wrote:build 3962
[......]
Что не так?
Не знаю, что не так, но в билде 3.0.2796 (до перехода на Lua) наблюдается аналогичное поведение.

Re: LuaMacro — Lua как язык макросов

Posted: Thu 26 Jun, 2014 10:00
by John Doe
В билдах 3963+ (после mantis:002692) то же самое происходит с панелью QView, открытой для папки (заменить CtrlT на CtrlQ).
Вероятно корни проблемы общие.

Re: LuaMacro — Lua как язык макросов

Posted: Tue 01 Jul, 2014 10:07
by John Doe

Code: Select all

2. Возможность открытия редактора из диалога ошибки (пока только при загрузке
макросов, и то не во всех случаях).
Ошибки пока не репортить?

Re: LuaMacro — Lua как язык макросов

Posted: Tue 01 Jul, 2014 17:41
by Shmuel
John Doe wrote:

Code: Select all

2. Возможность открытия редактора из диалога ошибки (пока только при загрузке
макросов, и то не во всех случаях).
Ошибки пока не репортить?
Репортить.

Re: LuaMacro — Lua как язык макросов

Posted: Thu 03 Jul, 2014 10:32
by John Doe
При наличии такого обработчика первый за сессию вызов RESearch с помощью Plugin.Call приводит к падению LuaMacro.

Code: Select all

lua:Plugin.Call("F250C12A-78E2-4ABC-A784-3FDD3156E415","Search")
Возможно связано с тем, что первый вызов RESearch долгий (может занимать почти секунду).

Re: LuaMacro — Lua как язык макросов

Posted: Thu 03 Jul, 2014 11:12
by Shmuel
John Doe wrote:При наличии такого обработчика первый за сессию вызов RESearch с помощью Plugin.Call приводит к падению LuaMacro.

Code: Select all

lua:Plugin.Call("F250C12A-78E2-4ABC-A784-3FDD3156E415","Search")
То, что Фар говорит, что исключение в LuaMacro.dll, ещё не означает, что источник проблемы в ней. Попробуйте воспроизвести данную проблему, заменив RESearch на какой-либо другой плагин (желательно с открытыми исходниками).

Re: LuaMacro — Lua как язык макросов

Posted: Thu 03 Jul, 2014 11:47
by John Doe
Удалось ли вам воспроизвести с RESearch?

С другими плагинами не получается повторить.

Выяснил, что Plugin.Call непричём, то же самое происходит и c Keys: lua:Keys"F11 s Enter".
Но при ручном вызове из меню проблем нет.

Re: LuaMacro — Lua как язык макросов

Posted: Thu 03 Jul, 2014 12:02
by Shmuel
John Doe wrote:Удалось ли вам воспроизвести с RESearch?
[......]
Но при ручном вызове из меню проблем нет.
Удалось. И при ручном вызове тоже.

Re: LuaMacro — Lua как язык макросов

Posted: Thu 03 Jul, 2014 12:36
by Wave
Как вызвать макрос из макроса? Известны: filename, area\key\description\etc. В файле может быть несколько макросов и может не быть ничего кроме Macro {}
В энциклопедии есть варианты типа lua: @<filename> [<args>]
Но это немножечко не то. У меня есть куча макросов, частично написанных самим, больше скачанных с форума. Некоторые я так редко использую, что напрочь забываю хоткеи. Гораздо удобней забить их вызов в FarMenu.ini и Editor.Menu.lua. Но как?

P.s. собственное меню в этом случае гораздо удобней всех MacroBrowser’ов в разы.

Re: LuaMacro — Lua как язык макросов

Posted: Thu 03 Jul, 2014 12:42
by John Doe
Wave wrote:Как вызвать макрос из макроса?
Если файл с макросами лежит в scripts, то можно использовать eval(key,2)
Если нет, то вместо макросов можно оформить таблицу функций, поместить файл в modules, и вызывать с помощью require
собственное меню в этом случае гораздо удобней всех MacroBrowser’ов в разы.
MacroBrowser alt. тоже способен решить вашу задачу, с его помощью легко получить список макросов по имени файла

Re: LuaMacro — Lua как язык макросов

Posted: Thu 03 Jul, 2014 13:05
by Wave
Спасибо, eval(key,2) — то, что надо. Я за него забыл, потому что думал, что он может только eval([some code]).

Список макросов по имени файла — это, конечно, хорошо, но сильно не то. Имя файла, как и key, я знаю на момент установки макроса и внесения его себе в меню. Когда такой макрос мне нужен, а я уже забыл его хоткей, имя файла при этом я тоже помню очень приблизительно. И через MacroBrowser alt. мне его придётся искать, а потом уже вызывать. Тогда как своё меню — это, например, в редакторе: «Apps → Настройки редактора → Включить автосвёртку» или «Apps → Сервис → Spellcheck» или «Apps → Строки → Дублировать строку».
Такое вот. Функции сгруппированы по подменю удобным мне способом. Всё на виду, на всё про всё три нажатия хоткеев, при этом в каждый момент на экране небольшой список, в котором нужный пункт находится взглядом моментально.

Re: LuaMacro — Lua как язык макросов

Posted: Thu 03 Jul, 2014 13:07
by John Doe
Hint: имя файла учитывает путь, поэтому можно получить меню со списком всех макросов, размещённых в заданной папке.
Т.е. редкие макросы вы можете собрать в одной папке.
Или распределить по группам согласно функциональности.

P.S.
Идея вообще интересная, подумаю, может быть есть смысл дать возможность назначать макросам таги, и таким образом дополнительно их группировать.

Re: LuaMacro — Lua как язык макросов

Posted: Fri 04 Jul, 2014 21:58
by John Doe
Дано:
Запускаем фар, открываем любой файл на просмотр (здесь и далее отменяя все всплывающие сообщения).
С помощью F6 переключаемся в редактор.
Закрываем редактор по Esc.

Фар падает.
Воспроизводится и на довольно старых билдах.

LuaMacro непричём? На мантис?