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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 11970
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 134 times

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

Post by John Doe » Mon 16 Jul, 2012 13:44

Проект Spring (обсуждение) влился в стабильную версию Far Manager 3.0.

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

Shmuel
Posts: 5574
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

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

Post by Shmuel » Thu 10 May, 2018 11:15

Latest post of the previous page:

John Doe wrote:
Thu 10 May, 2018 08:56
раньше в этих же целях использовал mf.postmacro
postmacro в общем-то почти не хуже для данного применения, но в случае нескольких вызовов postmacro, "деструкторы" будут вызываться в прямом хронологическом порядке, а в случае AddExitHandler - в обратном, что, по идее, более правильно.

P.S. Нет, postmacro для этого лучше не употреблять. Дело в том, что возможны ситуации, когда текущий макрос ещё не завершён, а уже запускается следующий (например, при выводе на экран диалога или меню). И вот этот следующий возьмёт да закроет файл, которым текущий ещё может пользоваться.
Last edited by Shmuel on Thu 10 May, 2018 11:36, edited 1 time in total.

User avatar
John Doe
Бюрократ
Posts: 11970
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 134 times

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

Post by John Doe » Sat 18 Aug, 2018 13:43

Code: Select all

local F = far.Flags
Event{
  group="ViewerEvent";
  filemask="test";
  action=function(ViewerID,Event)
    if Event==F.VE_CLOSE then far.Show(ViewerID) end
  end;
}
Возник вопрос по использованию filemask.
Для теста создал файл test, ожидаю что сообщение будет выводиться только при закрытии файла с этим именем.

Однако, кроме этого в нагрузку получаю срабатывание и при закрытии QView с любым файлом.

По шагам.
1. Захожу в папку, в которой заведомо отсутствуют файлы с заданной маской
2. CtrlQ CtrlQ
3. Наблюдаю сообщение

Кто виноват?

Shmuel
Posts: 5574
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

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

Post by Shmuel » Sat 18 Aug, 2018 18:16

При обработке события VE_CLOSE, вызванного вторым нажатием CtrlQ, VCTL_GETFILENAME() почему-то заканчивается неудачей.
При отсутствии имени файла LuaMacro считает, что сопоставление с маской состоялось успешно.
Кто виноват - затрудняюсь сказать.

User avatar
John Doe
Бюрократ
Posts: 11970
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 134 times

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

Post by John Doe » Sun 19 Aug, 2018 09:42

Shmuel wrote:
Sat 18 Aug, 2018 18:16
При отсутствии имени файла LuaMacro считает, что сопоставление с маской состоялось успешно.
Не будет ли правильнее, если в таких случаях LuaMacro будет считать что сопоставление не состоялось?

Update:
Проблемы оформил отдельно https://bugs.farmanager.com/view.php?id=3636, https://bugs.farmanager.com/view.php?id=3637
Last edited by John Doe on Sun 19 Aug, 2018 09:58, edited 1 time in total.

Shmuel
Posts: 5574
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

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

Post by Shmuel » Sun 19 Aug, 2018 12:21

John Doe wrote:
Sun 19 Aug, 2018 09:42
Не будет ли правильнее, если в таких случаях LuaMacro будет считать что сопоставление не состоялось?
Запишите отдельно на Мантис.

User avatar
John Doe
Бюрократ
Posts: 11970
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 134 times

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

Post by John Doe » Sat 25 Aug, 2018 08:09

В фаре запущенном как редактор/вьюер (ключи /v /e) не загружаются макросы на Desktop
Например, такой макрос даже не появится в списке MacroBrowser.

Кто виноват?

Shmuel
Posts: 5574
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

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

Post by Shmuel » Sat 25 Aug, 2018 08:54

John Doe wrote:
Sat 25 Aug, 2018 08:09
В фаре запущенном как редактор/вьюер (ключи /v /e) не загружаются макросы на Desktop
Пожалуйста поместите на Мантис.

P.S. Уже сделал (LuaMacro build 659).
Last edited by Shmuel on Sat 25 Aug, 2018 09:42, edited 1 time in total.

User avatar
John Doe
Бюрократ
Posts: 11970
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 134 times

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

