View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003484 | Wishes.Plugins | Arclite | public | 2017-09-08 17:16 | 2018-01-09 08:35 |
Reporter | buniak_a_h | Assigned To | 2useven10 | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Summary | 0003484: Выполнение функций плагина через вызовы Plugin.Call | ||||
Description | Для нормального использования плагина в макросах очень полезно было бы сделать вызов основных функций плагина через вызов Plugin.Call. Сейчас есть возможность вызывать функции плагина из командной строки через префикс (по умолчанию - arc:). Минус этого способа в том, что эти команды остаются в истории, а это не всегда желательно (и даже допустимо). Причём, не помогает даже указание Far.DisableHistory(0) перед формированием командной строки. | ||||
Tags | No tags attached. | ||||
|
Far.DisableHistory(-1) |
|
А почему -1? В описании написано: 0 - запрет сохранения командной строки; -1 - общий запрет всех историй. Я все истории запрещать опасаюсь: макрос вызывается из неизвестного контекста; потом потеряется история поисков (например). Функции Far.EnableHistory я не нашёл (что, кстати, странно... Т.е. запретить - можно, даже проверить, запрещено ли, можно. А восстановить состояние - нет?) |
|
Используется битовая маска - что запрещать. -1 = всё (с запасом), ф-я возвращает текущее состояние. можно так: local d = Far.DisableHistory(-1) ... Far.DisableHistory(d) Но, насколько я помню, не обязательно. Запрет действует в пределах макроса. Никакой чужой контекст он не меняет. |
|
Plugin.Call всё же желателен, поскольку есть потребность задействовать функции плагина напрямую, а не через запуск в панелях. Существует функция Plugin.Command, но опять же, для её использования надо находиться в панелях, что не всегда возможно. Альтернативно, можно усовершенствовать саму функцию Plugin.Command, добавив параметр, разрешающий выполнение отовсюду. |
|
Пример реализации работы через Plugin.Call https://github.com/FarGroup/FarManager/blob/master/plugins/brackets/Brackets.cpp#L159 Проще всего будет повторить функциональность запуска по префиксу из командной строки (префикс желательно опциональным). |
|
Если ещё возвращаетесь к этому плагину, подумайте, пожалуйста, может, несложно будет сделать команду List (список файлов). При вызове через Plugin.Call, возможно, удобно будет получить в ответ таблицу. Возможно, это будет удобно и полезно. А то тест есть, а лист - нет; нелогично... Кстати, возможно, имеет смысл объединить (если задан параметр для приёма списка файлов - тест и список). Всё равно список без теста не бывает :-) |
|
b265 Всё что было в костроке кроме open можно через Plugin.Call. Open у меня падал, не знаю мой косяк или его через lua надо как-то хитро вызывать... |
|
В процессе обсуждения родилась полезная, на мой взгляд, идея: реализовать команду "получить список файлов архива". Особенно полезно становится после реализации вызова через Plugin.Call : в макросе можно сделать очень хитрую обработку списка файлов. Если будет время - сделайте, пожалуйста. |
|
1) было бы хорошо проверить то что уже сделано. 2) умолчания у нас разные, поэтому 'хочу список' не годится. как минимум: форматы команды и ответа. |
|
2) Для использования в макросах удобнее всего было бы либо таблицу, либо через callback-функции (аналогично, например, far.RecursiveSearch). Я не знаю, насколько это трудоёмко-выполнимо. Но это - максимум, чего можно хотеть. При этом ВСЕ параметры аналогичны этой команде (InitDir - имя архива). Другой вариант возврата результата - таблица структур типа tPluginPanelItem. При вызове из командной строки оба эти варианта отпадают; поэтому вижу единственно возможный способ возврата результата - список файлов в строке через CR_LF или ";". Хотя полезность такой команды при вызове из командной строки весьма сомнительна. Если делать из командной строки, то в возвращаемом значении было бы полезно, наверное, иметь имя файла в виде arclite:<имя_архива>\<...> . |
|
Я не знаю способа отдать из Plugin.Call() в вызывающий макрос хоть чего-нибудь, кроме return INVALID_HANDLE_VALUE или nullptr. Не удивлюсь, если этого вообще нельзя сделать. Боюсь на такое способен только luamacro/luafar. Полезность списка при вызове из комстроки действительно сомнительна. Так что с моей точки зрения пока всё это не более чем фантазии. Попробуйте привлечь shmuel, вдруг мой пессимизм не оправдан... |
|
Есть FarMacroCall, но как-то у меня пока недостаточно мотивации в это ввязываться. |
|
«Я не знаю способа отдать из Plugin.Call() в вызывающий макрос хоть чего-нибудь, кроме<...>» Это-то естественно. Я имел в виду этот результат помещать в один из параметров. Мне больше нравится идея с аналогом FarRecursiveSearch (вроде как эта функция есть в исходниках) «недостаточно мотивации» Ну и не надо. |
|
Через параметр нельзя. Можно только через возвращаемый хэндл. Ничего сверхъестественного просто довольно много кода, если бы вы показали какой профит от этого можно получить, можно и сделать, если же хотелка чисто теоретическая тратить на неё время нет смысла. |
|
Нет смысла. Для полноты функционала. Ну и чисто теоретически можно придумать задачу корректировки заархивированных файлов (была у меня такая задача - в зависимости от даты файла редактировать). В любом случае эта задача легко решается распаковкой в папку, обработкой и последующей упаковкой. Так что не парьтесь. |
|
Для полноты функционала скорее не хватает удаления. Если нужна работа с архивами через api, то с 7z.dll можно из С++ работать напрямую. Плагину обновляторы, например, это вполне успешно делают. |
|
Отдать можно всё что угодно. В документации по OpenW это описано. Если что будет непонятно - объясню. |
|
shmuel Спасибо, я уже почитал доки и всё нашёл. Но т.к. мне не очевидно, что это будет востребовано - пока не вижу смысла. |
Date Modified | Username | Field | Change |
---|---|---|---|
2017-09-08 17:16 | buniak_a_h | New Issue | |
2017-09-08 17:27 | 2useven10 | Note Added: 0015553 | |
2017-09-08 17:28 | 2useven10 | Note Edited: 0015553 | |
2017-09-08 17:59 | buniak_a_h | Note Added: 0015554 | |
2017-09-08 19:06 | 2useven10 | Note Added: 0015555 | |
2017-09-08 19:07 | 2useven10 | Note Edited: 0015555 | |
2017-09-09 08:58 | JohnDoe | Note Added: 0015556 | |
2017-12-14 08:54 | JohnDoe | Project | Plugins => Wishes.Plugins |
2017-12-14 11:48 | JohnDoe | Note Added: 0015898 | |
2017-12-14 11:49 | JohnDoe | Note Edited: 0015898 | |
2017-12-14 11:54 | JohnDoe | Note Edited: 0015898 | |
2017-12-14 12:02 | buniak_a_h | Note Added: 0015899 | |
2017-12-21 10:47 | 2useven10 | Assigned To | => 2useven10 |
2017-12-21 10:47 | 2useven10 | Status | new => feedback |
2017-12-21 10:47 | 2useven10 | Note Added: 0015920 | |
2017-12-21 11:39 | buniak_a_h | Note Added: 0015923 | |
2017-12-21 11:39 | buniak_a_h | Status | feedback => assigned |
2017-12-21 11:49 | 2useven10 | Note Added: 0015924 | |
2017-12-21 12:37 | buniak_a_h | Note Added: 0015925 | |
2017-12-21 13:43 | 2useven10 | Note Added: 0015926 | |
2017-12-21 14:06 | 2useven10 | Note Added: 0015927 | |
2017-12-21 16:01 | buniak_a_h | Note Added: 0015928 | |
2017-12-21 22:06 | 2useven10 | Note Added: 0015930 | |
2017-12-21 22:11 | buniak_a_h | Note Added: 0015931 | |
2017-12-23 12:05 | 2useven10 | Note Added: 0015932 | |
2017-12-29 20:58 | shmuel | Note Added: 0015937 | |
2017-12-29 21:00 | shmuel | Note Edited: 0015937 | |
2018-01-02 18:21 | 2useven10 | Note Added: 0015940 | |
2018-01-02 18:22 | 2useven10 | Note Edited: 0015940 | |
2018-01-09 08:35 | 2useven10 | Status | assigned => closed |
2018-01-09 08:35 | 2useven10 | Resolution | open => fixed |