Re: Spring — внедрение Lua в качестве макроязыка

Здесь обсуждается всё, что касается макросов.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by IgorZ »

Есть у меня , которым я пользуюсь периодически. Обнаружил, что он стал вешать FAR. Исследование показало, что причина в том, что теперь eval() не вызывает condition. Нельзя ли вернуть старое поведение?
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Shmuel »

IgorZ wrote:Исследование показало, что причина в том, что теперь eval() не вызывает condition. Нельзя ли вернуть старое поведение?
Можно, уже сделал.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by IgorZ »

Shmuel wrote:
IgorZ wrote:Исследование показало, что причина в том, что теперь eval() не вызывает condition. Нельзя ли вернуть старое поведение?
Можно, уже сделал.
Благодарю.
User avatar
John Doe
Бюрократ
Posts: 13849
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Spring — внедрение Lua в качестве макроязыка

Post by John Doe »

IgorZ wrote:Есть у меня , которым я пользуюсь периодически. Обнаружил, что он стал вешать FAR. Исследование показало, что причина в том, что теперь eval() не вызывает condition. Нельзя ли вернуть старое поведение?
Для справки: старое поведение было изменено тут.

Плохо что нет другой возможности проверить существование макроса, кроме как попытавшись его выполнить.
Нагромождать Eval смысла больше нет, нужны новые функции работы с макросами.
User avatar
John Doe
Бюрократ
Posts: 13849
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Code: Select all

shmuel 28.04.2014 13:42:55 +0200 - build 318

1. Убраны команды "luacheck:" и "mooncheck:".

2. В функции eval добавлен опциональный 3-й параметр 'Lang'.
Функция eval и без того страшна была, с двумя параметрами.
Может не будем её дальше надстраивать?

Зачем она вообще, при наличии loadstring/loadfile/dofile/mooonscript.loadstring/etc?

Единственное специфическое её действие это eval(S,2) — "Выполнить макрос, назначенный на сочетание клавиш S"
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

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

Post by Shmuel »

John Doe wrote:Функция eval и без того страшна была, с двумя параметрами.
Может не будем её дальше надстраивать?
Поскольку она всё-таки есть, было бы странно, если бы работала только с Lua, но не с MoonScript.
John Doe wrote:Зачем она вообще, при наличии loadstring/loadfile/dofile/mooonscript.loadstring/etc?
В пространстве mf есть целый набор функций, которые можно выкинуть. Это не делается из соображений сохранения обратной совместимости. Кому не надо - пусть не пользуется.

За замечания по мануалу - спасибо.
User avatar
John Doe
Бюрократ
Posts: 13849
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Shmuel wrote:Поскольку она всё-таки есть, было бы странно, если бы работала только с Lua, но не с MoonScript.
Оставить как было и не трогать. Уж точно не усложнять сложное, и не поощрять к использованию неактуального.
Тот, кто способен воспользоваться MoonScript, не будет страдать по поводу того, что eval не дублирует встроенный функционал языка (я гарантирую это).
Shmuel wrote:В пространстве mf есть целый набор функций, которые можно выкинуть. Это не делается из соображений сохранения обратной совместимости. Кому не надо - пусть не пользуется.
В какой-то момент ради стройности и логичности системы от обратной совместимости лучше отказаться.
Подготовить список планируемых к удалению функций, и указать чем их следует заменить. Выдержать время для перехода, и благополучно грохнуть. Это в макроязыке и до Lua делалось.
User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

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

Post by Aidar »

John Doe wrote:... Единственное специфическое её действие это eval(S,2)
"Выполнить макрос, назначенный на сочетание клавиш S"
Думаю, было бы полезно вынести эту функциональность в MacroControl API +
возможность проверки наличия макроса на клавише.
Для различения макроса/клавиши в SequenceText можно ввести флаг.
Так было бы удобнее передавать FAR'у команду на выполнение действия/макроса,
назначенного на клавишу, если клавиша не обрабатывается в самом плагине/скрипте.
User avatar
John Doe
Бюрократ
Posts: 13849
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

eval(key,2) возвращает -2 во всех случаях, когда макрос не был выполнен.
- не существует
- функция condition вернула false
- нашлось несколько подходящих макросов, но меню с выбором был отменено пользователем

По крайней мере последний случай очень хотелось бы отличать, предлагаю например возвращать -3.
User avatar
John Doe
Бюрократ
Posts: 13849
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

lua:eval("CtrlNumLock",2) вызывает ошибку LuaMacro.
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

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

Post by Shmuel »

John Doe wrote:lua:eval("CtrlNumLock",2) вызывает ошибку LuaMacro.
У меня работает, ошибки нет.
User avatar
John Doe
Бюрократ
Posts: 13849
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Моя вина, ошибка была в MacroEx.
User avatar
John Doe
Бюрократ
Posts: 13849
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Проблема с eval.
Есть макрос:

Code: Select all

Macro {
  area="Common"; key="Ctrl/xxx";
  action=far.Show;
}
Требуется выполнить его с помощью eval: lua:=eval("Ctrl/xxx",2)
Однако не работает, видимо наличие слеша в середине приводит к конфликту с синтаксисом Area/Key

Предлагаю изменить, например как-то так:

P.S.
На практике не сталкивался, но можно представить себе и имена вида "Shell/xxx". Поддержку тоже несложно добавить.

Update: http://bugs.farmanager.com/view.php?id=2899
User avatar
John Doe
Бюрократ
Posts: 13849
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

eval

Post by John Doe »

Запуск lua: mf.postmacro(eval,"F1") приводит к ошибке "bad argument #1 to 'getfenv' (invalid level)"
(не помню зачем такое понадобилось запускать, но вдруг баг)
User avatar
John Doe
Бюрократ
Posts: 13849
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Есть такой макрос:

Code: Select all

Macro {
  area="Shell"; key="CtrlF1"; priority=100;
  action=function()
    far.Show(mf.akey(1,1))
  end;
}
При нажатии LCtrlF1 вижу CtrlF1
А при запуске lua:eval("LCtrlF1",2) вижу LCtrlF1.
Не совпадает (насколько я понимаю в фаре правильное наименование комбинации с левым модификатором это CtrlF1)

Примечание модератора Смежная тема: http://forum.farmanager.com/viewtopic.php?f=15&t=9496
Post Reply

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