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

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

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

Post by John Doe » Mon 17 Jan, 2011 13:54

Latest post of the previous page:

На худой конец exit(), но не return().
Или же result(), пусть он не завершает макрос, а только лишь определяет возвращаемое значение.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

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

Post by Skirda » Mon 17 Jan, 2011 13:59

да, вариант с result() интереснее
но есть еще вариант - глобальная ФАРовская переменная - что-то типа %ResultMacro
%ResultMacro=что-то там;
и... плагин по идеи должен быть готов принять на грудь __int64, либо double, либо wchar_t* (а в последствии и... :-))
We are the Borg. You will be assimilated.
So Say We All!

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

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

Post by Max Rusov » Mon 17 Jan, 2011 14:05

%ResultMacro это, конечно, хорошо. Только, напомню, хотелось бы, чтобы в простейшем случае достаточно было просто выражения. Т.е. чтобы можно было запустить марос "2+2" и получить результат, а не только: "%ResultMacro=2+2"

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

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

Post by John Doe » Mon 17 Jan, 2011 14:06

Чёт не вижу разницы.

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

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

Post by Max Rusov » Mon 17 Jan, 2011 14:07

Не видишь разницы - в чем?

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

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

Post by Skirda » Mon 17 Jan, 2011 14:08

Макс, это ты знаешь, что машина стековая и что результат 2+2 ляжет в вершину стека, но ты это не объяснишь тем, кто не программит.
We are the Borg. You will be assimilated.
So Say We All!

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

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

Post by Skirda » Mon 17 Jan, 2011 14:09

в догонку - а как ты собираешь вернуть строку плагину?
"2+2" - это неявный $Text "2+2"
We are the Borg. You will be assimilated.
So Say We All!

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

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

Post by Skirda » Mon 17 Jan, 2011 14:10

...в общем я так понимаю, что обязательный параметр (любого типа) для $exit решит проблему (главное, чтобы уже готовые макросы не полетели :-))
We are the Borg. You will be assimilated.
So Say We All!

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

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

Post by John Doe » Mon 17 Jan, 2011 14:11

Стек/не стек, всё равно нет принципиальной разницы разницы между простейшим и сложнейшим случаем.
Разве сложно добавить в простейший макрос ещё и "ResultMacro=, или Result(...).

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

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

Post by Max Rusov » Mon 17 Jan, 2011 14:15

А зачем объяснять то? Это же для плагинов. Я, естественно, держу в голове MacroLib. Хочу реализовать условие If.
Чтобы можно было написать так:

Code: Select all

If = "Shell && CmdLine.Empty"
А в другом случае, например, так:

Code: Select all

If = "F11 $if (menu.select("имя плагина") > 0) ENTER $exit(1) $else ESC $exit(0) $end"
Не очень удачно, конечно, в условии макроса использовать F11, но это пример :)
Last edited by Max Rusov on Mon 17 Jan, 2011 14:21, edited 2 times in total.

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

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

Post by Max Rusov » Mon 17 Jan, 2011 14:19

Skirda wrote:"2+2" - это неявный $Text "2+2"
Да, тут некузявно получается. Конечно, плагин сам может добавлять "$exit( ... )", но как понять, когда надо добавлять, а когда нет?...

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

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

Post by John Doe » Mon 17 Jan, 2011 14:20

Если убрать f11, то в условии только menu.select("имя плагина") > 0.
А MacrоLib уже сам может добавить Result

Code: Select all

Result(menu.select("имя плагина") > 0)
Update
Как понять надо ли добавлять: всё просто: если в макросе УЖЕ есть Result (или $Exit), то не добавлять.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

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

Post by Skirda » Mon 17 Jan, 2011 14:23

хмм... правильно я понимаю, что синхронный вызов макросов тебе нужен для последнего примера? :-)

We are the Borg. You will be assimilated.
So Say We All!

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

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

Post by Max Rusov » Mon 17 Jan, 2011 14:26

John Doe wrote:Если убрать f11, то в условии только menu.select("имя плагина") > 0.
Только без F11 menu.select не имеет смысла. В этом и суть - в общем случае сложное условие невозможно уложить в формулу. Могут понадобиться локальные переменные, if'ы и пр.
John Doe wrote:Как понять надо ли добавлять: всё просто: если в макросе УЖЕ есть Result (или $Exit), то не добавлять.
Это не понял. По моему - ты не прав.

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

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

Post by John Doe » Mon 17 Jan, 2011 14:28

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

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

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

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

Post by Max Rusov » Mon 17 Jan, 2011 14:30

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

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

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

Post by Skirda » Mon 17 Jan, 2011 14:30

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

Post Reply

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