Событие CommandLine — макросы для командной строки

Здесь обсуждается всё, что касается макросов.
User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

Событие CommandLine — макросы для командной строки

Post by hoopoe »

hi всем

есть способ повесить макрос на префикс команды?
есть немного идей про макросы, но нужно уметь управлять фаром по типу vim, а именно:
pref:command args
и в макросе разобрать команду и параметры ну и сделать что-нить полезное...

поиск по доке результатов не дал (или не знал как искать)... ткните носом в доку или сампел... пасиб
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Способа 3
- дописать пожелание сюда: http://bugs.farmanager.com/view.php?id=2393
- оформить макрос lua-плагином: http://forum.farmanager.com/viewtopic.php?f=15&t=4365
- использовать консольные алиасы: http://forum.farmanager.com/viewtopic.php?f=15&t=8546

Последний способ проще всего. Но между командой/параметрами должен быть пробел

P.S.
Был ещё один способ: ProcessFarCommandLine. К сожалению автор от него почему-то отказался.
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 »

hoopoe wrote:есть способ повесить макрос на префикс команды?
В следующей ночной сборке будет.
Описание смотрите в macroapi_manual.ru.chm, в статьях "Плагин LuaMacro" и "Обработчики событий".
Если будут вопросы/предложения - спрашивайте и предлагайте.
User avatar
hoopoe
Posts: 263
Joined: Mon 28 Mar, 2005 07:44
Location: Нежный Новгород
Has thanked: 1 time
Contact:

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

Post by hoopoe »

Вот спасибо :)
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

When there are multiple `CommandLine` handlers, and one of them returned
a true value, then the rest of those handlers will not be called.
Подразумевается значение возвращённое из action или condition?
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:Подразумевается значение возвращённое из action или condition?
Из action.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

А condition обрабатывается?

Меня тут беспокоят отличия от других обработчиков.
Я совсем не против реакции на возвращаемое значение, даже завёл тикет.
Но хотелось бы единообразия.
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:А condition обрабатывается?

Меня тут беспокоят отличия от других обработчиков.
Всё как в других обработчиках. filemask игнорируется.
А возвращаемое значение action всегда обрабатывалось в событиях DialogEvent и EditorInput - в соответствии с API плагинов.
User avatar
John Doe
Бюрократ
Posts: 13851
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.06.2014 00:21:04 +0200 - build 384

1. Продолжение 383: плагин передаёт обработчикам события "CommandLine" таблицу - массив аргументов.
Я почему-то ожидал не таблицу а vararg
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:Я почему-то ожидал не таблицу а vararg
Учитывая, что все аргументы типа string, эти 2 способа эквивалентны, но, на мой взгляд, с таблицей проще работать.

Есть, правда, одна существенная разница - обработчики могут модифицировать эту таблицу. Это надо иметь в виду: либо не делать этого, либо делать с определённой целью.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

У нового события много общего с запуском lua: @<filename> [<params>]
Но есть 2 различия:
  • то о чём сказано выше (как принимаются параметры: table vs vararg);
  • как они передаются:
    В случае CommandLine всё обычно для командной строки, параметры разделяются пробелом (если параметр содержит пробел, то он закавычивается).
    А в случае с lua: @<filename> [<params>] параметры передаются как выражение Lua, и разделяются запятой.
    Это когда когда-то обсуждалось, одним из аргументов в пользу такого решения было отсутствие необходимости выдумывать свой парсер командной строки.
Теперь свой парсер уже есть.
Было бы здорово если бы обработчик CommandLine и скрипт, запущенный как lua: @<filename> [<params>] работали одинаково.

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

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

Post by John Doe »

Update: в примере 2 ошибка, не учитывается возможность пробелов внутри аргументов.

В общем неважно, каким бы способом ни передавались параметры, выкрутится можно.
Но однотипность всё-таки желательна.
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:Но однотипность всё-таки желательна.
Пока останется как есть, а дальше жизнь покажет.
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

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

Post by gotar »

Хочу предложить другой формат командной строки.

Цель: иметь возможность создавать команды, выполняющиеся в процессе фара и измеряющие его состояние, а не в отдельном процессе. Примеры таких команд: cd и set.

Для каждого обработчика команды задается имя команды этого обработчика. Два обработчика с одним и тем же именем команды считаются ошибкой конфликта имен. В обработчике команды имя команды задается текстовой строкой( не регулярным выражением и т.п.).

формат
lm:<имя команды> <param1> <param2> ...

При попытке создать обработчик для команд load, unload, save и т.п. должна выдаваться ошибка о конфликте имен команд.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

lm:<имя команды> <param1> <param2> ...
Т.е. вы предлагаете убрать user.
Можно пойти ещё дальше и убрать lm:.
Для каждого обработчика команды задается имя команды этого обработчика.
Сейчас это возможно реализовать проверкой в функции condition.
Вы предлагаете завести отдельное поле в таблице. Возможно и стоит.
Locked

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