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

Место, где разработчики плагинов могут поделиться своим опытом.
User avatar
John Doe
Бюрократ
Posts: 12604
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 260 times

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

Post by John Doe »

Latest post of the previous page:

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

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

Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 11 times

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

Post by Max Rusov »

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

User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 4 times

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

Post by Skirda »

John Doe wrote:В противном случае запускает не оборачивая.
теперь я не понял
We are the Borg. You will be assimilated.
So Say We All!

User avatar
John Doe
Бюрократ
Posts: 12604
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 260 times

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

Post by John Doe »

Запускает макрос-условие "как есть".
(Это всё следует понимать в контексте обсуждения MacroLib)

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

AlexII
Posts: 270
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 123 times
Contact:

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

Post by AlexII »


Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 11 times

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

Post by Max Rusov »

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

AlexII
Posts: 270
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 123 times
Contact:

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

Post by AlexII »

Max Rusov wrote:А доступность в контексте определяется обычным способом - через macroarea.
Не ясно. Если можно — пример макроса в личку.

Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 11 times

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

Post by Max Rusov »

Чего непонятного? Макрос привязан к macroarea, там где он не имеет смысла он не вызовется. Доступность плагина в меню F11 определяется точно так-же, через macroarea. Эти условия взаимозаменяемы.

AlexII
Posts: 270
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 123 times
Contact:

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

Post by AlexII »

Max Rusov wrote:Макрос привязан к macroarea, там где он не имеет смысла он не вызовется.
Спасибо, теперь ясно.

Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 11 times

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

Post by Max Rusov »

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

Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 11 times

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

Post by Max Rusov »

А можно ли теперь будет решить задачу, обсуждавшуюся в этом топике:

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

Shmuel
Posts: 5976
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

Max Rusov wrote:А можно ли теперь будет решить задачу, обсуждавшуюся в этом топике:

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

Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 11 times

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

Post 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'е.

Shmuel
Posts: 5976
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

Max Rusov wrote:Довольно давно предлагалось сделать для макросов более гибкое условие запуска, чтобы это было произвольное логическое выражение, а не просто набор флажков. Например, в MacroLib можно было бы писать:

Code: Select all

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

Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 11 times

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

Post by Max Rusov »

В контексте MacroLiba'а это не устраивает. Там принцип такой:

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

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

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

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

Shmuel
Posts: 5976
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

Если вся проблема - в вычислении условий, то-есть при этом не надо посылать клавиши Фару и т.п., то проблема видится просто в том, что некоторые данные, доступные макросам, недоступны через API плагинов, и восполнение этого недостатка решило бы эту проблему. Так?

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

Post Reply

Return to “Разработка плагинов”