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

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

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

Post by John Doe »

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

Таким образом, в макросах сейчас доступны:
  • Стандартные функции и библиотеки Lua.
  • В фаре используется LuaJIT (обсуждение), что (в частности) даёт доступ к библиотеке FFI (обсуждение), и некоторые другие расширения.
  • "Надстройка" над Lua: MoonScript (Подробности и обсуждение)
  • Функции API плагинов, посредством библиотеки LuaFAR (см. luafar_manual.chm)
  • Функции старого макроязыка (API макросов) (Обновление)
    Актуальный мануал, отражающий после перехода на Lua: macroapi_manual.ru.chm.
    (Мануал весьма лаконичен, вместо описания функции старого макроязыка приведены ссылки на устаревший раздел )
См. также:
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Latest post of the previous page:

Идея: дополнительные параметры и возвращаемое значение для 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: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote: Wed 07 Nov, 2018 10:58 пока не уверен, что стоит на мантис поместить
Наверное стоит поместить.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

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

Code: Select all

Keys("CtrlQ",PPanel.FilePanel and "CtrlClear")
Можно ли рассчитывать, что такое поведение Keys сохранится, или же лучше избегать подобного использования?
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

Никаких причин менять это поведение не вижу.
Но как общий подход - всё, что не указано явно в документации, когда-нибудь может измениться.
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

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

Post by SUSim »

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

Или PPanel.FilePanel and "CtrlClear" лучше обернуть в функцию которая возвращает стринг?
SimSU ··· ·· -- ··· ··-
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

SUSim wrote: Wed 14 Nov, 2018 16:46 Не понял, а где тут аргумент не-строка?
Если PPanel.FilePanel==false, то значение 2-го аргумента = false (то есть булевая величина).
Denis
Posts: 1444
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 10 times
Been thanked: 5 times

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

Post by Denis »

В свете последних изменений сломался https://github.com/trexinc/evil-programmers LuaEditorSettingsCore,
это попытка включить подсветку diff и промотать к концу файла:

Code: Select all

╔══════════════════════════════════════════════════ Error ══════════════════════════════════════════════════╗
║ C:\MyUsers\programs\Far\x64\Plugins\Standard\luamacro\LuaMacro.dll:                                       ║
║ ...s\Far\x64\Profile\Macros\scripts\editorsettingscore.moon:511: bad argument #1 to 'len' (string         ║
║ expected, got nil)                                                                                        ║
║ stack traceback:                                                                                          ║
║    [builtin:len]: in function 'len'                                                                       ║
║    ...s\Far\x64\Profile\Macros\scripts\editorsettingscore.moon:511: in function 'Highlite'                ║
║    ...s\Far\x64\Profile\Macros\scripts\editorsettingscore.moon:834: in function 'action'                  ║
║    ...ers\programs\Far\x64\Plugins\Standard\luamacro\utils.lua:210: in function <...ers\programs\Far\x64\ ║
║ Plugins\Standard\luamacro\utils.lua:183>                                                                  ║
╟───────────────────────────────────────────────────────────────────────────────────────────────────────────╢
║                                                  { OK }                                                   ║
╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════╝
Last edited by Denis on Sun 01 Sep, 2019 18:45, edited 1 time in total.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

С moonscript проблема - показывает ошибку на 511-й строке, а всего в файле 474 строки.
Полагаю, автор быстрее меня разберётся.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Code: Select all

shmuel 19.10.2019 18:22:32 +0200 - build 5490

1. Panel.Item(X,Idx,8) и Panel.Item(X,Idx,10) при невалидном Idx возвращали 0, теперь false.
https://api.farmanager.com/ru/macro/macrocmd/prop_func/panels.html wrote:

Code: Select all

8	Number	"Выделен?"
10	Number	SortGroup
8 - невалиндный Idx теперь не отличается от состояния "не выделен"
10 - тут аналогично, плюс ещё вопрос: физический смысл значения кто-то может объяснить?
(в документации number, а по факту boolean, но вероятно так надо)
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Code: Select all

