История в панельных плагинах.

Разработка Far.
Post Reply
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

История в панельных плагинах.

Post by zg »

есть такая древняя возможность (начиная с far 1.50 beta) — возможность делать фолдер шоткат внутрь плагина. про неё мало кто знает даже среди плагинописателей. хотя для «тривиальных» плагинов оно работает иногда и так.
с недавних времён шоткаты используются для истории, что как бы и логично. и тут уже полезность возможности сильно возрастает. в результате очередной проверки апи на вшивость выяснилось, что всё не так прекрасно.
данный шортката: гуид плагина, текущая папка, хостфайл, данные плагина, возвращаемые в GetOpenPanelInfoW.
переход по шоткату происходит так:
1. если нет хостфайла, вызывается OpenW с OPEN_SHORTCUT. куда передаются данные плагина. тут всё хорошо.
2. если хостфайл есть, то фар на него позиционируется и как бы жмёт enter. и вот тут есть проблемы. во-первых не передаются данные плагина. т.е. скажем зашли мы через "Open (format menu)" в sfx архив как в pe файл. а из истории попадём как в архив. во-вторых на файл могут претендовать несколько плагинов — вылазит меню. хотя фару нужный плагин известен.

далее вызывает SetDirectory, тут тоже вроде всё красиво.

есть два предложения:
1. всегда делать всё по первому сценарию. т.е. и для плагинов с хостфайлом будет приходить OpenW с OPEN_SHORTCUT. в Data ссылка на сруктуру:

Code: Select all

struct ShortCutInfo
{
  size_t StructSize;
  const wchar_t *HostFile;
  const wchar_t *ShortcutData;
};
2. добавить флаг PF_SHORTCUT. если плагин его не выставил, шоткаты на его панелях не поставить и в историю он не попадает.

какие будут возражения?
User avatar
Alexey Samlyukov
Posts: 1764
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

Re: История в панельных плагинах.

Post by Alexey Samlyukov »

несколько реплик по п.2:
скорее всего флаг нужен не в PluginInfo, а в OpenPlanelInfo.
и не полчится ли таже история, что и с OPIF_USEFILTER, когда никто его не ставил и фильтры у плагинов не работали?

как по мне, то однотипность лучше.
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

Re: История в панельных плагинах.

Post by zg »

Alexey Samlyukov wrote:несколько реплик по п.2:
скорее всего флаг нужен не в PluginInfo, а в OpenPlanelInfo.
да.
и не полчится ли таже история, что и с OPIF_USEFILTER, когда никто его не ставил и фильтры у плагинов не работали?
так оно просто так работать не будет даже если флаг поставить. надо OPEN_SHORTCUT обработать. сейчас работает иногда по двум причинам:
1. есть хостфайл — там всё по другому. но тоже не всегда работает.
2. без хост файла, плагин никаких флагов не ставил и соответственно считает, что кроме OPEN_PLUGINSMENU ничего в Open не приходит и поэтому не проверяет.
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 12 times

Re: История в панельных плагинах.

Post by Max Rusov »

Смогут ли данным вызовом воспользоваться:

1. Плагины. Например, ведущие альтернативную историю?
2. Макросы. Например, реализующие альтернативные закладки?

Если нет (а мне кажется, что не получится), то решение кажется несовершенным. Может стоит подумать о чем-то типа универсального строкового URI, который можно было бы одинаково использовать из:

1. Командной строки
2. Sortcut'ов
3. Истории
4. Макросов и плагинов
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

Re: История в панельных плагинах.

Post by zg »

Max Rusov wrote:Смогут ли данным вызовом воспользоваться:
1. Плагины. Например, ведущие альтернативную историю?
Если нет (а мне кажется, что не получится)
когда кажется — креститься надо. плагинам это доступно с 30.12.2011. к теме это не относится вообще. прощай.
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: История в панельных плагинах.

Post by NightRoman »

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

Хотелось бы чтобы FCTL_GETPANELDIRECTORY работала как раньше независимо от OPIF_SHORTCUT.
Post Reply

Return to “Development”