Page 3 of 5

Re: ProcessMacroFuncW

Posted: Thu 30 Sep, 2010 17:58
by NightRoman

Latest post of the previous page:

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

Парсинга аргументов плагину не избежать. Но не до такой же степени все валить на плуг, как парсить "%a=sin(%b*pi/2)" - этим пусть макродвижок занимается, плуг пусть только "sin" префикс предоставляет, а макрос принимает результат и уже использует его в выражении макроса, как обычно.

(но это все вразрез с текущей реализацией идет, обсуждаем чисто гипотетически)

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 12:23
by NightRoman
Как дела на этом фронте, можно поинтересоваться?

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 12:47
by Skirda
пока никак.
Затыка:
а) в методе узнаваемости компилятором функций, предоставляемым плагинами. Их, методов, несколько:
1. ручками в реестре
2. плагином, путем жмаканья кнопки в конфигурации плагина, с прописанием в реестре
3. при первой загрузке плагина: фар спросил, плагин выдал на гора
б) в методе вызова:
1. только "этот" плагин - прямой вызов нужной длл
2. любой, кто обработал "эту" функцию - сабжевая функция вернула труе
3. ...

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 12:48
by John Doe
а)3.фар спросил, и записал в реестр (при условии что такой записи ещё нет).
б)1.только тот, что прописан в реестре.

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 12:54
by Max Rusov
Skirda wrote:Затыка...
А не рассматривался вариант, который я предлагал здесь:
http://forum.farmanager.com/viewtopic.p ... 746#p69746

IMHO, это было бы идеальным компромиссом.

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 13:06
by NightRoman
А я предлагаю начать с простого легко реализуемого почти готового шага и посмотреть как оно в в принципе работает. Если выяснится, что в идее вообще что-то проглядели, то и более сложные варианты не нужны (либо мы будем лучше подготовлены, уже с опытом).

Простой первый шаг - это вызывать плагины из макросов по обычным, уже имеющимся префиксам. Все для это уже готово, никто на сам механизм префиксов не жалуется особо. Ничто не мешает вызывать по префиксу не только из комстроки, но из макросов. Я бы сказал даже - это напрашивается. Параметр - одна строка, все как и при вызове из комстроки. Возврат в макрос - ничего, все обработано Фаром обычным образом (либо можно подумать, но что-то тривиальное, конечно, число, чтобы было совместимо с OpenPluginW().

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

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 13:15
by Max Rusov
NightRoman

Ну а чем это, по сути, отличается от CallPlugin? Только расширить его строковым параметром и все. От макросов хотелось бы большего, конечно.

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 13:18
by John Doe
NightRoman wrote:Ничто не мешает вызывать по префиксу не только из комстроки, но из макросов.
Мысль хорошая, особенно если обобщить её до функции Exec(), способной запускать всё.

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 13:25
by NightRoman
Max Rusov wrote:Ну а чем это, по сути, отличается от CallPlugin? Только расширить его строковым параметром и все. От макросов хотелось бы большего, конечно.
В принципе ничем не отличается, если CallPlugin будет раширен строковым параметром, и будет объявлено, что этот путь вызова узаконен, то все ОК. Но ведь этого нет. CallPlugin и без параметра, и вне закона.

Путь с префиксом интуитивен и понятен. Хотим - печатаем в комстроке, хотим - потом забиваем эту команду в макрос. Требует меньше документации, имеет большую сферу применения (и комстрока, и макросы, а синтаксис комстроки один, определенный плагином).

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 13:34
by John Doe
Всё понятно, кроме одного: почему никто не слушает Валентина...
Зачем нужны все предлагаемые "упрощения", если можно сделать по-нормальному?

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 13:40
by NightRoman
John Doe wrote:Зачем нужны все предлагаемые "упрощения", если можно сделать по-нормальному?
Я объяснил. Наличие простого варианта не противоречит "нормальному". Но простой вариант - это логическое и простое расширение уже имеющегося функционала (комстрока), пусть будет и работает. Удобно уже готовые комстроки использовать хоть в макросе, хоть в юзерменю. Простой вариант легче стартануть, начать получать пользу и одновременно изучать и устранять некоторые проблемы, которые будут общими и для "нормального" варианта. Потом и "нормальный" вариант будет проще реализовать, чем на пустом месте. А еще может все увидят, что "нормальный" не так уж и нужен.

P.S. Конечно, множества комстрок для комстроки и для макросов не будут совпадать, но пересение непусто, и это уже хорошо. Из макросов, конечно, можно будет сделать больше, чем из комстроки, одних областей вызова уже больше хотя бы (редактор, диалоги), то есть некоторые префиксы плагина будут уже специально введены и документированы для специального использования в специальных областях.

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 13:52
by Max Rusov
NightRoman
Никто не против "простого" варианта. Более того - он уже есть (CallPlugin). Ну, можно, наверное, сделать CallPluginEx, со строкой. Просто в этой теме обсуждался "хороший" вариант. А Вы, такое впечатление, задались целью всех от него отговорить.

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 13:53
by John Doe
NightRoman wrote:"Нормальный" вариант будет проще реализовать.
Так ведь в титульном посте "нормальный" вариант уже есть, практически готовый, или я чего-то не понимаю?

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 14:02
by NightRoman
Max Rusov wrote:Никто не против "простого" варианта. Более того - он уже есть (CallPlugin). Ну, можно, наверное, сделать CallPluginEx, со строкой. Просто в этой теме обсуждался "хороший" вариант. А Вы, такое впечатление, задались целью всех от него отговорить.
Простого варианта - нет. Недоделанный (нет параметров) - это все-таки нет. Пояснение: мне (FarNet) нужен минимум один параметр, чтобы хоть знать к какому FarNet модулю это относится, их ведь несколько, а FarNet - это просто диспетчер.

Я не пытаюсь отговорить от предлагаемого варианта. И не пытаюсь его критиковать, хоть и не скрываю, что сам не стал бы такую реализацию делать. Конструктивно пытаюсь предложить практически полезный вариант, который и более сложному тоже будет полезен в мелочах. Заводить для этого отдельную тему? Неужели, правда, будет смысл?

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 14:27
by NightRoman
Skirda
С затыкой понятно... Но обдумывание-то продолжается? Прошу не сердится на мою назойливость, я выждал пару месяцев-таки. Желаю успехов.

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 14:33
by John Doe
NightRoman wrote:С затыкой понятно...
Что именно понятно? Выше перечислены альтернативы.