ProcessMacroFuncW

Разработка Far.
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

Re: ProcessMacroFuncW

Post by Skirda » Tue 30 Nov, 2010 15:34

Latest post of the previous page:

Max Rusov wrote:А не рассматривался вариант, который я предлагал здесь
да, про намеспасе я забыл написать, tnx
на счет грузить потом - а смысл? или у тебя разница между загрузкой фара с макросами и без в десятки раз различается (по скорости)?
We are the Borg. You will be assimilated.
So Say We All!

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

Re: ProcessMacroFuncW

Post by Max Rusov » Tue 30 Nov, 2010 15:48

Нет, смысл в другом. В реестр не надо будет писать определения макрофункций - только namespace. Когда дело доходит до разбора макросов сначала парсится namespace (math.sin(1)). Встретив namespace можно загрузить соответствующий плагин (связь namespace-плагин мы знаем), он, при загрузке, зарегистрируем свои функции - парсер может продолжить работу.

Если парсить все макросы сразу данная оптимизация теряет смысл, так как сразу загрузятся все плагины экспортирующие функции.

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 11 times
Contact:

Re: ProcessMacroFuncW

Post by NightRoman » Tue 30 Nov, 2010 15:50

Skirda
Если бы макросы были основным инструментом автоматизации Фар или бы сложность реализации 1 и 2 были бы сравнимы, я бы согласился на 2 безоговорочно, а так - не уверен.

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

Хочется иметь простой способ вызова плуга из макроса не через меню, без которого вообще можно обойтись и не мусорить в UI, а напрямую. Такие макросы это одна строка типа:

Code: Select all

CallPluginByPrefix("prefix: operation param")
Также вызывается из комстроки:

Code: Select all

> prefix: operation param
И ничего не надо настраивать и регистрировать вообще, кроме префиксов. Но это уже сделано в Фаре.

Хорошо, понятно вроде, что никто не против этого варианта, но он и не планируется. Но предложить я считал не лишним.

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

Re: ProcessMacroFuncW

Post by John Doe » Tue 30 Nov, 2010 16:15

Max Rusov wrote:В реестр не надо будет писать определения макрофункций - только namespace.
А в чём тут выигрыш?

Yegor
Posts: 962
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 3 times
Been thanked: 12 times

Re: ProcessMacroFuncW

Post by Yegor » Tue 30 Nov, 2010 16:27

1) Я, все-таки, за человеческий вариант:

Code: Select all

sin(%i)/cos(PI)
2) Я за (обязательное?) наличие namespace-ов/объектов:

Code: Select all

MyMath.sin(%i)/YourMath.cos(PI)
3) Не вижу проблемы регистрировать namespaces в реестре (даже руками).
Например, в Firebird/Interbase "user defined functions" должны быть зарегистрированы в базе, перед использованием.

4) Интерфейс для регистрации и использования namespace/объектов/ф-й можно слизать у MS с его IActiveScript.
Соответственно плагины должны возвращать объекты с реализацией IDispatch и быть похожими на COM объекты

Это мысли вслух.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин

User avatar
Tim Sobolev
Posts: 703
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time

Re: ProcessMacroFuncW

Post by Tim Sobolev » Tue 30 Nov, 2010 17:28

John Doe wrote:а)3.фар спросил, и записал в реестр (при условии что такой записи ещё нет).
б)1.только тот, что прописан в реестре.
Тоже так считаю, причём каждый плагин предоставляет один или несколько namespac'ов, связанных только с ним для однозначного указания нужной макрофункции.

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

Re: ProcessMacroFuncW

Post by John Doe » Tue 30 Nov, 2010 18:14

Как насчёт одноимённых неймспейсов, тоже надо предусматривать?
А ситуация с одноимёнными функциями может разрулиться и без неймспейсов, через переопределение названия в реестре.

User avatar
SUSim
Posts: 1520
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 8 times

Re: ProcessMacroFuncW

Post by SUSim » Tue 30 Nov, 2010 18:41

Конечно написать sin(%a) проще, чем callplugin({Guid},sin,%a) но заморачиваться по этому поводу, ИМХО, не надо...
нэйм спэйс, по моему не нужен, проще разрулить в реестре при коллизиях - типа алиасов.

Да, кстати, проще ввести алиасы, да их и вводить почти не придется (есть же eval(%%макрос_пременной)) там каждый может прописать все что ожидает... только чуть расширить бы его чтобы параметры передать...
SimSU ··· ·· -- ··· ··-

User avatar
Tim Sobolev
Posts: 703
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time

Re: ProcessMacroFuncW

Post by Tim Sobolev » Tue 30 Nov, 2010 19:21

John Doe wrote:Как насчёт одноимённых неймспейсов, тоже надо предусматривать?
А ситуация с одноимёнными функциями может разрулиться и без неймспейсов, через переопределение названия в реестре.
Неймспейс должен однозначно характеризовать макро-модуль. Если совпадают -- выводим предупреждение с именем модулей, где дублируются и не грузим или грузим первый попавшийся. А городить гуиды в текст макроса вообще не кошерно.

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

Re: ProcessMacroFuncW

