Стек плагиновых панелей в фар

Разработка Far.
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Стек плагиновых панелей в фар

Post by 2useven10 »

Latest post of the previous page:

John Doe, HaRT,
Сделать не сложно (я пока склонен ко второму варианту). Но для начала хочется убедиться что всё работает как задумывалось.
Если всё ок и будет реальная потребность в подобной рекурсивности для плагинов которые нельзя пересобрать - можно добавить настройку.
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Стек плагиновых панелей в фар

Post by 2useven10 »

2useven10 wrote: Fri 12 May, 2023 21:55 новая панель создана
1) из плагиновой панели
не уверен надо ли подобное, например для временной панели.
Last edited by 2useven10 on Sat 13 May, 2023 02:52, edited 1 time in total.
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Стек плагиновых панелей в фар

Post by 2useven10 »

HaRT wrote: Sun 30 Apr, 2023 11:59 Может, лучше в аргументах вызова открытия панели?
По первым результатам, похоже это будет правильнее.
Флаг в свойствах плагина для управления не годится, а если его добавить в arclite, и как страховка от неожиданностей не работает.
Last edited by 2useven10 on Sun 14 May, 2023 07:12, edited 1 time in total.
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Стек плагиновых панелей в фар

Post by 2useven10 »

6152 - рекурсивность переехала из флагов плагина во флаги панели плагина
PF_RECURSIVEPANEL -> OPIF_RECURSIVEPANEL
Last edited by 2useven10 on Wed 31 May, 2023 06:05, edited 1 time in total.
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Стек плагиновых панелей в фар

Post by 2useven10 »

arclite открытие по префиксу + 2 новых флага:
arc:[-r [-x[d] ] ] [старые_флаги] файл
-r -- это RECURSIVEPANEL
-x[d] -- удалять хостфайл [с директорией] при закрытии панели
Last edited by 2useven10 on Wed 24 May, 2023 18:54, edited 3 times in total.
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Стек плагиновых панелей в фар

Post by 2useven10 »

2useven10 wrote: Wed 24 May, 2023 16:006152
-> 6153 (fix)
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Стек плагиновых панелей в фар

Post by 2useven10 »

6155, 6157 - продолжение
флаги удаления при закрытии для arclite -x[d] теперь не зависят от -r
arc:[-r] [-x[d]] [старые флаги] файл
Last edited by 2useven10 on Wed 31 May, 2023 11:51, edited 2 times in total.
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Стек плагиновых панелей в фар

Post by 2useven10 »

Поскольку почти 10 дней нет никаких жалоб на побочные эффекты,
попробую вкратце описать что же здесь было сделано...
Напомню что речь здесь идёт об открытии новой панели плагина из плагиновой же панели.
Плагины при этом могут быть разными (но не обязательно).
Новая панель может быть открыта разными способами, вот некоторые из них:
1) по Enter на элементе панели
2) из меню плагинов (F11 -> плагин -> ...)
3) по префиксу плагина (arc:hostfile.7z)
4) Plugin.Command ...
...
До начала этой темы после закрытия новой панели открытой всеми способами кроме (1)
текущей панелью становилась файловая панель, а не панель плагина из которого открывалась новая панель.
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Стек плагиновых панелей в фар

Post by 2useven10 »

В случае (1) far включает магию (часть её ниже):
а) извлекает элемент архива во временный каталог
б) пытается открыть временный файл каким либо плагином, при успехе - новая панель
в) после закрытия панели возврат в панель предыдущего плагина и удаление временного каталога.
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Стек плагиновых панелей в фар

Post by 2useven10 »

Что нового теперь:
Любой плагин может создать новую панель и попросить фар делать возврат в старую панель плагина после закрытия. Это (пока?) относится к способам открытия 2, 3, 4.
В GetOpenPanelInfoW плагин должен выставить для этого новый флаг OPIF_RECURSIVEPANEL.

Это умеют делать на текущий момент 2 плагина:
PEAnalyzer (из меню) и arclite (открытие по префиксу и в Plugin.Command).
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Стек плагиновых панелей в фар

Post by 2useven10 »

