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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 12293
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 165 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.
    (Мануал весьма лаконичен, вместо описания функции старого макроязыка приведены ссылки на устаревший раздел )
См. также:

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

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

Post by John Doe » Mon 20 Nov, 2017 16:25

Latest post of the previous page:

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

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

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

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

Shmuel
Posts: 5791
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

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

Post by Shmuel » Mon 20 Nov, 2017 17:08

1. Уже упомянуто.
2. Не будем уже теперь ломать API.
3. Возвращается описатель плагина (число может быть разное). Это тянется ещё с времён старого макроязыка.

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

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

Post by John Doe » Mon 20 Nov, 2017 18:00

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

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

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

Post by John Doe » Mon 20 Nov, 2017 21:47

Параметра Macros.CONVFMT в коде фара уже нет, только в macrotest.lua остался похоже.

Shmuel
Posts: 5791
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

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

Post by Shmuel » Mon 20 Nov, 2017 21:58

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

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

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

Post by John Doe » Wed 22 Nov, 2017 11:58

В "Изменениях" не упомянута функция 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: 5791
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

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

Post by Shmuel » Wed 22 Nov, 2017 12:11

John Doe, заведите тикет, поместите эту информацию туда. В реальном времени не получится.

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

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

Post by John Doe » Mon 27 Nov, 2017 10:12

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

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

Shmuel
Posts: 5791
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

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

Post by Shmuel » Mon 27 Nov, 2017 10:55

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

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

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

Post by John Doe » Tue 28 Nov, 2017 19:21

Code: Select all

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

Shmuel
Posts: 5791
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

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

Post by Shmuel » Tue 28 Nov, 2017 19:38

`10` тоже Boolean.

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

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

Post by John Doe » Tue 28 Nov, 2017 19:41

Причём всегда true, баг?

Shmuel
Posts: 5791
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

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

Post by Shmuel » Tue 28 Nov, 2017 19:56

У меня для элемента с индексом 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: 12293
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 165 times

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

Post by John Doe » Tue 28 Nov, 2017 20:04

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

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

Shmuel
Posts: 5791
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

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

Post by Shmuel » Tue 28 Nov, 2017 20:09

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

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

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

Post by John Doe » Tue 28 Nov, 2017 20:23

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

Shmuel
Posts: 5791
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

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

Post by Shmuel » Tue 28 Nov, 2017 20:32

Я рассматриваю Macro-API как legacy. Что-то такое, что оставлено для совместимости. Развивать его никогда не собирался и не собираюсь. Поэтому с моей точки зрения, вариант приведения в соответствие с документацией, как наименее времязатратный, является предпочтительным.

Post Reply

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