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

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

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

Post by Skirda »

Latest post of the previous page:

John Doe wrote:Как-то это неоправданно: вводить целый глобальный режим для внутренних нужд одной единственной функции.
Т.е. mmode(1) тебя не смущает, а mmode(3) напрягает. Странная ситуация.
John Doe wrote:Не логичнее будет нечто вроде спецпараметра callplugin?
Ты готов переписать все макросы, юзающие callplugin?
John Doe wrote:
Skirda wrote:плагин может по той же методе "подсунуть" свою, нужную только ему, последовательность.
Мне не нравится само это "подсовывание".
Если афтор плагина неудосужился описать что делает плагин во время callplugin, то это явно не к нам.
С другой стороны тебя не напрягает "F11 c 2", например?
Откуда уверенность, что плагин "foo" с хоткеем "c" делает все верно в ответ на "2"?
John Doe wrote:Я правильно понимаю, что если бы не синхронность callplugin, то достаточно было бы просто поместить нужную последовательность после?
Типа того, но! Ты уверен, что вызвав callplugin плагин не сделает MSSC_POST?
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Max Rusov wrote:Это ортогональные вещи.
Я как раз подумываю что не совсем.
Max Rusov wrote:Синхронный вызов тоже нужен, я же приводил пример.
Про возвращаемое значение. Разве callplugin сейчас возвращает что-то кроме ошибок?
Не спорю, что синхронный вызов может понадобится тоже, но об этом отдельно.
Max Rusov wrote:сейчас у людей уже довольно много макросов которые могут поломаться
"Могут" это такое, а вот плагины "по факту" регулярно ломаются и ничего, все понимают.
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

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

Post by SUSim »

Я говорил, про то - что диалог появившийся посредством F11 макросом както можно учесть, а вот если диалог вдруг возник после calplugin макросом обработать невозможно :(
А по большому счету такое поведение при появлении диалогов,запросов и т.п. для макросов хорошо бы разделить:
1) появился диалог-запрс (не важно чей самого фара или макроса) - выполнять макрос дальше.
2) появился диалог-запрс (не важно чей самого фара или макроса) - приостановить макрос обрабатывать действия пользователя, потом продолжить макрос. Правда это ИМХО сложно реализовать и тяжело универсально сделать, надо подумать и обсудить в какой момент фар должен приостанавливать макрос в какой продолжать!!! :?
SimSU ··· ·· -- ··· ··-
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

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

Post by Skirda »

SUSim wrote:Действительно чем диалог плагина вызванного callplugin, а не через F11 должен отличаться поведением? (для макросов)
Технически ничем - т.е. и там и там вызывается одна и та же OpenW. В любом случае появление плагинового диалога - это мы все в той же функции OpenW, пока диалог не закроем и не вернемся из OpenW - мы по прежнему в плагине.

Разница здесь как раз в том, что mmode(3,0) не замораживает текущий макрос (технически: не сохраняется состояние машины и не движку не разрешается ваще работать, пока не вернемся из OpenW, для юзера из callplugin).

С другой стороны mmode(3,1) пушит текущее состояние машины перед вызовом плагина и разрешает последующий вход в макродвиг. НО! Т.к. мы все еще в OpenW (синхронный режим!), то могут исполняться макросы, которые из OpenW ФАРу отдаст плагин. Дальше просто - при выходе из OpenW (читай "из callplugin") машина восстанавливается и продолжается последовательность после callplugin; макропоследовательность, которую плагин кинул ФАРу из OpenW, обрывается (даже если не успела исполнится) (здесь могу наврать :quiet: - посмотреть надо)
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Skirda wrote:Т.е. mmode(1) тебя не смущает, а mmode(3) напрягает.
Ага. (Не)прорисовка экрана она влияет на всё и всех.
Это действительно режим в глобальном смысле.
А mmode(3) влияет только на callplugin, как эдакий внешний её параметр.
Странная ситуация.
Skirda wrote:Ты готов переписать все макросы, юзающие callplugin?
Одним регэкспом.

