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

Latest post of the previous page:

John Doe wrote: После этого макросы не работают (lm:load не помогает).
У меня после устранения ошибки lm:load нормально всё загружает.
Но репорт - валидный, буду смотреть.
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: У меня после устранения ошибки lm:load нормально всё загружает.
Если ошибка в _macroinit.lua, то не загружает.
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Ликбез по Lua

Post by iva »

Хочу обратиться к параметрам скрипта. Написал скрипт в файле param.lua следующего содержания

Code: Select all

local arg1, arg2 = ...
local narg = select("#",...)
far.Show(narg, arg1, arg2)
Запускаю командой lua: @param.lua a,b
Получаю 2, nil, nil
Подскажите, что я не так делаю.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Ликбез по Lua

Post by Shmuel »

iva wrote: Подскажите, что я не так делаю.
Вы передаёте скрипту несуществующие глобальные переменные a и b, их значения nil, всё нормально.
Чтобы получить то, что вы хотите, надо передавать a и b, заключёнными в кавычки.
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Ликбез по Lua

Post by iva »

Спасибо. Действительно, все по инструкции. Как это я сглупил.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

В Фаре (3.0.4391 x86) с единственным плагином LuaMacro.dll и ранее установленными макросами запускаю макрос macrotest.lua и получаю картинку:

Code: Select all

╔══════════════════ Error ══════════════════╗
║ U:\FarLce\pluginsN\luamacro\LuaMacro.dll: ║
║ error in error handling                   ║
╟───────────────────────────────────────────╢
║                  { OK }                   ║
╚═══════════════════════════════════════════╝
После неё в левом верхнем углу панелей Фара остаётся висеть значок 'P' на зелёном фоне. При этом Фар работает как будто бы значка и нет.

Когда же я в \Profile\Macros\scripts\ оставляю единственным только макрос-пускач macrotest(Shmuel)tst-she.lua для запуска macrotest.lua, то при его запуске попеременно с нерегулярной последовательностью наблюдаю следующие картинки:

Code: Select all

╔═════════════════════════════ LuaMacro ═════════════════════════════╗
║ U:\FarLce\pluginsN\luamacro\macrotest.lua:204: assertion failed!   ║
║ stack traceback:                                                   ║
║    [C]: in function 'assert'                                       ║
║    U:\FarLce\pluginsN\luamacro\macrotest.lua:204: in function      ║
║ 'test_clip'                                                        ║
║    U:\FarLce\pluginsN\luamacro\macrotest.lua:603: in function      ║
║ 'test_mf'                                                          ║
║    U:\FarLce\pluginsN\luamacro\macrotest.lua:1625: in function     ║
║ 'test_all'                                                         ║
║    ...rLce\Profile\Macros\scripts\macrotest(Shmuel)tst-she.lua:13: ║
║  in function <...rLce\Profile\Macros\scripts\macrotest(Shmuel)tst- ║
║ she.lua:11>                                                        ║
╟────────────────────────────────────────────────────────────────────╢
║                               { OK }                               ║
╚════════════════════════════════════════════════════════════════════╝

╔═════════════════════════════ LuaMacro ═════════════════════════════╗
║ U:\FarLce\pluginsN\luamacro\macrotest.lua:1404: assertion failed!  ║
║ stack traceback:                                                   ║
║    [C]: in function 'assert'                                       ║
║    U:\FarLce\pluginsN\luamacro\macrotest.lua:1404: in function     ║
║ 'test_AdvControl_Window'                                           ║
║    U:\FarLce\pluginsN\luamacro\macrotest.lua:1495: in function     ║
║ 'test_AdvControl'                                                  ║
║    U:\FarLce\pluginsN\luamacro\macrotest.lua:1582: in function     ║
║ 'test_luafar'                                                      ║
║    U:\FarLce\pluginsN\luamacro\macrotest.lua:1638: in function     ║
║ 'test_all'                                                         ║
║    ...rLce\Profile\Macros\scripts\macrotest(Shmuel)tst-she.lua:13: ║
║  in function <...rLce\Profile\Macros\scripts\macrotest(Shmuel)tst- ║
║ she.lua:11>                                                        ║
╟────────────────────────────────────────────────────────────────────╢
║                               { OK }                               ║
╚════════════════════════════════════════════════════════════════════╝
Значок 'P' после них не остаётся.
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
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 »

luamacro.lua: 222/501
Так и задумано, что переменная status глобальна?
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
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 »

sToLp wrote:В Фаре (3.0.4391 x86) с единственным плагином LuaMacro.dll и ранее установленными макросами запускаю макрос macrotest.lua и получаю картинку:

Code: Select all

╔══════════════════ Error ══════════════════╗
║ U:\FarLce\pluginsN\luamacro\LuaMacro.dll: ║
║ error in error handling                   ║
╟───────────────────────────────────────────╢
║                  { OK }                   ║
╚═══════════════════════════════════════════╝
После неё в левом верхнем углу панелей Фара остаётся висеть значок 'P' на зелёном фоне.
Про macrotest.lua ничего не скажу, но error in error handling вместо нормальных сообщений у меня тоже начала появляться после установки http://forum.farmanager.com/viewtopic.php?f=15&t=9611
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
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 »

К luamacro претензий нет, я лишь предположил причину странного сообщения у sToLp.

Update
Причина сбоя в том, что модуль пытается использовать функцию print, которая у нас беспардонно переопределена.
(Как обойти проблему описал в первом посте соответствующей темы)
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: которая у нас беспардонно переопределена.
Полагаю, что не беспардонно, а вполне осмысленно.
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:
John Doe wrote: которая у нас беспардонно переопределена.
Полагаю, что не беспардонно, а вполне осмысленно.
Будь моя воля, то я бы переосмыслил, т.к. из-за совпадения имени со штатной функцией 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 »

У меня - редко (даже не помню, когда было в последний раз).
Но дело не в этом: в процессе перехода на 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 »

Я взял себе за правило в макросах всегда использовать mf.print, на всякий случай.

И есть связанный вопрос, по следующему фрагменту из api.lua:

Code: Select all

_G.eval, _G.msgbox, _G.prompt = mf.eval, mf.msgbox, mf.prompt

mf.Keys, mf.exit, mf.print, mf.printf = _G.Keys, _G.exit, _G.print, _G.printf
Все 7 функций дублируются в mf и в _G.
Однако любопытно почему для eval,msgbox,prompt "первична" таблица _G, а для прочих — mf?

P.S.
Вопрос конечно отвлечённый, но не совсем, например функция printf использует _G.print, что будет иметь значение, пожелай я для каких-то целей переопределить _G.print
Post Reply

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