ProcessMacroFuncW

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

Re: ProcessMacroFuncW

Post by Skirda »

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: 11 times

Re: ProcessMacroFuncW

Post by Max Rusov »

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

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

User avatar
NightRoman
Posts: 5940
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 14 times
Been thanked: 15 times
Contact:

Re: ProcessMacroFuncW

Post by NightRoman »

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

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

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

Code: Select all

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

Code: Select all

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

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

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

Re: ProcessMacroFuncW

Post by John Doe »

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

Yegor
Posts: 1081
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 14 times
Been thanked: 25 times

Re: ProcessMacroFuncW

Post by Yegor »

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: 707
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 2 times

Re: ProcessMacroFuncW

Post by Tim Sobolev »

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

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

Re: ProcessMacroFuncW

Post by John Doe »

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

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

Re: ProcessMacroFuncW

Post by SUSim »

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

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

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

Re: ProcessMacroFuncW

Post by Tim Sobolev »

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

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

Re: ProcessMacroFuncW

Post by Skirda »

Max Rusov wrote:Если парсить все макросы сразу данная оптимизация теряет смысл, так как сразу загрузятся все плагины экспортирующие функции.
Не будут они вызываться каждый раз. Для этого "библиотека" в реестре и нужна (KeyMacro\Funcs). Парсер именно туда смотрит и если чего там не находит - матерится.
А вот когда дело доходит до исполнятора, то он да, попросит менеджер плагинов передать "вот эту какашку вот этому плагину"
We are the Borg. You will be assimilated.
So Say We All!

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

Re: ProcessMacroFuncW

Post by Skirda »

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

Shmuel
Posts: 6148
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 319 times

Re: ProcessMacroFuncW

Post by Shmuel »

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

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

Re: ProcessMacroFuncW

Post by Skirda »

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

User avatar
NightRoman
Posts: 5940
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 14 times
Been thanked: 15 times
Contact:

Re: ProcessMacroFuncW

Post by NightRoman »

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: 5940
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 14 times
Been thanked: 15 times
Contact:

Re: ProcessMacroFuncW

Post by NightRoman »

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

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

Re: ProcessMacroFuncW

Post by SUSim »

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

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

Post Reply

Return to “Development”