Post by Skirda » Tue 30 Nov, 2010 20:04

Max Rusov wrote:Если парсить все макросы сразу данная оптимизация теряет смысл, так как сразу загрузятся все плагины экспортирующие функции.
Не будут они вызываться каждый раз. Для этого "библиотека" в реестре и нужна (KeyMacro\Funcs). Парсер именно туда смотрит и если чего там не находит - матерится.
А вот когда дело доходит до исполнятора, то он да, попросит менеджер плагинов передать "вот эту какашку вот этому плагину"
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: ProcessMacroFuncW

Post by Skirda » Tue 30 Nov, 2010 20:09

NightRoman wrote:Хорошо, понятно вроде, что никто не против этого варианта, но он и не планируется. Но предложить я считал не лишним.
Так, понял.
Это не относится к сабжу. Идея нормальная, но несколько в иной плоскости. Для этого нужно допилить каллплюгин. Считай, что это другой вариант вызова макрофункций (который давай обсуждать не здесь).
We are the Borg. You will be assimilated.
So Say We All!

Shmuel
Posts: 5723
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 203 times

Re: ProcessMacroFuncW

Post by Shmuel » Tue 30 Nov, 2010 21:40

В качестве нейм-спейсов можно использовать префиксы командной строки плагинов.

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

Re: ProcessMacroFuncW

Post by Skirda » Wed 01 Dec, 2010 07:34

Shmuel wrote:В качестве нейм-спейсов можно использовать префиксы командной строки плагинов.
хмм... пельмени с малиновым вареньем? оригинально.
We are the Borg. You will be assimilated.
So Say We All!

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 11 times
Contact:

Re: ProcessMacroFuncW

Post by NightRoman » Wed 01 Dec, 2010 12:41

Skirda wrote:Так, понял.
Это не относится к сабжу. Идея нормальная, но несколько в иной плоскости. Для этого нужно допилить каллплюгин. Считай, что это другой вариант вызова макрофункций (который давай обсуждать не здесь).
Это очень хорошо. Обсуждать только вроде тут нечего, прямолинейней варианта, чем обобщение вызова из комстроки по префиксу на случай макросов, наверное, придумать нельзя. Мне по-прежнему кажется, что было бы практично начать именно с этого варианта. Мои нужды (FarNet и его модули и PowerShellFar и его команды и скрипты) он покроет на 100%, думаю, что и многим другим плагинам покроет нужды на 100% тоже. Дальше можно было бы продолжить работу и над более продвинутым вариантом, чтобы покрыть потребности удобного кодирования макросов. Но хозяин - барин, все в порядке, ждем любого варианта.

P.S.

Маленький пример для наглядности, да и хочется помечтать просто.

Дано: хотим в PowerShellFar для редактора реализовать операцию "выделенный текст преобразовать в верхний регистр".

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

Code: Select all

F11 <хоткей PowerShellFar> <хоткей подменю> <хоткей данной команды ToUpper>
Соответственно надо озаботится всеми хоткеями и т.п.
- ну и где-то надо разместить команду PowerShell

Code: Select all

$Far.Editor.SetSelectedText($Far.Editor.GetSelectedText().ToUpper())
2) Как было бы с "допиленным" callplugin:
- создаем макрос для редактора

Code: Select all

callplugin(">: $Far.Editor.SetSelectedText($Far.Editor.GetSelectedText().ToUpper())")
Все. Не нужны UI меню, хоткеи и т.п. Красота...

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 11 times
Contact:

Re: ProcessMacroFuncW

Post by NightRoman » Wed 01 Dec, 2010 16:25

John Doe wrote:Мысль хорошая, особенно если обобщить её до функции Exec(), способной запускать всё.
Я сначала не понял, что имелось в виду, теперь дошло - обычная Фаровская комстрока, только из макроса, хоть с префиксом плагина, хоть без. Было бы очень неплохо, да.

User avatar
SUSim
Posts: 1520
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 5 times
Been thanked: 8 times

Re: ProcessMacroFuncW

Post by SUSim » Wed 01 Dec, 2010 18:45

NightRoman wrote:
John Doe wrote:Мысль хорошая, особенно если обобщить её до функции Exec(), способной запускать всё.
Было бы очень неплохо, да.
про это писалось уже не раз... я тогда свой плагин выкину! и пункт юзерменю !??! не нужен будет, и история портиться не будет, и .... ПЛЮСОВ от обертки выполнения команды комстроки из макросов много !!!

но это не совсем по этой теме :(
SimSU ··· ·· -- ··· ··-

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

Re: ProcessMacroFuncW

Post by Skirda » Mon 17 Jan, 2011 19:52

NightRoman wrote:2) Как было бы с "допиленным" callplugin:
- создаем макрос для редактора

Code: Select all

callplugin(">: $Far.Editor.SetSelectedText($Far.Editor.GetSelectedText().ToUpper())")
Здесь выход один (что бы не ломать callplugin) - настроить первый параметр у callplugin в 0 (типа, обрабатываем префикс)
...или удавить callplugin (перенеся наработки на новую, всем удобную функцию)
We are the Borg. You will be assimilated.
So Say We All!

Post Reply

Return to “Development”