Расширение Plugin API для поддержки CustomPlugins
Расширение Plugin API для поддержки CustomPlugins
Предлагаю добавить в Plugin API возможность любому плагину обеспечивать "прокси" между Far API и "ненативным" плагином.
Плюсы:
- Вынесение кода поддержки ANSI плагинов из ядра в свой, отдельный, плагин.
- Узаконивание решений, вроде, Wrap Far2 to Far3
- Возможность писать плагины на любом интерпретируемом языке, хоть на bat командах. Например, полноценные плагины на Lua, вместо недо-скрипто-макросов, недо-плагин-прокладок (навроде LuaFAR for Editor)
- Возможность, почти нативно, прикрутить плагины от стороних программ
Фазически это будет так:
В ядре определяется класс "PluginCustom", дитё класса "Plugin"
При подгрузке плагинов, из них экспортируется функция "ControlCustomPlugins", которой мастер-плагин рассказывает ядру о своих возможностях поддержки "ненативных" плагинов.
После цикла прохода по всем плагинам и их загрузки (PluginManager::LoadPlugins), делается дополнительный проход по плагинокаталогу для каждого мастер-плагина, который экспортировал "ControlCustomPlugins". В этом проходе ищутся файлы мо маске, которую запросил мастер-плагин через функцию "ControlCustomPlugins". Для проверки каждого файла, вызывается не "IsModulePlugin", а мастер-плагин. Если он подтвердил, что файл является его модулем - тогда создается объект класса "PluginCustom", мастер-плагин сам заполняет его таблицу экспорта (теоретически, заполняет сам на себя те функции, которые, по его мнению, поддерживаются найденым "ненативным" модулем).
Далее, мастер-плагин будет является "прокси" между FarAPI и "ненативным" модулем.
Плюсы:
- Вынесение кода поддержки ANSI плагинов из ядра в свой, отдельный, плагин.
- Узаконивание решений, вроде, Wrap Far2 to Far3
- Возможность писать плагины на любом интерпретируемом языке, хоть на bat командах. Например, полноценные плагины на Lua, вместо недо-скрипто-макросов, недо-плагин-прокладок (навроде LuaFAR for Editor)
- Возможность, почти нативно, прикрутить плагины от стороних программ
Фазически это будет так:
В ядре определяется класс "PluginCustom", дитё класса "Plugin"
При подгрузке плагинов, из них экспортируется функция "ControlCustomPlugins", которой мастер-плагин рассказывает ядру о своих возможностях поддержки "ненативных" плагинов.
После цикла прохода по всем плагинам и их загрузки (PluginManager::LoadPlugins), делается дополнительный проход по плагинокаталогу для каждого мастер-плагина, который экспортировал "ControlCustomPlugins". В этом проходе ищутся файлы мо маске, которую запросил мастер-плагин через функцию "ControlCustomPlugins". Для проверки каждого файла, вызывается не "IsModulePlugin", а мастер-плагин. Если он подтвердил, что файл является его модулем - тогда создается объект класса "PluginCustom", мастер-плагин сам заполняет его таблицу экспорта (теоретически, заполняет сам на себя те функции, которые, по его мнению, поддерживаются найденым "ненативным" модулем).
Далее, мастер-плагин будет является "прокси" между FarAPI и "ненативным" модулем.
- HaRT
- Moderator
- Posts: 10823
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Расширение Plugin API для поддержки CustomPlugins
Исходники открыты — присылайте патч.
Ну или ждите добровольцев…
Ну или ждите добровольцев…
Фар есть инструмент, а не нянька. © 2009 DrKnS
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Расширение Plugin API для поддержки CustomPlugins
Похожее предлагалось пару-тройку лет назад. Для меня было актуально в связи с разработкой FarNet, чтобы его модули были "полноценными плагинами", а не субплагинами с ограничениями в силу текущей архитектуры. Но это не двинулось, никому особо не надо. Включая и меня, нашел обходные пути, где можно - своя локализация, свои настройки и т.п. Только хелп для модулей нельзя прикрутить никак, это не обойти. Но жить, в общем, можно.
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: Расширение Plugin API для поддержки CustomPlugins
Если бы его было так просто вынести, уже давно бы вынесли.- Вынесение кода поддержки ANSI плагинов из ядра в свой, отдельный, плагин.
А чем вам не нравится вариант, используемый во враппере для far2 (одна большая общая dll с имплементацией и по одному маленькому одинаковому dll-загрузчику на каждый "плагин")?
- WARP ItSelf
- Самый умный
- Posts: 1011
- Joined: Tue 15 Mar, 2005 23:19
- Contact:
Re: Расширение Plugin API для поддержки CustomPlugins
NightRoman
Ну, если сабплагинам не давать PluginStartupInfo, то проблемы, да. А так только локализацию свою делать приходится.
Ну, если сабплагинам не давать PluginStartupInfo, то проблемы, да. А так только локализацию свою делать приходится.
Никто не знал, а я...
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Расширение Plugin API для поддержки CustomPlugins
Я не понял, если честно. О чем именно речь, что должно решить давание PluginStartupInfo суб-плагинам?WARP ItSelf wrote:NightRoman
Ну, если сабплагинам не давать PluginStartupInfo, то проблемы, да. А так только локализацию свою делать приходится.
- WARP ItSelf
- Самый умный
- Posts: 1011
- Joined: Tue 15 Mar, 2005 23:19
- Contact:
Re: Расширение Plugin API для поддержки CustomPlugins
Доступ к возможности сохранять настройки вместе с плагином-родителям, возможность показывать какой угодно хелп и все остальные плюшки плагина-родителя за вычетом локализации. Куда уж полноценнее?
Никто не знал, а я...
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Расширение Plugin API для поддержки CustomPlugins
Извини, но ты явно не курил это. А я курил.
Где будут сохраняться настройки? У всех модулей в одном файле одного родительского плагина. И это неудобно. Или даже неприемлимо. Что если *один* модуль надо на другой комп с настройками перенести, например? Весь файл настроек нельзя, на том компе затрется все остальное.
Показывать какой угодно хелп - не проблема, как раз. Но только для этого надо что-то от модуля обязательно что-то запустить, и тогда можно смотреть *контекстный* хелп. Проблема в F1 \ ShiftF2, например - как посмотреть основной хелп модуля без его запуска? Никак.
Где будут сохраняться настройки? У всех модулей в одном файле одного родительского плагина. И это неудобно. Или даже неприемлимо. Что если *один* модуль надо на другой комп с настройками перенести, например? Весь файл настроек нельзя, на том компе затрется все остальное.
Показывать какой угодно хелп - не проблема, как раз. Но только для этого надо что-то от модуля обязательно что-то запустить, и тогда можно смотреть *контекстный* хелп. Проблема в F1 \ ShiftF2, например - как посмотреть основной хелп модуля без его запуска? Никак.
- WARP ItSelf
- Самый умный
- Posts: 1011
- Joined: Tue 15 Mar, 2005 23:19
- Contact:
Re: Расширение Plugin API для поддержки CustomPlugins
У меня минимум 2 плагина с субплагинами уже давно. Так что курим мы одно и тоже.
1. По первому вопросу претензии понятны. Но не думаю, что этим должен заниматься Far. Т.е. я не думаю, что он должен предоставлять апи, по которому будут сохраняться произвольные настройки чего угодно в отдельную базу. Сам храню настройки в xml, но считаю, что в целом хранение их вместе с основным плагином вполне оправдано.
Тут, безусловно, можно спорить.
2. Не до конца понял вторую проблему. Имеется в виду, что эти модули не увидеть в общем списке? Я для этого делал автогенерящийся Help со списком.
1. По первому вопросу претензии понятны. Но не думаю, что этим должен заниматься Far. Т.е. я не думаю, что он должен предоставлять апи, по которому будут сохраняться произвольные настройки чего угодно в отдельную базу. Сам храню настройки в xml, но считаю, что в целом хранение их вместе с основным плагином вполне оправдано.
Тут, безусловно, можно спорить.
2. Не до конца понял вторую проблему. Имеется в виду, что эти модули не увидеть в общем списке? Я для этого делал автогенерящийся Help со списком.
Никто не знал, а я...
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Расширение Plugin API для поддержки CustomPlugins
Ну сделай F1 \ ShiftF2 - показывается хелп плагинов. Там нельзя показать хелп модулей, можно только хелп родительского плагина.WARP ItSelf wrote:2. Не до конца понял вторую проблему.
Я не знаю, что ты хочешь доказать. Я уже написал, что жить можно и так, но определенные неудобства есть. Что не так?
- WARP ItSelf
- Самый умный
- Posts: 1011
- Joined: Tue 15 Mar, 2005 23:19
- Contact:
Re: Расширение Plugin API для поддержки CustomPlugins
Имеется в виду, что эти модули не увидеть в общем списке? Я для этого делал автогенерящийся Help со списком.
Я ничего не пытаюсь доказать, я лишь пытаюсь выяснить серьезность твоих проблем. А вот ты что-то начал наезжать.
Я ничего не пытаюсь доказать, я лишь пытаюсь выяснить серьезность твоих проблем. А вот ты что-то начал наезжать.
Никто не знал, а я...
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Расширение Plugin API для поддержки CustomPlugins
Автогенерящийся хелп - как-то это уже перебор для меня, есть полезнее вещи пока в планах. Серьезность моих проблем весьма мала.WARP ItSelf wrote:Имеется в виду, что эти модули не увидеть в общем списке? Я для этого делал автогенерящийся Help со списком.
Я ничего не пытаюсь доказать, я лишь пытаюсь выяснить серьезность твоих проблем. А вот ты что-то начал наезжать.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Расширение Plugin API для поддержки CustomPlugins
Но подытожим. Родительскому плагину можно сделать:
-- автогенерация хелпа для модулей
-- свои настройки для модулей
-- своя локализация модулей
Кроме хелпа у меня все сделано давно, мне не надо. Но кому-то еще, каждому, кто будет писать плагин с модулями надо будет эти вещи делать самому тоже.
-- автогенерация хелпа для модулей
-- свои настройки для модулей
-- своя локализация модулей
Кроме хелпа у меня все сделано давно, мне не надо. Но кому-то еще, каждому, кто будет писать плагин с модулями надо будет эти вещи делать самому тоже.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Расширение Plugin API для поддержки CustomPlugins
А, и еще забыл кеширование инфы команд модулей, если плагин не собирается каждый раз грузить всю охапку модулей, даже есть пользуется только один. (В Фарнет это тоже сделано.)
Может, и еще что забыл. Вот и получается, что для того чтобы грамотно написать полноценный плагин-фреймворк для модулей, надо порядочную работу проделать.
Может, и еще что забыл. Вот и получается, что для того чтобы грамотно написать полноценный плагин-фреймворк для модулей, надо порядочную работу проделать.