zg 30.09.2012 03:26:20 +0200 - build 2851
1. слияние с проектом Spring (https://github.com/shmuz/Spring).
в связи с этим вместо встроенного макроязыка используется скриптовый язык Lua 5.1 (http://www.lua.org).
после перехода на Lua: macroapi_manual.ru.chm.
(Мануал весьма лаконичен, вместо описания функции старого макроязыка приведены ссылки на устаревший раздел
local arg1, arg2 = ...
local narg = select("#",...)
far.Show(narg, arg1, arg2)
Запускаю командой lua: @param.lua a,b
Получаю 2, nil, nil
Подскажите, что я не так делаю.
Ликбез по Lua
Posted: Sat 06 Jun, 2015 12:28
by Shmuel
iva wrote: Подскажите, что я не так делаю.
Вы передаёте скрипту несуществующие глобальные переменные a и b, их значения nil, всё нормально.
Чтобы получить то, что вы хотите, надо передавать a и b, заключёнными в кавычки.
Ликбез по Lua
Posted: Sat 06 Jun, 2015 12:39
by iva
Спасибо. Действительно, все по инструкции. Как это я сглупил.
LuaMacro — Lua как язык макросов
Posted: Sun 14 Jun, 2015 10:12
by sToLp
В Фаре (3.0.4391 x86) с единственным плагином LuaMacro.dll и ранее установленными макросами запускаю макрос macrotest.lua и получаю картинку:
╔══════════════════ Error ══════════════════╗
║ U:\FarLce\pluginsN\luamacro\LuaMacro.dll: ║
║ error in error handling ║
╟───────────────────────────────────────────╢
║ { OK } ║
╚═══════════════════════════════════════════╝
После неё в левом верхнем углу панелей Фара остаётся висеть значок 'P' на зелёном фоне. При этом Фар работает как будто бы значка и нет.
Когда же я в \Profile\Macros\scripts\ оставляю единственным только макрос-пускач macrotest(Shmuel)tst-she.lua для запуска macrotest.lua, то при его запуске попеременно с нерегулярной последовательностью наблюдаю следующие картинки:
╔═════════════════════════════ 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' после них не остаётся.
LuaMacro — Lua как язык макросов
Posted: Sun 14 Jun, 2015 10:48
by Shmuel
К сожалению, у меня ничего из этого не воспроизводится.
Да, тест клипборда может выдавать ошибку, если запущена какая-либо аппликация, "мониторящая" клипборд. У меня есть такие аппликации, и этот эффект мне давно известен, хотя исследовать его поглубже руки не доходят.
LuaMacro — Lua как язык макросов
Posted: Tue 16 Jun, 2015 10:05
by John Doe
luamacro.lua: 222/501
Так и задумано, что переменная status глобальна?
LuaMacro — Lua как язык макросов
Posted: Tue 16 Jun, 2015 10:42
by Shmuel
Спасибо за репорт.
LuaMacro — Lua как язык макросов
Posted: Thu 18 Jun, 2015 12:14
by John Doe
sToLp wrote:В Фаре (3.0.4391 x86) с единственным плагином LuaMacro.dll и ранее установленными макросами запускаю макрос macrotest.lua и получаю картинку:
Пример для воспроизведения:lua:mf.postmacro(function()local f = loadstring("error()"); f()end)
Если же изменить код на равнозначный lua:mf.postmacro(function()loadstring("error()")()end) (или lua:mf.postmacro(loadstring("error()"))), то выдаётся понятное сообщение
╔═══════════════════════════════════════════════ LuaMacro ═══════════════════════════════════════════════╗
║ (error object is not a string) ║
║ Stack Traceback ║
║ =============== ║
║ (1) main chunk of [string "error()"] at line 1 ║
║ (2) Lua function '(anonymous)' at line 1 of chunk '"mf.postmacro(function()loadstring("error()")(..."] ║
║ ' ║
║ ║
╟────────────────────────────────────────────────────────────────────────────────────────────────────────╢
║ OK ║
╚════════════════════════════════════════════════════════════════════════════════════════════════════════╝
.
LuaMacro — Lua как язык макросов
Posted: Thu 18 Jun, 2015 12:42
by Shmuel
Вы поставили сторонний пакет, который вмешивается в обработку ошибок. Я не знаю в деталях, что этот пакет делает, ставить его специально и разбираться нет времени.
LuaMacro — Lua как язык макросов
Posted: Thu 18 Jun, 2015 12:47
by John Doe
К luamacro претензий нет, я лишь предположил причину странного сообщения у sToLp.
Update
Причина сбоя в том, что модуль пытается использовать функцию print, которая у нас беспардонно переопределена.
(Как обойти проблему описал в первом посте соответствующей темы)
LuaMacro — Lua как язык макросов
Posted: Thu 18 Jun, 2015 14:25
by Shmuel
John Doe wrote: которая у нас беспардонно переопределена.
Полагаю, что не беспардонно, а вполне осмысленно.
LuaMacro — Lua как язык макросов
Posted: Thu 18 Jun, 2015 14:33
by John Doe
Shmuel wrote:
John Doe wrote: которая у нас беспардонно переопределена.
Полагаю, что не беспардонно, а вполне осмысленно.
Будь моя воля, то я бы переосмыслил, т.к. из-за совпадения имени со штатной функцией lua нередко возникают проблемы.
LuaMacro — Lua как язык макросов
Posted: Thu 18 Jun, 2015 14:50
by Shmuel
У меня - редко (даже не помню, когда было в последний раз).
Но дело не в этом: в процессе перехода на Lua приходилось принимать множество решений за относительно короткое время. Естественно, невозможно было в ста процентах случаев попадать в яблочко. А дальше уже менять что-либо стало затруднительно из-за обратной совместимости.
LuaMacro — Lua как язык макросов
Posted: Thu 18 Jun, 2015 16:43
by John Doe
Я взял себе за правило в макросах всегда использовать mf.print, на всякий случай.
И есть связанный вопрос, по следующему фрагменту из api.lua:
Все 7 функций дублируются в mf и в _G.
Однако любопытно почему для eval,msgbox,prompt "первична" таблица _G, а для прочих — mf?
P.S.
Вопрос конечно отвлечённый, но не совсем, например функция printf использует _G.print, что будет иметь значение, пожелай я для каких-то целей переопределить _G.print