View Issue Details

IDProjectCategoryView StatusLast Update
0003484Wishes.PluginsArclitepublic2018-01-09 08:35
Reporterbuniak_a_h Assigned To2useven10  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Summary0003484: Выполнение функций плагина через вызовы Plugin.Call
DescriptionДля нормального использования плагина в макросах очень полезно было бы сделать вызов основных функций плагина через вызов Plugin.Call.
Сейчас есть возможность вызывать функции плагина из командной строки через префикс (по умолчанию - arc:). Минус этого способа в том, что эти команды остаются в истории, а это не всегда желательно (и даже допустимо). Причём, не помогает даже указание Far.DisableHistory(0) перед формированием командной строки.
TagsNo tags attached.

Activities

2useven10

2017-09-08 17:27

developer   bugnote:0015553

Last edited: 2017-09-08 17:28

Far.DisableHistory(-1)

buniak_a_h

2017-09-08 17:59

reporter   bugnote:0015554

А почему -1? В описании написано: 0 - запрет сохранения командной строки; -1 - общий запрет всех историй.
Я все истории запрещать опасаюсь: макрос вызывается из неизвестного контекста; потом потеряется история поисков (например). Функции Far.EnableHistory я не нашёл (что, кстати, странно... Т.е. запретить - можно, даже проверить, запрещено ли, можно. А восстановить состояние - нет?)

2useven10

2017-09-08 19:06

developer   bugnote:0015555

Last edited: 2017-09-08 19:07

Используется битовая маска - что запрещать.
-1 = всё (с запасом), ф-я возвращает текущее состояние.
можно так:
local d = Far.DisableHistory(-1)
...
Far.DisableHistory(d)
Но, насколько я помню, не обязательно.
Запрет действует в пределах макроса. Никакой чужой контекст он не меняет.

JohnDoe

2017-09-09 08:58

updater   bugnote:0015556

Plugin.Call всё же желателен, поскольку есть потребность задействовать функции плагина напрямую, а не через запуск в панелях.

Существует функция Plugin.Command, но опять же, для её использования надо находиться в панелях, что не всегда возможно.

Альтернативно, можно усовершенствовать саму функцию Plugin.Command, добавив параметр, разрешающий выполнение отовсюду.

JohnDoe

2017-12-14 11:48

updater   bugnote:0015898

Last edited: 2017-12-14 11:54

Пример реализации работы через Plugin.Call
https://github.com/FarGroup/FarManager/blob/master/plugins/brackets/Brackets.cpp#L159

Проще всего будет повторить функциональность запуска по префиксу из командной строки (префикс желательно опциональным).

buniak_a_h

2017-12-14 12:02

reporter   bugnote:0015899

Если ещё возвращаетесь к этому плагину, подумайте, пожалуйста, может, несложно будет сделать команду List (список файлов). При вызове через Plugin.Call, возможно, удобно будет получить в ответ таблицу. Возможно, это будет удобно и полезно. А то тест есть, а лист - нет; нелогично...
Кстати, возможно, имеет смысл объединить (если задан параметр для приёма списка файлов - тест и список). Всё равно список без теста не бывает :-)

2useven10

2017-12-21 10:47

developer   bugnote:0015920

b265
Всё что было в костроке кроме open можно через Plugin.Call.
Open у меня падал, не знаю мой косяк или его через lua надо как-то хитро вызывать...

buniak_a_h

2017-12-21 11:39

reporter   bugnote:0015923

В процессе обсуждения родилась полезная, на мой взгляд, идея: реализовать команду "получить список файлов архива". Особенно полезно становится после реализации вызова через Plugin.Call : в макросе можно сделать очень хитрую обработку списка файлов. Если будет время - сделайте, пожалуйста.

2useven10

2017-12-21 11:49

developer   bugnote:0015924

1) было бы хорошо проверить то что уже сделано.
2) умолчания у нас разные, поэтому 'хочу список' не годится.
   как минимум: форматы команды и ответа.

buniak_a_h

2017-12-21 12:37

reporter   bugnote:0015925

2) Для использования в макросах удобнее всего было бы либо таблицу, либо через callback-функции (аналогично, например, far.RecursiveSearch). Я не знаю, насколько это трудоёмко-выполнимо. Но это - максимум, чего можно хотеть. При этом ВСЕ параметры аналогичны этой команде (InitDir - имя архива). Другой вариант возврата результата - таблица структур типа tPluginPanelItem.
При вызове из командной строки оба эти варианта отпадают; поэтому вижу единственно возможный способ возврата результата - список файлов в строке через CR_LF или ";". Хотя полезность такой команды при вызове из командной строки весьма сомнительна. Если делать из командной строки, то в возвращаемом значении было бы полезно, наверное, иметь имя файла в виде arclite:<имя_архива>\<...> .

2useven10

2017-12-21 13:43

developer   bugnote:0015926

Я не знаю способа отдать из Plugin.Call() в вызывающий макрос хоть чего-нибудь, кроме return INVALID_HANDLE_VALUE или nullptr. Не удивлюсь, если этого вообще нельзя сделать.
Боюсь на такое способен только luamacro/luafar.
Полезность списка при вызове из комстроки действительно сомнительна.
Так что с моей точки зрения пока всё это не более чем фантазии.

Попробуйте привлечь shmuel, вдруг мой пессимизм не оправдан...

2useven10

2017-12-21 14:06

developer   bugnote:0015927

Есть FarMacroCall, но как-то у меня пока недостаточно мотивации в это ввязываться.

buniak_a_h

2017-12-21 16:01

reporter   bugnote:0015928

«Я не знаю способа отдать из Plugin.Call() в вызывающий макрос хоть чего-нибудь, кроме<...>»
Это-то естественно. Я имел в виду этот результат помещать в один из параметров.
Мне больше нравится идея с аналогом FarRecursiveSearch (вроде как эта функция есть в исходниках)
«недостаточно мотивации»
Ну и не надо.

2useven10

2017-12-21 22:06

developer   bugnote:0015930

Через параметр нельзя. Можно только через возвращаемый хэндл.
Ничего сверхъестественного просто довольно много кода, если бы вы показали какой профит от этого можно получить, можно и сделать, если же хотелка чисто теоретическая тратить на неё время нет смысла.

buniak_a_h

2017-12-21 22:11

reporter   bugnote:0015931

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

2useven10

2017-12-23 12:05

developer   bugnote:0015932

Для полноты функционала скорее не хватает удаления.
Если нужна работа с архивами через api, то с 7z.dll можно из С++ работать напрямую.
Плагину обновляторы, например, это вполне успешно делают.

shmuel

2017-12-29 20:58

developer   bugnote:0015937

Last edited: 2017-12-29 21:00

Я не знаю способа отдать из Plugin.Call() в вызывающий макрос хоть чего-нибудь, кроме return INVALID_HANDLE_VALUE или nullptr. Не удивлюсь, если этого вообще нельзя сделать.

2useven10
Отдать можно всё что угодно. В документации по OpenW это описано. Если что будет непонятно - объясню.

2useven10

2018-01-02 18:21

developer   bugnote:0015940

Last edited: 2018-01-02 18:22

shmuel
Спасибо, я уже почитал доки и всё нашёл.
Но т.к. мне не очевидно, что это будет востребовано - пока не вижу смысла.

Issue History

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