SysIDs for Plugins (idea partially from memo plugin and far2m / far3)#3317
SysIDs for Plugins (idea partially from memo plugin and far2m / far3)#3317elfmz merged 1 commit intoelfmz:masterfrom
Conversation
Подойдёт любой нормальный рандом-генератор, в диапазоне целых чисел от 0 до 0xFFFFFFFF (то есть 32 бита).
Плагин должен проверять значение
Скорее всего это не повредит. |
Из чего именно в far2m генерируется? Из имени каталога плагина или полного названия плагина?
Вариант простого сравнения после отбрасывания бита |
Не, гуиды генерируются не из чего-то, а просто вызывается функция без параметров.
Я уже успел об этом хорошо забыть (с 2012 года много воды утекло). Видимо, функциональности, описанной в энциклопедии, должно хватить, и не надо тех функций, о которых говорил в прошлом сообщении. |
Спасибо за упоминание энциклопедии - там оказывается при наличии |
|
Cори за глупый вопрос, а почему нельзя human-readable строками? Оптимизацию вызова потом сделать совершенно несложно. Даже можно 8символьными строками, и хранить их в uint64_t, этого вполне хватит, multiarc, netrocks - все это вполне себе 8символьное |
|
@elfmz Far3 пошёл дальше, в нём вместо SysID используются GUID'ы. Тут уже полная гарантия уникальности. Ну и есть механизм, предотвращающий загрузку плагина с гуидом, который уже загружен. |
Здесь я с удивлением на примере плагина memo увидел, что SysID и Сейчас склоняюсь, что сам вызов |
Тут надо рассматривать, пожалуй, не удобство, а предоставляемые возможности. В API far2 callplugin получает из макроса параметр (целое число или строку) и, таким образом, макрос может запускать разные действия плагина. То, что плагин это должен обрабатывать, это естественно, без труда не вытащишь рыбку... В API far3/far2m |
a6630ec to
43b9788
Compare
|
@akruphi Вроде плагин Python не получил SysID в этом PR. |
Да. Я не стал туда залезать, ибо Python сам по себе не запускается, а запускается каждый из его внутренних подплагинов, которым соответствует свой из При это в части |
Сам по себе запускается, после чего зовёт требуемый подплагин. При незначительной доработке плагина можно организовать вызов подплагинов из макросов, передавая в |
Спасибо. Подумаю. Какой для python plugin назначен ID в far2m? Судя по #3173 (comment) автор python далее их развитием активно заниматься не планирует. |
Поскольку без сотрудничества с автором это ничего не даст, наверное лучше не добавлять. То есть зря я эту тему поднял :(
|
|
@shmuz большое спасибо за советы и участие. Вопрос - из всех добавленных в плагины SysID у двух плагинов inside и multiarc он почему-то не применился (у остальных |
void PluginA::ConvertPluginInfo(oldfar::PluginInfo &Src, PluginInfo *Dest)
{
FreePluginInfo();
PI.StructSize = sizeof(PI);
PI.Flags = Src.Flags;
+ PI.SysID = Src.SysID; |
Now we can call plugins from macros using `callplugin(0xAAAAAAAA)` which is independent on language and hotkey in Plugin menu via F11. A pluguin's SysID may see via `far:about` or in plugin's source code. Be careful: open plugin only from appropriate places.
|
@shmuz спасибо большое. Оба замечания внес (и Логику обработки вызовов в самих плагинах в этом PR далее не трогаю. |
Now we can call plugins from macros using
callplugin(0xAAAAAAAA)which is independent on language and hotkey in Plugin menu via F11.A pluguin's SysID may see via
far:aboutor in plugin's source code.Be careful: open plugin only from appropriate places.
@shmuz просьба подсказать алгоритм генерации SysIDs для плагинов. Есть ли какой-то удобный инструмент?
Сейчас в far2l есть плагины, отсутствующие в far2m (edsort, farftp, hexitor, ImageViewer, truncate) - как и какие для них сгенерировать IDs?
Также несколько вопросов - интересует опыт как это решено в far2m / far3
(перетаскивать даже древние реализации
plugin.callиplugin.menuя пока не готов):(например drawline не из редактора), то весь far2l подвисает,
то как логичнее:
PluginManager::CallPlugin(проверку на контекст запуска и не запускать из недопустимого контекста?OpenPluginfarplug-wide.hпеременнаяDWORD SysIDсидела под#ifdef FAR_USE_INTERNALS?Я убрал это условие, но точно ли это не противоречит какой-то древней логике?