Сделать Macro глобальной функцией

Здесь обсуждается всё, что касается макросов.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Сделать Macro глобальной функцией

Post by gotar »

Какие неожиданные/неприятные будут последствия, если в utils.lua перед последним return добавить строчки:

Code: Select all

_G.Macro=AddMacro
_G.Event=AddEvent
_G.NoMacro=DummyFunc
_G.NoEvent=DummyFunc
?
Добавление этих строчек позволит грузить макро из любого файла командой lm:post @file.lua, а выполнение команд lm:unload ; lm:load вернуть макросы в исходное состояние.
Last edited by gotar on Thu 14 Feb, 2013 18:09, edited 1 time in total.
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: Сделать Macro глобальной функцией

Post by SUSim »

Это вопрос?
SimSU ··· ·· -- ··· ··-
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Сделать Macro глобальной функцией

Post by gotar »

Да. Хотелось бы понять из каких соображений эти функции не сделаны глобальными. Какие могут быть побочные эффекты.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Сделать Macro глобальной функцией

Post by Shmuel »

gotar wrote:Какие неожиданные/неприятные будут последствия, если в utils.lua перед последним return добавить строчки:

Code: Select all

_G.Macro=AddMacro
_G.Event=AddEvent
_G.NoMacro=DummyFunc
_G.NoEvent=DummyFunc
?
Добавление этих строчек позволит грузить макро из любого файла командой lm:post @file.lua, а выполнение команд lm:unload ; lm:load вернуть макросы в исходное состояние.
На самом деле, это возможно реализовать, не внося никаких изменений в плагин LuaMacro или Фар. Пока не буду говорить, как это сделать, может сами догадаетесь? :)

Насчёт неприятных последствий: может быть никаких, а может и будут (если, например, завтра что-то изменится в плагине). Дизайн плагина не предусматривал вызов Macro() в произвольный момент времени, хотя, скорее всего, ничего неприятного не произойдёт (я уже игрался с этим когда-то и ничего плохого не заметил).

Кстати, нет надобности вызывать lm:unload перед lm:load, так как lm:load сам всё сначала выгружает.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Сделать Macro глобальной функцией

Post by gotar »

Shmuel wrote:Дизайн плагина не предусматривал вызов Macro() в произвольный момент времени,
разве в это месте есть отличие от вызова функции far.MacroAdd?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Сделать Macro глобальной функцией

Post by Shmuel »

gotar wrote:
Shmuel wrote:Дизайн плагина не предусматривал вызов Macro() в произвольный момент времени,
разве в это месте есть отличие от вызова функции far.MacroAdd?
Есть. MCTL_ADDMACRO изначально проектировалась как вызываемая в любое время.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Сделать Macro глобальной функцией

Post by gotar »

На самом деле, это возможно реализовать, не внося никаких изменений в плагин LuaMacro или Фар
Создать файл в каталоге scripts
с содержимым:

Code: Select all

_G.Macro=Macro
_G.Event=Event
_G.NoMacro=NoMacro
_G.NoEvent=NoEvent
?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Сделать Macro глобальной функцией

Post by Shmuel »

Можно и так. Только помните, что использование недокументированных возможностей рискованно: сегодня работает, а завтра может и перестать.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Сделать Macro глобальной функцией

Post by gotar »

Code: Select all

Пока не буду говорить, как это сделать, может сами догадаетесь? 
А что Вы имели ввиду? Существуетли докуметрованная возможность сделать тоже самое?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Сделать Macro глобальной функцией

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:

Re: Сделать Macro глобальной функцией

Post by John Doe »

gotar wrote:
На самом деле, это возможно реализовать, не внося никаких изменений в плагин LuaMacro или Фар
Создать файл в каталоге scripts
с содержимым:

Code: Select all

_G.Macro=Macro
_G.Event=Event
_G.NoMacro=NoMacro
_G.NoEvent=NoEvent
?
Так не работает.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Сделать Macro глобальной функцией

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:

Re: Сделать Macro глобальной функцией

Post by John Doe »

У меня работает только если добавить эти строки в utils.lua
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Сделать Macro глобальной функцией

Post by Shmuel »

John Doe wrote:У меня работает только если добавить эти строки в utils.lua
Опишите, как вы проверяете "работает-не работает". Мне не верится, что это может у вас не работать.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Сделать Macro глобальной функцией

Post by John Doe »

Был не прав, всё работает.
Post Reply

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