Post by John Doe » Sat 25 Aug, 2018 11:40

Спасибо.
Аналогичный вопрос с макросами Grabber.
Реально таких не имею, но потенциально их тоже видимо надо загружать, вместо Other.

Shmuel
Posts: 5574
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

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

Post by Shmuel » Sat 25 Aug, 2018 11:43

John Doe wrote:
Sat 25 Aug, 2018 11:40
Аналогичный вопрос с макросами Grabber.
На мантис, желательно с примером.

User avatar
John Doe
Бюрократ
Posts: 11970
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 134 times

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

Post by John Doe » Sat 25 Aug, 2018 12:54

Ну мне не сложно конечно и на мантис, но речь о том же самом участке, который уже правился сегодня

Code: Select all

 local SomeAreaNames = {
   "other", "viewer", "editor", "dialog", "menu", "help", "dialogautocompletion",
--...
SomeAreaNames эта таблица как я понимаю определяет макрообласти, макросы которых загружаются когда фар запущен в режиме редактора/вьюера.
desktop уже есть, осталось добавить сюда grabber (вместо other, или в дополнение к нему).

Shmuel
Posts: 5574
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

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

Post by Shmuel » Sat 25 Aug, 2018 12:58

John Doe wrote:
Sat 25 Aug, 2018 12:54
Ну мне не сложно конечно и на мантис
Вот и хорошо, спасибо.

User avatar
John Doe
Бюрократ
Posts: 11970
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 134 times

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

Post by John Doe » Wed 07 Nov, 2018 10:58

Идея: дополнительные параметры и возвращаемое значение для mf.AddExitHandler (handler).

Code: Select all

mf.AddExitHandler (handler[,...])

Параметры:
  handler:  function

Возвращает:
  значения, переданные в ... (если есть)

Описание:
  1. Данная функция добавляет обработчик, который будет вызван по окончанию
     исполнения макроса.
     Обработчику будут переданы все аргументы, указанные в ... (если есть)
Цель: возможность использовать mf.AddExitHandler в выражениях.
Например:

Code: Select all

local settings = mf.AddExitHandler(function(s)s:Free()end, assert(far.CreateSettings("far")))
(пока не уверен, что стоит на мантис поместить)

Update: https://bugs.farmanager.com/view.php?id=3670
Last edited by John Doe on Thu 08 Nov, 2018 09:12, edited 1 time in total.

Shmuel
Posts: 5574
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

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

Post by Shmuel » Wed 07 Nov, 2018 17:20

John Doe wrote:
Wed 07 Nov, 2018 10:58
пока не уверен, что стоит на мантис поместить
Наверное стоит поместить.

User avatar
John Doe
Бюрократ
Posts: 11970
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 134 times

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

Post by John Doe » Wed 14 Nov, 2018 12:02

Функция Keys успешно игнорирует аргументы не-строки, что я иногда использую, заменяя конструкцию if/then/else на выражение.

Code: Select all

Keys("CtrlQ",PPanel.FilePanel and "CtrlClear")
Можно ли рассчитывать, что такое поведение Keys сохранится, или же лучше избегать подобного использования?

Shmuel
Posts: 5574
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

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

Post by Shmuel » Wed 14 Nov, 2018 12:30

Никаких причин менять это поведение не вижу.
Но как общий подход - всё, что не указано явно в документации, когда-нибудь может измениться.

User avatar
SUSim
Posts: 1508
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 8 times

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

Post by SUSim » Wed 14 Nov, 2018 16:46

Не понял, а где тут аргумент не-строка?
nil - которым может стать второй аргумент (правильнее: PPanel.FilePanel and "CtrlClear" or "")? так вроде lua нормально к такому относится.

Или PPanel.FilePanel and "CtrlClear" лучше обернуть в функцию которая возвращает стринг?
SimSU ··· ·· -- ··· ··-

Shmuel
Posts: 5574
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

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

Post by Shmuel » Wed 14 Nov, 2018 18:55

SUSim wrote:
Wed 14 Nov, 2018 16:46
Не понял, а где тут аргумент не-строка?
Если PPanel.FilePanel==false, то значение 2-го аргумента = false (то есть булевая величина).

Post Reply

Return to “Обсуждение макросов”