И цитирую Писание:
http://api.farmanager.com/ru2/macro/macrocmd/prop_func/general.html#callplugin wrote:Внимание!

Функция - экспериментальный прототип планируемого функционала по взаимодействию макросов и плагинов. Вы используете ее на свой страх и риск. Поддержка функционала со стороны разработчиков не гарантирована. После появления необходимого фунцкионала callplugin будет удалена.
Skirda wrote:Ты уверен, что вызвав callplugin плагин не сделает MSSC_POST?
При этом что конкретно произойдёт? Его макрос добавится в конец очереди, и будет выполнен последним?
Чем это будет отличаться от варианта когда плагин вызван по F11?
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

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

Post by Max Rusov »

John Doe wrote:
Max Rusov wrote:сейчас у людей уже довольно много макросов которые могут поломаться
"Могут" это такое, а вот плагины "по факту" регулярно ломаются и ничего, все понимают.
Ну вот такой пример: EdtFind умеет вот такие макросы:

CallPlugin(EdtFind, "Find:foo Replace:bar Prompt:1")

Ожидается, что CallPlugin вернет управление, когда все замены будут выполнены. Если он вдруг станет асинхронным - то ситуация изменится: макрос "побежит" дальше как только выскочит диалог подтверждения замены, что мне в данном случае совершенно не хочется.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

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

Post by Skirda »

На счет синхронно/асинхронно.
Говоря/предлагая/фантазируя про синхронно-асинхронность учитывайте тот факт, что макродвиг вызывается из функции сбора входных консольных эвентов. Т.е., если плагин ни разу не передал управление ФАРу из функции OpenW (например, для редакторных плагинов - ни разу не вызвал ECTL_READINPUT), нихрена вы не получите (hint: ищите в сорцах места вызова GetInputRecord()), точнее получите все тот же синхронный режим.
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Max Rusov wrote:CallPlugin(EdtFind, "Find:foo Replace:bar Prompt:1")
Ну а как мы до этого жили?
Макросом заполняли диалог, и макросом же жали Enter/Ok. Чем ваш вариант отличается?
Тем что может выскочить подтверждение? Там мы его умеем макросом обрабатывать.

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

Я всё клоню к тому, что по умолчанию асинхронность удобнее, поскольку банально нужна в 95%
Синхронность тоже нужна, но не по умолчанию.
...получите все тот же синхронный режим.
Если плагин не вызвал ECTL_READINPUT то вероятно его синхронность нам и не помешает.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

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

Post by Skirda »

John Doe wrote:(Не)прорисовка экрана она влияет на всё и всех.
Это действительно режим в глобальном смысле.
А mmode(3) влияет только на callplugin, как эдакий внешний её параметр.
Добавь сюда зоопарк плагинов, вызываемых через callplugin, и получишь ровно столько.
John Doe wrote:
Skirda wrote:Ты готов переписать все макросы, юзающие callplugin?
Одним регэкспом.
На свой комп не пущу :-)
John Doe wrote:И цитирую Писание
Это мне в целях напоминания было представлено?
Я хозяин своих слов - посему могу эти слова из писания забрать обратно :ha:
А могу удалить callplugin в пользу чего-то более вменяемого.
Все зависит от того, как дальше попрет.
John Doe wrote:
Skirda wrote:Ты уверен, что вызвав callplugin плагин не сделает MSSC_POST?
При этом что конкретно произойдёт? Его макрос добавится в конец очереди, и будет выполнен последним?
Чем это будет отличаться от варианта когда плагин вызван по F11?
mmode(3,0) - добавит в конец
mmode(3,1) - исполнит...
...я это выше объяснил :x

ЗЫ.
В пользу доп.параметра (подразумеваю, что его хотя видеть первым) callplugin пока не услышал вменяемых доводов.
We are the Borg. You will be assimilated.
So Say We All!
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

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

Post by Max Rusov »

