Page 3 of 5

Re: Как вернуть в плагин результат работы макроса?

Posted: Mon 17 Jan, 2011 14:28
by John Doe

Latest post of the previous page:

В конфиге задано условие вида if="...".
Если в тексте этого условия не встречается $Exit, то плагин оборачивает всё в $Exit(...) и запускает.
В противном случае запускает "как есть".

Т.е. если у нас хитрое условие с F11, то мы должны в нём явно указать где там результат.
Но в большинстве случаев это будет излишним, т.к. чаще условие является простым выражением.

Re: Как вернуть в плагин результат работы макроса?

Posted: Mon 17 Jan, 2011 14:30
by Max Rusov
Skirda wrote:хмм... правильно я понимаю, что синхронный вызов макросов тебе нужен для последнего примера?
Мне (в MacroLib'е) он нужен, чтобы сделать условие if. Конечно, в 90% случаев if будет укладываться в формулу, но эта формула должна пользоваться всеми функциями макро-api. Например, очень часто нужен условный запуск макросов, в зависимости от переменных окружения. Не хочется повторять вычислитель выражений в плагине, раз он уже есть в FAR'е.

Re: Как вернуть в плагин результат работы макроса?

Posted: Mon 17 Jan, 2011 14:30
by Skirda
John Doe wrote:В противном случае запускает не оборачивая.
теперь я не понял

Re: Как вернуть в плагин результат работы макроса?

Posted: Mon 17 Jan, 2011 14:34
by John Doe
Запускает макрос-условие "как есть".
(Это всё следует понимать в контексте обсуждения MacroLib)

Если непонятно распишу по шагам.

Re: Как вернуть в плагин результат работы макроса?

Posted: Mon 17 Jan, 2011 19:17
by AlexII

Re: Как вернуть в плагин результат работы макроса?

Posted: Mon 17 Jan, 2011 19:41
by Max Rusov
AlexII wrote:Пусть в примере на замену F11, Menu.Select() сие не особо поможет (не все плагины могут быть доступны в вызванном контексте)
Ну почему - вполне поможет. Пример подразумевал целью - именно проверить наличие плагина. А доступность в контексте определяется обычным способом - через macroarea.

Re: Как вернуть в плагин результат работы макроса?

Posted: Mon 17 Jan, 2011 22:10
by AlexII
Max Rusov wrote:А доступность в контексте определяется обычным способом - через macroarea.
Не ясно. Если можно — пример макроса в личку.

Re: Как вернуть в плагин результат работы макроса?

Posted: Mon 17 Jan, 2011 22:15
by Max Rusov
Чего непонятного? Макрос привязан к macroarea, там где он не имеет смысла он не вызовется. Доступность плагина в меню F11 определяется точно так-же, через macroarea. Эти условия взаимозаменяемы.

Re: Как вернуть в плагин результат работы макроса?

Posted: Tue 18 Jan, 2011 06:16
by AlexII
Max Rusov wrote:Макрос привязан к macroarea, там где он не имеет смысла он не вызовется.
Спасибо, теперь ясно.

Re: Как вернуть в плагин результат работы макроса?

Posted: Tue 18 Jan, 2011 13:43
by Max Rusov
AlexII wrote:А если макрос в области «Common»?"
Ну, если мы говорим в контексте MacroLib, то там все проще. Макросы в реестре приходилось относить к области Common, чтобы не дублировать их код для N областей, где макрос имеет смысл. MacroLib умеет привязывать макрос сразу к нескольким областям - только тем где он действительно работает, например: Area="Shell Editor Viewer". Поэтому Common макросов становится не так много - только такие, которые действительно имеют смысл везде. У меня таких - всего несколько штук осталось.

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

Posted: Mon 08 Oct, 2012 12:24
by Max Rusov
А можно ли теперь будет решить задачу, обсуждавшуюся в этом топике:

Как вернуть в плагин результат работы макроса?

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

Posted: Mon 08 Oct, 2012 15:20
by Shmuel
Max Rusov wrote:А можно ли теперь будет решить задачу, обсуждавшуюся в этом топике:

Как вернуть в плагин результат работы макроса?
Нельзя ли привести практический пример полезности этой идеи?

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

Posted: Mon 08 Oct, 2012 15:35
by Max Rusov
Shmuel wrote:Нельзя ли привести практический пример полезности этой идеи?
По приведенной ссылке было много примеров, но продублирую.
Довольно давно предлагалось сделать для макросов более гибкое условие запуска, чтобы это было произвольное логическое выражение, а не просто набор флажков. Например, в MacroLib можно было бы писать:

Code: Select all

macro Descr="Extended Copy" Area="Shell" Key="F5" If="Plugin.Exist(#%ExtendedCopy)"
{{
  Plugin.Menu(#%ExtendedCopy)
}}
Еще оттуда:
...Конечно, в 90% случаев if будет укладываться в формулу, но эта формула должна пользоваться всеми функциями макро-api. Например, очень часто нужен условный запуск макросов, в зависимости от переменных окружения. Не хочется повторять вычислитель выражений в плагине, раз он уже есть в FAR'е.

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

Posted: Mon 08 Oct, 2012 15:55
by Shmuel
Max Rusov wrote:Довольно давно предлагалось сделать для макросов более гибкое условие запуска, чтобы это было произвольное логическое выражение, а не просто набор флажков. Например, в MacroLib можно было бы писать:

Code: Select all

macro Descr="Extended Copy" Area="Shell" Key="F5" If="Plugin.Exist(#%ExtendedCopy)"
{{
  Plugin.Menu(#%ExtendedCopy)
}}
Это в принципе можно было бы реализовать по другому, не возвращая результат операции плагину, а делая всё внутри Фара. То-есть, каждый макрос нового формата содержал бы два макроса старого формата, первый из которых определял бы, нужно ли запускать второй.

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

Posted: Mon 08 Oct, 2012 16:04
by Max Rusov
В контексте MacroLiba'а это не устраивает. Там принцип такой:

1. По условиям срабатывания (Key, Area, Cond) строится список макросов, которые должны быть вызваны.
2. Из них выбираются макросы с наибольшим приоритетом (Priority)
3. Если остался один - он выполняется, если более одного - показывается меню с выбором.

Условие If, если оно бы могло быть реализовано, проверялось бы на первом шаге.

Конечно, если все эта логика будет повторена в FAR'е... +Все модификаторы нажатий... Но я сомневаюсь, что это будет делаться.

А синхронный запуск макро-функций мог бы быть полезен во множестве других плагинах. Везде, где хочется расширения функциональности скриптами.

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

Posted: Mon 08 Oct, 2012 16:11
by Shmuel
Если вся проблема - в вычислении условий, то-есть при этом не надо посылать клавиши Фару и т.п., то проблема видится просто в том, что некоторые данные, доступные макросам, недоступны через API плагинов, и восполнение этого недостатка решило бы эту проблему. Так?

Пока я тут сочинял, ты успел добавить текст. Идея синхронного запуска - хорошая, буду думать.