Универсальные Custom-колонки, предоставляемые плагинами

Место, где разработчики плагинов могут поделиться своим опытом.
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by John Doe »

Latest post of the previous page:

Kildor wrote:И если зажимать при этом Shift, то будет именно ShiftEnter.
Попытался сделать Enter Shift — в папку уже вошёл, а Shift ещё не нажат.
В папку вошёл, нажал Shift и колонки перестали заполняться, всё реально. Но действительно лучше наверно Esc вместо Shift.
Но чего об этом спорить? Может с многопоточностью получится, и для быстрой навигации просто не будет нужды прерывать опрос колоночных плагинов.
Kildor wrote:А хост-плагин, если он не будет в официальном дистрибутиве будет злом жутким.
Странные вещи вы говорите.
Kildor
Posts: 1515
Joined: Wed 16 Mar, 2005 06:26
Location: Новосибирск
Been thanked: 1 time
Contact:

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by Kildor »

Чем странные?

Вот есть какой-то абсрактный хост-плагин. А ещё лучше два хост-плагина — это-ж так прикольно (А ведь обязательно будут, достаточно на тот-же пикчвью глянуть).
Есть туева куча подплагинов, заточенных под эти надплагины. Каждый подплагин требует своей версии этого надплагина. При отсутствующем межплагинном взаимодействии, это более чем реально. И plugins-hell в разгаре.

И кто это мы?
Ты мне не выкай!
«ФарФорум не для пользователей!»
Upd:
P.S. Я просто поддерживаю беседу.» © Народ.

xmpp:kildor@jabber.ru
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by John Doe »

Kildor wrote:Каждый подплагин требует своей версии этого надплагина
Это действительно было бы неудобно (хотя и некритично, при наличии исходников).

Однако выше писалось о том, что теоретически возможно сделать плагины одинаково работающие как при наличии хост-плагина, так и без него.
Kildor
Posts: 1515
Joined: Wed 16 Mar, 2005 06:26
Location: Новосибирск
Been thanked: 1 time
Contact:

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by Kildor »

Теоретически — да. Была бы в фаре система плагинов аналогична мирандной — я бы и не сомневался. Там уже давно реализованы сервисные плагины на каждый чих, и сделано это сверх-удобно

А вот практически — не уверен. Вообще, реально ли одному плагину определить, что работает второй плагин и дёрнуть у него какую-нибудь функцию?

Меня вообще слегка пугает деятельность (ну, точнее текущие разговоры) вокруг этой функциональности.

Моя бы воля, я бы засунул выбор плагина в меню ассоциаций (хотя это нихрена не логично), что-то наподобии «*.html: html_co:!.!». То есть — ручная ассоциация по маске.
Ты мне не выкай!
«ФарФорум не для пользователей!»
Upd:
P.S. Я просто поддерживаю беседу.» © Народ.

xmpp:kildor@jabber.ru
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by John Doe »

Kildor wrote:Меня вообще слегка пугает деятельность (ну, точнее текущие разговоры) вокруг этой функциональности.
Значит мало того что сам пугаешься, так и нас напугать хочешь:
Kildor wrote:Моя бы воля, я бы засунул выбор плагина в меню ассоциаций (хотя это нихрена не логично), что-то наподобии «*.html: html_co:!.!». То есть — ручная ассоциация по маске.
Ну а если серьёзно то в ядро фара это врядли попадёт, и именно поэтому во всём что касается настраиваимости - вся надежда на хост-плагин.
Даже если разговоры вокруг этой функциональности не выльются в "универсальный" хостплагин, уж что-то навроде PictureView 2 mod никто не помешает реализовать.
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by ccaid »

концепт в продолжение идеи о том, что кастомная колонка и QView это почти одно и то же.
подразумевается, что слева текущим является первый файл, а справа — последний. (звиняйте, что без фотошопа)

в статус уже сейчас можно засунуть C0. если можно будет задавать высоту статуса, а плагины научатся выводить несколько строк туда, то нарисованная выше картинка станет реальностью.
Фар делают добрые люди
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: VersionColumn — отображение информации о файле в колонке

Post by Max Rusov »

Max Rusov wrote:VersionColumn 1.0 для FAR 2

Показывает информацию о EXE/DLL файлах в универсальной колонке (C0)
Позволяет гибко настраивать формат отображаемой информации.

Исходные тексты и последние версии:
http://code.google.com/p/far-plugins/do ... sionColumn
Он что - оказался недостоин анонсов? :)
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: VersionColumn — отображение информации о файле в колонке

Post by John Doe »

Hint: все C0-плагины пока в разделе Разработка.
Вероятно предполагается что сама идея очень экспериментальна.

Ситуация вообще не очень понятная: из тех кто имеет право коммита в свн — C0 никому не надо...
User avatar
Alexey Samlyukov
Posts: 1765
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by Alexey Samlyukov »

