Page 33 of 36

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.
    (Мануал весьма лаконичен, вместо описания функции старого макроязыка приведены ссылки на устаревший раздел )
См. также:

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

Posted: Mon 20 Nov, 2017 16:25
by John Doe

Latest post of the previous page:

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

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

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

Кстати, в настоящий момент в случае успеха Plugin.Load возвращает не 1, а 25953664

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

Posted: Mon 20 Nov, 2017 17:08
by Shmuel
1. Уже упомянуто.
2. Не будем уже теперь ломать API.
3. Возвращается описатель плагина (число может быть разное). Это тянется ещё с времён старого макроязыка.

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

Posted: Mon 20 Nov, 2017 18:00
by John Doe
Shmuel wrote:
Mon 20 Nov, 2017 17:08
Не будем уже теперь ломать API.
Полагаю, в данном случае это бы не особо повредило, но спорить не буду.

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

Posted: Mon 20 Nov, 2017 21:47
by John Doe
Параметра Macros.CONVFMT в коде фара уже нет, только в macrotest.lua остался похоже.

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

Posted: Mon 20 Nov, 2017 21:58
by Shmuel
Несколько лет я пытался "идти в ногу" с изменениями в параметрах конфигурации, делая соответствующие изменения в macrotest.lua. В какой-то момент мне это надоело, и сейчас вызов test_Far_GetConfig() закомментирован.

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

Posted: Wed 22 Nov, 2017 11:58
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

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

Posted: Wed 22 Nov, 2017 12:11
by Shmuel
John Doe, заведите тикет, поместите эту информацию туда. В реальном времени не получится.

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

Posted: Mon 27 Nov, 2017 10:12
by John Doe
Panel.SetPath возвращает true/false, а не 1/0, как сказано в документации.
С последними изменениями не связано, в билде 5000 наблюдаю такое же поведение.

Учитывая давность, предлагаю просто отразить в документации.

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

Posted: Mon 27 Nov, 2017 10:55
by Shmuel
John Doe wrote:
Mon 27 Nov, 2017 10:12
предлагаю просто отразить в документации.
Предложение принято.

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

Posted: Tue 28 Nov, 2017 19:21
by John Doe

Code: Select all

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

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

Posted: Tue 28 Nov, 2017 19:38
by Shmuel
`10` тоже Boolean.

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

Posted: Tue 28 Nov, 2017 19:41
by John Doe
Причём всегда true, баг?

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

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

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

Posted: Tue 28 Nov, 2017 20:04
by John Doe
Во-первых boolean это действительно логично.
Во-вторых в фаре это уже много лет, не стоит менять.

В той документации, что правлю сейчас я -- исправить легко.

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

Posted: Tue 28 Nov, 2017 20:09
by Shmuel
John Doe wrote:
Tue 28 Nov, 2017 20:04
Во-первых boolean это действительно логично.
Там плохо получается: если индекс невалидный, то возвращается число 0.

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

Posted: Tue 28 Nov, 2017 20:23
by John Doe
А если возвращать число, то вообще нельзя будет определить некорректный индекс, так?

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

Posted: Tue 28 Nov, 2017 20:32
by Shmuel
Я рассматриваю Macro-API как legacy. Что-то такое, что оставлено для совместимости. Развивать его никогда не собирался и не собираюсь. Поэтому с моей точки зрения, вариант приведения в соответствие с документацией, как наименее времязатратный, является предпочтительным.