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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 12463
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 198 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: 5900
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 223 times

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

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

Latest post of the previous page:

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

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

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

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

Shmuel wrote:
Tue 28 Nov, 2017 20:32
Развивать его никогда не собирался и не собираюсь.
Разве я такое предлагаю?
Наоборот, оставить как есть.

Может даже у кого макросы на это завязаны.

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

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

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

John Doe wrote:
Tue 28 Nov, 2017 20:46
Наоборот, оставить как есть.
Пусть будет как есть, а вы в новой документации это отразите адекватно. Если же с SortGroup выяснится, что это баг - тогда на мантис.

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

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

Post by John Doe » Mon 04 Dec, 2017 12:31

Вызов SetPath (api.lua) обёрнут в pcall.
Не очень понял зачем, ведь вызов "пользовательского" кода внутри не предполагается, а скрывать потенциальные баги апи только во вред.

User avatar
zg
zero-gravity
Posts: 5629
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 105 times
Contact:

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

Post by zg » Mon 04 Dec, 2017 20:25

это легаси, есть конкретные проблемы, пишите, нет, не надо создавать информационный шум.

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

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

Post by John Doe » Tue 05 Dec, 2017 07:53

Это вместо ответа на простой вопрос?
ОК.

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

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

Post by John Doe » Fri 16 Mar, 2018 09:59

Небольшая неточность:
Object.Selected
в списках/меню: не имеет смысла (всегда 1, если меню не пустое).
(Под 1 понимается true)

На самом же деле в меню всегда возвращается false, независимо от того пустое оно или нет.
Предлагаю исправить в документации.

Хотя интуитивно Selected в меню вполне осмысленно, true могло бы означать пометку.

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

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

Post by John Doe » Fri 16 Mar, 2018 10:24

Code: Select all

N=Plugin.Load(DllPath[,ForceLoad])
Загрузить плагин с именем dll-модуля DllPath.
Если указан ForceLoad, отличный от 0, то плагин загружается сразу в память.
Стоит акцентировать, что ForceLoad должен быть числом.
Если указан ForceLoad (число, отличное от 0), то плагин загружается сразу в память.

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

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

Post by Shmuel » Fri 16 Mar, 2018 10:52

John Doe wrote:
Fri 16 Mar, 2018 09:59
На самом же деле в меню всегда возвращается false, независимо от того пустое оно или нет.
Предлагаю исправить в документации.
Это сломалось в коде (билд 2897), значит и исправлять надо в коде. Если считаете нужным - на Мантис.

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

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

Post by John Doe » Fri 16 Mar, 2018 11:35

Shmuel wrote:
Fri 16 Mar, 2018 10:52
Если считаете нужным - на Мантис.
В исправлении кода практического смысла не вижу.
Проще исправить документацию: оставить "не имеет смысла", не уточняя значения.

А вот если есть шанс на изменение поведения, то я бы запостил:
true могло бы означать пометку

User avatar
zg
zero-gravity
Posts: 5629
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 105 times
Contact:

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

Post by zg » Fri 16 Mar, 2018 12:28

John Doe wrote:
Fri 16 Mar, 2018 09:59
На самом же деле в меню всегда возвращается false, независимо от того пустое оно или нет.
связано это с тем, что для листбокса в диалоге Object.Selected всегда возвращает 0. подозреваю, так было всегда. а когда сделали меню как диалог+листбокс — в меню стало так же. можно вернуть в меню как было и сделать в листбоксе, как в меню.

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

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

Post by John Doe » Fri 16 Mar, 2018 13:29

Я не вижу практического смысла в том, чтобы Object.Selected зависело бы от того пустой список или нет, до тех пор пока сказано, что для списков и меню значение "не имеет смысла".
Поэтому и предлагаю просто уточнить документацию.

User avatar
HaRT
Moderator
Posts: 9108
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 164 times

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

Post by HaRT » Fri 16 Mar, 2018 14:20

John Doe wrote:
Fri 16 Mar, 2018 09:59
интуитивно Selected в меню вполне осмысленно, true могло бы означать пометку.
Поддерживаю.
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

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

Post by John Doe » Thu 10 May, 2018 08:28

По поводу новой функции AddExitHandler.

Code: Select all

Пример применения:
  local fp = assert(io.open("some file.txt"))
  mf.AddExitHandler(function() fp:close() end)
  -- use fp; return from multiple places; do not care about closing fp
Пример мне кажется неудачный, ведь в случае ошибки закрывать файл не требуется.
Более того, поскольку значение fp будет равно nil, и попытка индексации должна вызывать ошибку, однако при исполнении данного примера ошибок не наблюдается.
Почему?

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

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

Post by Shmuel » Thu 10 May, 2018 08:40

В случае ошибки открытия файла скрипт прекратит исполнение при вызове функции assert, при этом mf.AddExitHandler не будет вызвана.
Если же файл открылся, то, независимо от того, случится в дальнейшем ошибка или нет, файл будет закрыт по окончанию исполнения макроса.

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

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

Post by John Doe » Thu 10 May, 2018 08:56

Shmuel wrote:
Thu 10 May, 2018 08:40
при этом mf.AddExitHandler не будет вызвана
И верно..

mf.AddExitHandler действительно будет удобна (раньше в этих же целях использовал mf.postmacro)

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

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

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

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.

Post Reply

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