Переименовать callplugin

Здесь обсуждается всё, что касается макросов.
Locked
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

Re: Переименовать callplugin

Post by Skirda » Wed 29 Feb, 2012 12:00

Latest post of the previous page:

Max Rusov wrote:Как я понимаю mmode(3 - не делает функцию асинхронной, а решает другую проблему - реентрантность макросов:
http://bugs.farmanager.com/view.php?id=1280
а ты проверь :-)
We are the Borg. You will be assimilated.
So Say We All!

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

Re: Переименовать callplugin

Post by John Doe » Wed 29 Feb, 2012 12:06

ProcessMacroFuncW и callplugin (или что-то подобное) - разные сущности
Это ясно, можно не разжёвывать.

Я просто хочу сказать, что это не естественно:

Code: Select all

mmode(3,1) callplugin("C941E865-9C29-485C-99B3-0C710940F2D8","ShiftRight ShiftRight ShiftDown ShiftDown ShiftLeft ShiftLeft ShiftUp ShiftUp ShiftRight Esc")
А хочется по простому:

Code: Select all

mmode(3,1) callplugin("C941E865-9C29-485C-99B3-0C710940F2D8")
ShiftRight ShiftRight ShiftDown ShiftDown ShiftLeft ShiftLeft ShiftUp ShiftUp ShiftRight Esc

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

Re: Переименовать callplugin

Post by Skirda » Wed 29 Feb, 2012 13:50

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

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

Re: Переименовать callplugin

Post by John Doe » Wed 29 Feb, 2012 13:52

Я ничего не пробовал, т.к. фар не собираю сам.

А из описания абсолютно не ясно предназначение этого mmode(3,...)
Что значит разрешает, где разрешает, и зачем их вообще как-то отдельно разрешать (/ запрещать).
Первый вариант считай учебным
Я не понимаю какую роль он выполняет в описании mmode(3,...)
Что этот пример призван проиллюстрировать?

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

Re: Переименовать callplugin

Post by Skirda » Wed 29 Feb, 2012 14:29

