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:

Изменения API в сравнении с макроязыком

Не упомянуто, что Plugin.Exist возвращает true/false.

Насчёт Plugin.Load/Plugin.Unload вопрос: им бы тоже логично было возвращать логическое значение.

Кстати, в настоящий момент в случае успеха Plugin.Load возвращает не 1, а 25953664
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 »

1. Уже упомянуто.
2. Не будем уже теперь ломать API.
3. Возвращается описатель плагина (число может быть разное). Это тянется ещё с времён старого макроязыка.
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 20 Nov, 2017 17:08Не будем уже теперь ломать API.
Полагаю, в данном случае это бы не особо повредило, но спорить не буду.
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 »

Параметра Macros.CONVFMT в коде фара уже нет, только в macrotest.lua остался похоже.
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 »

Несколько лет я пытался "идти в ногу" с изменениями в параметрах конфигурации, делая соответствующие изменения в macrotest.lua. В какой-то момент мне это надоело, и сейчас вызов test_Far_GetConfig() закомментирован.
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 »

В "Изменениях" не упомянута функция eval.
Помимо описанных в мануале расширений вижу следующее:
  • коды 1-10 не возвращаются, в случае ошибки всегда 11 (а подробную информацию можно получить в режиме 3)
  • пустая макропоследовательность не считается ошибкой, соответственно код 12 тоже не возвращается.
  • в режиме 3 не соблюдается указанный в Энциклопедии формат, возвращается сообщение от loadstring
  • Это утверждение более не соответствует действительности:
    Локальные переменные - общие для текущего исполняемого макроса и макропоследовательности, исполняемой функцией eval.
    На самом деле как-то так:
    При выполнении макропоследовательности для неё будет установлено окружение текущего исполняемого макроса, но не локальные переменные.
Код возврата -1 в актуальных условиях представляется лишним, вместо него логично вызывать ошибку времени выполнения.

Кроме того, мануал стоит дополнить замечанием о том, что все режимы, за исключением 2 (запуск макроса по названию клавиши), существуют лишь из соображений обратной совместимости, и рациональнее использовать штатные функции языка loadstring/loadfile/dofile/mooonscript.loadstring/etc

Edit:
https://bugs.farmanager.com/view.php?id=3556
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, заведите тикет, поместите эту информацию туда. В реальном времени не получится.
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 »

Panel.SetPath возвращает true/false, а не 1/0, как сказано в документации.
С последними изменениями не связано, в билде 5000 наблюдаю такое же поведение.

Учитывая давность, предлагаю просто отразить в документации.
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 27 Nov, 2017 10:12предлагаю просто отразить в документации.
Предложение принято.
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

`V=Panel.Item(panelType,itemIdx,Property)`
...
	В зависимости от запрашиваемого `Property` функция возвращает следующие свойства элемента:
...
	`8`
	:	`number`
	:	"Выделен?"
На самом деле boolean.
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 »

`10` тоже 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 »

Причём всегда true, баг?
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 »

У меня для элемента с индексом 1 возвращается false.
Может быть и баг. Я этой функцией ещё никогда не пользовался.
А насчёт противоречия с документацией (number / boolean), то проще в Фаре исправить, чем в документации.
Last edited by Shmuel on Tue 28 Nov, 2017 19:56, 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 »

Во-первых boolean это действительно логично.
Во-вторых в фаре это уже много лет, не стоит менять.

В той документации, что правлю сейчас я -- исправить легко.
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: Tue 28 Nov, 2017 20:04Во-первых boolean это действительно логично.
Там плохо получается: если индекс невалидный, то возвращается число 0.
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 »

А если возвращать число, то вообще нельзя будет определить некорректный индекс, так?
Post Reply

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