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.
(Мануал весьма лаконичен, вместо описания функции старого макроязыка приведены ссылки на устаревший раздел
Все 7 функций дублируются в mf и в _G.
Однако любопытно почему для eval,msgbox,prompt "первична" таблица _G, а для прочих — mf?
P.S.
Вопрос конечно отвлечённый, но не совсем, например функция printf использует _G.print, что будет иметь значение, пожелай я для каких-то целей переопределить _G.print
LuaMacro — Lua как язык макросов
Posted: Thu 18 Jun, 2015 16:50
by Shmuel
John Doe wrote: Однако любопытно почему для eval,msgbox,prompt "первична" таблица _G, а для прочих — mf?
Просто сделано неединообразно, никакой причины другой не существует.
John Doe wrote: функция printf использует _G.print, что будет иметь значение, пожелай я для каких-то целей переопределить _G.print
Я бы printf выбросил, практика показывает, что ею никто не пользуется (и я тоже). Но кто знает, сейчас выбросишь, а завтра шум поднимется.
LuaMacro — Lua как язык макросов
Posted: Thu 18 Jun, 2015 16:57
by John Doe
Shmuel wrote: Но кто знает, сейчас выбросишь, а завтра шум поднимется.
Чем раньше выбросишь, тем меньше вероятность что кто-то успеет использовать.
LuaMacro — Lua как язык макросов
Posted: Thu 18 Jun, 2015 16:59
by sToLp
John Doe wrote:я лишь предположил причину странного сообщения у sToLp
╔══════════════════════════════════════════════ LuaMacro ══════════════════════════════════════════════╗
║ U:\FarLce\plugins\luamacro\macrotest.lua:1404: assertion failed! ║
║ stack traceback: ║
║ [C]: in function 'assert' ║
║ U:\FarLce\plugins\luamacro\macrotest.lua:1404: in function 'test_AdvControl_Window' ║
║ U:\FarLce\plugins\luamacro\macrotest.lua:1495: in function 'test_AdvControl' ║
║ U:\FarLce\plugins\luamacro\macrotest.lua:1582: in function 'test_luafar' ║
║ U:\FarLce\plugins\luamacro\macrotest.lua:1638: in function 'test_all' ║
║ U:\FarLce\Profile\Macros\scripts\tst_lua\macrotest.lua:13: in function <U:\FarLce\Profile\Macros\ ║
║ scripts\tst_lua\macrotest.lua:11> ║
╟──────────────────────────────────────────────────────────────────────────────────────────────────────╢
║ { OK } ║
╚══════════════════════════════════════════════════════════════════════════════════════════════════════╝
LuaMacro — Lua как язык макросов
Posted: Thu 18 Jun, 2015 17:00
by Shmuel
John Doe wrote: Чем раньше выбросишь, тем меньше вероятность что кто-то успеет использовать.
Да скорее всего уже успели.
Но можно поставить её "на счётчик" на полгода, а в мануале пометить как deprecated.
LuaMacro — Lua как язык макросов
Posted: Thu 18 Jun, 2015 17:03
by Shmuel
sToLp wrote: Однако и после деинсталляции StackTracePlus запуск macrotest.lua приводит к сообщению об ошибке
Поскольку у вас это воспроизводится (а у меня нет), то вам и карты в руки для дальнейшего исследования.
LuaMacro — Lua как язык макросов
Posted: Thu 18 Jun, 2015 17:05
by John Doe
sToLp wrote: Однако и после деинсталляции StackTracePlus
StackTracePlus влиял только на то, что вместо вывода сообщения о реальной ошибке сам падал (пытаясь использовать функцию print).
Как починить StackTracePlus указано в его теме.
Shmuel wrote: Но можно поставить её "на счётчик" на полгода
Поддерживаю.
LuaMacro — Lua как язык макросов
Posted: Thu 18 Jun, 2015 17:56
by sToLp
Восстановил StackTracePlus по инструкции в его теме.
После этого сообщение от macrotest.lua
-- добавлена обработка свойств out и keys
local function _bindKey (keys)
return function ()
Keys(keys);
end
end
local function _bindPrint (keys)
return function ()
print(keys);
end
end
-- конец
local function AddRegularMacro (srctable)
...
if type(srctable.action) == "function" then
macro.action = srctable.action
-- добавлена обработка свойств out и keys
elseif type(srctable.out) == "string" then
macro.action = _bindPrint(srctable.out)
elseif type(srctable.keys) == "string" then
macro.action = _bindKey(srctable.keys)
-- конец
elseif type(srctable.code) == "string" then
local isMoonScript = srctable.language == "moonscript"
if srctable.code:sub(1, 1) == "@" then
macro.code = srctable.code
macro.language = isMoonScript and "moonscript" or "lua"
else
...
Сделано это для того чтобы упростить написание макро:
local Macro = Macro
function _G.MyMacro(t)
if t.keys then t.action=function() Keys(t.keys) end; end
if t.out then t.action=function() print(t.out) end; end
return Macro(t)
end