ок.
дааавным давно было написано:
svs 19.02.2010 17:18:28 +0300 - build 1412
...
5. Добавлено временное правило KeyMacros/CallPluginRules:dword (по мотивам Mantis#1280)
0 - блокировать макросы при вызове плагина функцией CallPlugin, 1 - разрешить макросы (ахтунг!)
по умолчанию 0 - блокировать
"временное" - чтобы понять на сколько это критично.
т.к. TechInfo у нас зло, то mmode(3) это замена "KeyMacros/CallPluginRules", но с той разницей, что CallPluginRules ты перед стартом Far`а делал, а сейчас можно динамически управлять поведением callplugin из макроса.
По поводу "временное" - пока внятного обоснования дефолтового значения =1 я не видел.
We are the Borg. You will be assimilated.
So Say We All!

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

Re: Переименовать callplugin

Post by John Doe » Wed 29 Feb, 2012 14:52

Это я видел, но понять смысл фразы "блокировать макросы при вызове плагина функцией CallPlugin" невозможно без контекста (который опущен).

В Энциклопедии должно быть самодостаточное описание что за макросы и зачем их блокировать.
Мне это не ясно, честное слово.

И даже перечитав всё вдоль и поперёк я уяснил только следующее:
1) Часть макропоследовательности, следуящая за callplugin не выполняется.
2) Был "techinfo" позволяющий командам следующим за callplugin как-то выполнятся, но при этом возникали проблемы.
Судя по тому, что тикет на мантисе открыт - проблемы остались.
3) Сейчас techinfo заменён официальной (и документированной) функцией, что как бы намекает "пользуйтесь товарищи".

Был недоделанный и недокументированный костыль techinfo, теперь документированный но столь же кривой костыль mmode(3,...).
Где выигрыш?

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

Re: Переименовать callplugin

Post by Max Rusov » Wed 29 Feb, 2012 15:06

John Doe wrote:1) Часть макропоследовательности, следуящая за callplugin не выполняется
Нет. Вы путаете 2 проблемы - синхронность и реентрантность.
То что остаток макропоследовательности выполняется после завершения модальных диалогов вызванных плагином _изнутри_ CallPlugin - это особенность синхронной "природы" CallPlugin и она ничем не регулируется.

Но есть еще одна проблема. Пока работает модальный диалог вызванный изнутри CallPlugin не запускались никакие другие макросы (макродвижек "нереентрантен"). В частности, почему то не работало и автодополнение, видимо оно как то на это завязано. Эту проблему и пытался решить CallPluginRules.

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

Re: Переименовать callplugin

Post by John Doe » Wed 29 Feb, 2012 15:13

Max Rusov wrote:Вы путаете 2 проблемы - синхронность и реентрантность.
Спасибо что разъяснили наконец.
Но получается что использование этого mmode(3,) может привести к падениям, описанным в тикете?

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

Re: Переименовать callplugin

Post by Max Rusov » Wed 29 Feb, 2012 15:15

Надо тестировать

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

Re: Переименовать callplugin

Post by Skirda » Wed 29 Feb, 2012 15:17

John Doe wrote:2) Был "techinfo" позволяющий командам следующим за callplugin как-то выполнятся, но при этом возникали проблемы.
Они и сейчас не выполняются. Речь идет про то, что описал Макс. А именно, что если включен режим, то плагин может подсунуть движку свою последовательность (как пример с дравлайном, там параметр, как макрос, плагином возвращается ФАРу), которую ФАР исполнит, притормозив ту последовательность, которая вызвала плагин через callplugin.
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: 3 times

Re: Переименовать callplugin

Post by Skirda » Wed 29 Feb, 2012 15:18

John Doe wrote:Но получается что использование этого mmode(3,) может привести к падениям, описанным в тикете?
Что и нужно выяснить :-)
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: 3 times

Re: Переименовать callplugin

Post by Skirda » Wed 29 Feb, 2012 15:20

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

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

Re: Переименовать callplugin

Post by John Doe » Wed 29 Feb, 2012 15:22

Из скудного описания следует что mmode(3,) действует на callplugin.
Или эффект распространяется шире, давая возможность вызывать макросы из макросов?

P.S.
Или же речь идёт только о макросах передаваемых параметром, как в примере?

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

Re: Переименовать callplugin

Post by Max Rusov » Wed 29 Feb, 2012 15:32

Замечу, что если Вы решите тестировать новую версию на наличие проблем описанных в тикете, то на актуальных версиях EdtFind это делать бесполезно - он сейчас работает по другой технологии и не открывает диалоги изнутри CallPlugin. Т.е. нужно тестировать на каких-то других примерах.

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

Re: Переименовать callplugin

Post by Skirda » Wed 29 Feb, 2012 16:30

John Doe wrote:Из скудного описания следует что mmode(3,) действует на callplugin.
Только на callplugin.
John Doe wrote:Или эффект распространяется шире, давая возможность вызывать макросы из макросов?
Эээ... не понял. eval(), не?
John Doe wrote:Или же речь идёт только о макросах передаваемых параметром, как в примере?
Ты как то однобоко на этот пример смотришь.
Это в драйвлайне оно как параметр, но сценарий может быть другим - плагин может по той же методе "подсунуть" свою, нужную только ему, последовательность.
We are the Borg. You will be assimilated.
So Say We All!

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

Re: Переименовать callplugin

Post by John Doe » Wed 29 Feb, 2012 17:03

Skirda wrote:
John Doe wrote:Или эффект распространяется шире, давая возможность вызывать макросы из макросов?
Эээ... не понял. eval(), не?
Не. Например в данный момент работает "прозрачный" макрос, ждущий закрытия диалога, типа $while(Dialog) ... eval(waitkey()) $exit
Естественно что в это время все прочие клавиатурные макросы не срабатывают.

Но раз это не так, то выходит что mmode(3,) работает только на callplugin... Как-то это неоправданно: вводить целый глобальный режим для внутренних нужд одной единственной функции.
Не логичнее будет нечто вроде спецпараметра callplugin?
Skirda wrote:плагин может по той же методе "подсунуть" свою, нужную только ему, последовательность.
Мне не нравится само это "подсовывание".
Я правильно понимаю, что если бы не синхронность callplugin, то достаточно было бы просто поместить нужную последовательность после?

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

Re: Переименовать callplugin

Post by John Doe » Wed 29 Feb, 2012 17:20

Например почему просто не воспользоваться асинхронным Plugin.Call?

Code: Select all

plugin.call("C941E865-9C29-485C-99B3-0C710940F2D8")
ShiftRight ShiftRight ShiftDown ShiftDown ShiftLeft ShiftLeft ShiftUp ShiftUp ShiftRight Esc
Ведь так и callplugin можно сделать асинхронным (всё равно он ничего не возвращает).

Вероятно просто пример неудачный.
Приведите реальный пример, когда эта "реентерабельность" действительно нужна.

Locked

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