Было б не плохо в фильтры прикрутить поддержку C0, можно было б искать по ней :oops:
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by Maximus5 »

Добрался до оптимизации работы с C0. Пока что добавил в настройку "Panel modes" флажок "[ ] Preload C0 data for all files". Соответственно, если он не включен - фар считывает
До кучи - вроде поправил багу, что C0 не считывается сразу при загрузке.


Сомнение вызывает только вот этот фрагмент:

Code: Select all

string strLastDir;
if (GetMode()!=PLUGIN_PANEL && IsColumnDisplayed(CUSTOM_COLUMN0))
{
	apiGetCurrentDirectory(strLastDir);
	apiSetCurrentDirectory(strCurDir);
}

ShowList(FALSE,0);
ShowSelectedSize();

if (!strLastDir.IsEmpty())
	apiSetCurrentDirectory(strLastDir);
Смысл в том, что нужно установить "текущую директорию" обрабатываемой (возможно пассивной) панели, т.к. в функции void PluginManager::GetCustomData(FileListItem *ListItem) идет преобразование в полный путь NTPath FilePath(ListItem->strName);. Собственно вопрос, можно ли тут звать apiSetCurrentDirectory, или нужно по полной программе звать Panel::SetCurPath()?
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by Maximus5 »

И вообще, "экспериментальной" фиче уже почти год стукнул, пора бы ее до ума довести.
Предлагаю так

Code: Select all

struct CustomDataInfo
{
  size_t           StructSize;
  const wchar_t   *CurDir;       // Папка, в которой лежит Item
  PluginPanelItem *Item;         // Что собственно обрабатываем
  int                 Field; // Индекс запрашиваемого поля (зарезервировано для c0host)
  wchar_t        **CustomData;   // [Out] Результат, освобождаемый через FreeCustomDataW
  // Следующие члены, кроме BufferSize, фар заполнять не обязан (может передать null)
  // Смысл в оптимизации доступа к файлам, если плагины должны работать
  // не просто по расширению, а по сигнатуре. Нет смысла считывать
  // заголовок файла каждый раз каждому плагину. Заполнить буфер,
  // если он еще не считан, может любой вызванный плагин.
  size_t           BufferSize;   // Максимальный размер буфера в байтах
  size_t           BufferLen;    // Длина помещенных в буфер данных в байтах
  BYTE             Buffer[1024]; // Собственно буфер, для простоты - массив
};

int  WINAPI GetCustomDataW(CustomDataInfo *Info);
void WINAPI FreeCustomDataW(wchar_t *CustomData);
тогда и мудрить с директориями не нужно, и плагинам удобно будет.
drop700
Posts: 14
Joined: Tue 29 Jul, 2008 14:15

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by drop700 »

Было бы неплохо видеть не дату файла а его возраст в виде "10 минут", "1 день", "2 недели", итд.

Иногда ведь возраст файла намного важнее/удобнее знать чем его дату и в уме считать разницу.

Можно ли сделать подобный плагин через CUSTOM_COLUMN?
User avatar
HaRT
Moderator
Posts: 10867
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by HaRT »

drop700 wrote:Можно ли сделать подобный плагин через CUSTOM_COLUMN?
Как у нас тут принято отвечать, можно, делайте. ;-)
Фар есть инструмент, а не нянька. © 2009 DrKnS
Acerbic
Posts: 80
Joined: Wed 07 Apr, 2010 12:30
Been thanked: 2 times

Re: Сортировка каталогов (папок) всегда по алфавиту

Post by Acerbic »

хм. Раз уж такая пляска, то есть виш расширить концепцию "кастомная сортировка" до "кастомый тип колонки". Сейчас регистрируется на числовой номер (100+) функция сравнения файлов, можно добавить функцию "получить строковое представление колонки данного файла" и использовать в определениях режимов просмотра панели.

Мутно объяснил... что-то вроде
Panel.LoadCustomSortMode (Mode, Settings) --> Panel.LoadCustomDataType (Type, Settings)

Settings: таблица, содержит следующие поля:
Compare (обязательное поле):
Функция сранения
GetData:
Функия, возвращает строку - кастомные данные о файле
result = GetData(Pi)
Pi - структура типа PluginPanelItem
...

в определениях режимов просмотра панели можно использовать этот номер Type вместе со встроенными:
N,{100},{101},S

Как-то так. Кому нужна только сортировка - те поле GetData не заполняют.

а далее все желающие смогут реализовать в своих плагинах релевантные типы - id3v2 и EXIF тэги, например.
Last edited by Acerbic on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Добавлена ссылка на исходную тему (неправильную для данного сообщения)
Post Reply

Return to “Разработка плагинов”