22	Var	Значение Custom-колонки
Всегда пустая строка, вероятно не адаптировано для текущего апи колонок.
Last edited by John Doe on Mon 21 Oct, 2019 08:55, edited 1 time in total.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote: Mon 21 Oct, 2019 08:21 8 - невалиндный Idx теперь не отличается от состояния "не выделен"
Это так, но это был недокументированный артефакт, поддерживать который только для свойства номер 8 (ибо для прочих свойств такой особенности нет) не имело смысла.
John Doe wrote: Mon 21 Oct, 2019 08:21 10 - тут аналогично, плюс ещё вопрос: физический смысл значения кто-то может объяснить?
(в документации number, а по факту boolean, но вероятно так надо)
Уже снова number (билд 5493). То, что раньше было boolean - это моя давнишняя ошибка, вследствие невникания или спешки. Удивительно, что в течение 7 лет это никому не мешало.
John Doe wrote: Mon 21 Oct, 2019 08:51 Код: Выделить всё

22 Var Значение Custom-колонки

Всегда пустая строка, вероятно не адаптировано для текущего апи колонок.
Это на мантис. Сейчас нет времени разбираться.
Last edited by Shmuel on Mon 21 Oct, 2019 10:06, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Shmuel wrote: Mon 21 Oct, 2019 09:56 Это так, но это был недокументированный артефакт, поддерживать который только для свойства номер 8 (ибо для прочих свойств такой особенности нет) не имело смысла.
Т.е. это исправлять не планируется? (Например nil возвращать вместо false)
Shmuel wrote: Mon 21 Oct, 2019 09:56 Уже снова number
А что это за значение? Номер группы?
Shmuel wrote: Mon 21 Oct, 2019 09:56 Это на мантис. Сейчас нет времени разбираться.
https://bugs.farmanager.com/view.php?id=3746
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

mf.serialize wrote:

Code: Select all

	При сохранении таблиц будут сохраняться:
	- ключи типов: `number`, `string`, `boolean`, `table`
	- значения типов: `number`, `string`, `boolean`, `table`, `int64`
Неподдерживаемые ключи/значения игнорируются.
Имхо в большинстве случаев было бы правильнее падать с ошибкой.
И для тех гипотетических случаев, когда действительно допустимо молча игнорировать - можно добавить флажок к аргументам.

Edit:
msave - аналогично.

И мне кажется допустимо несколько упростить документацию, если в статьях msave/mload вместо подробного описания сослаться на serialize/deserialize

https://bugs.farmanager.com/view.php?id=3747
Last edited by John Doe on Mon 21 Oct, 2019 10:17, edited 2 times in total.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote: Mon 21 Oct, 2019 10:07 Т.е. это исправлять не планируется? (Например nil возвращать вместо false)
Невалидный Idx (и другие невалидные ситуации) могут быть для всех значений 3-го параметра. Какой смысл вводить эту фичу только для свойства 8 ?
И кроме того, "политика" такова, что развитием макро-API я не занимаюсь, а только исправлением багов. Хотя из этого правила могут быть исключения.
John Doe wrote: Mon 21 Oct, 2019 10:11 mf.serialize писал(а):
Мантис.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote: Mon 21 Oct, 2019 10:07 А что это за значение? Номер группы?
Это надо у Валентина спрашивать. Я поигрался, там могут быть значения 0,1...,10000,10001 - похоже, что выделено несколько диапазонов. Вы тоже можете поиграться.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Shmuel wrote: Mon 21 Oct, 2019 10:17 Невалидный Idx (и другие невалидные ситуации) могут быть для всех значений 3-го параметра. Какой смысл вводить эту фичу только для свойства 8 ?
Необязательно только для 8.
Можно в таких случах возвращать nil для всех.

https://bugs.farmanager.com/view.php?id=3748
Last edited by John Doe on Mon 21 Oct, 2019 10:55, edited 1 time in total.
Post Reply

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