John Doe wrote:Я всё клоню к тому, что по умолчанию асинхронность удобнее, поскольку банально нужна в 95%
Синхронность тоже нужна, но не по умолчанию.
Ну так самое очевидное решение - добавить новый вызов, который будет асинхронным. Все счастливы.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Это мне в целях напоминания было представлено?
Нет, это же для всех писано. И эти все потенциально готовы переписать свои несколько макросов.
mmode(3,0) - добавит в конец
mmode(3,1) - исполнит...
Мы говорим о случае если callplugin станет асинхронным.
Ну сделает плагин MSSC_POST, в чём проблема?
В пользу доп.параметра (подразумеваю, что его хотя видеть первым) callplugin пока не услышал вменяемых доводов
Выше Max Rusov предлагал обойтись и без режима и без параметра.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Max Rusov wrote:
John Doe wrote:Я всё клоню к тому, что по умолчанию асинхронность удобнее, поскольку банально нужна в 95%
Синхронность тоже нужна, но не по умолчанию.
Ну так самое очевидное решение - добавить новый вызов, который будет асинхронным. Все счастливы.
...и в 95% случаев используют новый. Возможно.

Но что если...

Плагин же сам прекрасно может определить где ему нужна синхронность, а где нет.
Может быть есть возможность дать об этом знать фару?

Плагин получает управление, смотрит что мы ему там передали, видит что синхронность тут не нужна, и командует макродвижку мол беги дальше.
Может это чистая фантастика и нереализуемо тут, но согласитесь: пользователь может и не знать, а плагин точно знает.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

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

Post by Max Rusov »

John Doe wrote:пользователь может и не знать, а плагин точно знает.
Как это плагин может знать? Плагин открыл диалог, откуда ему знать оставшаяся часть макроса подразумевает какую-то автоматизацию внутри диалога (расставить флажки, etc.) или ждет завершения диалога, чтобы сделать что-то после?...
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

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

Post by Skirda »

Короче, хватит парится. F11 в руки и вперед - все станет ясно и прозрачно.

Callplugin создавался не для широкого круга, а по спецзаказу одним единственным человеком с весьма конкретным ТЗ - замена "F11 хоткей" с доп.параметром "пункт меню плагина" - т.е. цепочку "F11 c 1" превратить в callplugin(sysid,1).
Не моя вина, что кому то это понадобилось еще и спасибо тем, кто помог его уточнять (фактически в рамках все того же ТЗ).

Асинхронным callplugin никогда не будет по причинам описанным выше.
Сейчас задача проста - понять какие есть глюки в режиме mmode(3,1).
mmode(3,1) - это не ассинхронный режим (не параллельный, не многонитевый). Это обычная заморозка основной последовательность и разрешение повторно войти в макродвиг.
We are the Borg. You will be assimilated.
So Say We All!
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

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

Post by SUSim »

ИМХО проще всего (для фартим) сделать так:
- если calplugin был без параметров - это эквивалентно вызову через F11 и дальнейшие макродействия должны влиять на диалог(если плагин его выведет), а остальное оставить на совести плагино- и в первую очередь макросо- сочинителей...
- если calplugin был с параметрами, то плагин должен отработать без всяких дополнительных запросов (возвращая соответствующие коды ошибок), и это уже на совести плагинописателя - предусмотреть всевозможные коллизии...

Skirda
F11 и вперёд... неудобно из-за хоткеев/совпадения_имен/языковых_настроек в меню плагинов! ...зачем-то вы придумали гуиды не только для самих плагинов но и для пунктов меню (и это не лишнее!) ?
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Skirda wrote:ТЗ - замена "F11 хоткей" с доп.параметром "пункт меню плагина" - т.е. цепочку "F11 c 1" превратить в callplugin(sysid,1).
Skirda wrote:Асинхронным callplugin никогда не будет по причинам описанным выше.
Не понял. "F11 c 1" выполняется асинхронно (не тормозит макропоследовательность ), а callplugin - синхронно. Где ж замена?

SUSim
Реальна замена F11 есть, читайте мантис, ссылки выше.


P.S.
Меня лично не интересует "асинхронность" в том смысле чтобы что-то выполнялось там параллельно, нет.
Просто хочется чтобы вызов плагинов был действительно похож на F11.
Locked

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