Page 2 of 5

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

Posted: Mon 17 Jan, 2011 13:54
by John Doe

Latest post of the previous page:

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

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

Posted: Mon 17 Jan, 2011 13:59
by Skirda
да, вариант с result() интереснее
но есть еще вариант - глобальная ФАРовская переменная - что-то типа %ResultMacro
%ResultMacro=что-то там;
и... плагин по идеи должен быть готов принять на грудь __int64, либо double, либо wchar_t* (а в последствии и... :-))

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

Posted: Mon 17 Jan, 2011 14:05
by Max Rusov
%ResultMacro это, конечно, хорошо. Только, напомню, хотелось бы, чтобы в простейшем случае достаточно было просто выражения. Т.е. чтобы можно было запустить марос "2+2" и получить результат, а не только: "%ResultMacro=2+2"

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

Posted: Mon 17 Jan, 2011 14:06
by John Doe
Чёт не вижу разницы.

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

Posted: Mon 17 Jan, 2011 14:07
by Max Rusov
Не видишь разницы - в чем?

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

Posted: Mon 17 Jan, 2011 14:08
by Skirda
Макс, это ты знаешь, что машина стековая и что результат 2+2 ляжет в вершину стека, но ты это не объяснишь тем, кто не программит.

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

Posted: Mon 17 Jan, 2011 14:09
by Skirda
в догонку - а как ты собираешь вернуть строку плагину?
"2+2" - это неявный $Text "2+2"

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

Posted: Mon 17 Jan, 2011 14:10
by Skirda
...в общем я так понимаю, что обязательный параметр (любого типа) для $exit решит проблему (главное, чтобы уже готовые макросы не полетели :-))

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

Posted: Mon 17 Jan, 2011 14:11
by John Doe
Стек/не стек, всё равно нет принципиальной разницы разницы между простейшим и сложнейшим случаем.
Разве сложно добавить в простейший макрос ещё и "ResultMacro=, или Result(...).

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

Posted: Mon 17 Jan, 2011 14:15
by Max Rusov
А зачем объяснять то? Это же для плагинов. Я, естественно, держу в голове 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, но это пример :)

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

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

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

Posted: Mon 17 Jan, 2011 14:20
by John Doe
Если убрать f11, то в условии только menu.select("имя плагина") > 0.
А MacrоLib уже сам может добавить Result

Code: Select all

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

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

Posted: Mon 17 Jan, 2011 14:23
by Skirda
хмм... правильно я понимаю, что синхронный вызов макросов тебе нужен для последнего примера? :-)


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

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

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

Posted: Mon 17 Jan, 2011 14:28
by John Doe
В конфиге задано условие вида if="...".
Если в тексте этого условия не встречается $Exit, то плагин оборачивает всё в $Exit(...) и запускает.
В противном случае запускает "как есть".

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

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

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