Старый (1) способ открытия рекурсивной панели предполагал удаление временного каталога после закрытия новой панели. Для новых способов открытия это не всегда нужно (и полезно).
Для управления процессом удаления файла-каталога после закрытия новой панели введены 2 новых флага - OPIF_DELETEDIRONCLOSE, OPIF_DELETEFILEONCLOSE.

новые флаги для плагина arclite можно задать параметрами комстроки.
-r -- OPIF_RECURSIVEPANEL
-x -- OPIF_DELETEFILEONCLOSE
-xd -- OPIF_DELETEDIRONCLOSE
например:
arc:-r my_file.7z
arc:-x "%TEMP%\my_file.7z"
arc:-r -x "%TEMP%\my_file.7z"
Last edited by 2useven10 on Thu 08 Jun, 2023 12:41, edited 2 times in total.
User avatar
Kadaner
Posts: 37
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 3 times
Been thanked: 3 times

Стек плагиновых панелей в фар

Post by Kadaner »

Собрался я, как обещал, описать новые флаги и параметры. Но оказалось, что я не всё здесь понимаю. Помогите, пожалуйста, разобраться и извините за глупые вопросы.
  1. Хостфайл — это файл, содержимое которого плагин показывает на панели, правильно?
  2. Какой файл или каталог будет удаляться, если плагин указал флаги OPIF_DELETEFILEONCLOSE или OPIF_DELETEDIRONCLOSE? Тот, с которым был вызван плагин, т.е., хостфайл? Плагин действительно можно вызвать с "хосткаталогом" (а почему бы и нет)?
  3. Если удаляется хостфайл / хосткаталог, я не совсем понимаю, почему удалением своего параметра ведает плагин, а не тот, кто его вызвал. Откуда плагин знает, был ли его хостфайл временным или "настоящим"? Или я совсем ничего не понимаю?
  4. 2useven10 wrote: Thu 08 Jun, 2023 12:30 Это (пока?) относится к способам открытия 2, 3, 4.
    Если плагин открыт способом (1), то все эти флаги Far игнорирует и применяет свою магию? Если да, стоит ли это отметить в документации? Если это различие останется надолго (навсегда), то, наверное, надо его описать. Если есть планы унифицировать поведение, то не стоит.
  5. И что такое Plugin.Command?
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Стек плагиновых панелей в фар

Post by 2useven10 »

Kadaner,
  1. да
  2. ...FILE... - только хостфайл, ...DIR... - каталог содержащий хостфайл (часто временные файлы фар создаёт в отдельном каталоге, в частности для способа (1))
  3. Для способа (1) просто так было и есть, для остальных флаги введены в первую очередь для того чтобы удаление можно было отключать когда тот кто вызвал управляет процессом, если удаление нужно тогда считайте дополнительным сервисом. Знает пока только один плагин arclite из параметров вызова.
  4. У меня планов на унификацию нет, но вдруг кто-то ... после поиска, например, :)
  5. Это один из способов вызова плагинов, в .lua Plugin.Command(GUID, command), аналог prefix:command в командной строке.
Last edited by 2useven10 on Wed 21 Jun, 2023 07:54, edited 11 times in total.
User avatar
Kadaner
Posts: 37
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 3 times
Been thanked: 3 times

Стек плагиновых панелей в фар

Post by Kadaner »

2useven10, понял, спасибо. Всё примерно так, как я подозревал. Постараюсь не откладывать слишком надолго.

Кстати, я заметил, что новых флагов нет ни в farapi.lua, ни в PluginW.pas :). Они там ожидаются?
2useven10
Posts: 5211
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Стек плагиновых панелей в фар

Post by 2useven10 »

Kadaner wrote: Thu 22 Jun, 2023 06:18 новых флагов нет ни в farapi.lua, ни в PluginW.pas . Они там ожидаются?
Да. Надо будет добавить.
User avatar
Kadaner
Posts: 37
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 3 times
Been thanked: 3 times

Стек плагиновых панелей в фар

Post by Kadaner »

2useven10, посмотрите, пожалуйста, мой PR. Я надеюсь, что я изложил достаточно понятно.
Post Reply

Return to “Development”