Управление custom-колонками с помощью lua-скрипта

Разработка Far.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

обсуждение GetCustomDataW и FreeCustomDataW.

Post by Maximus5 »

Latest post of the previous page:

Подумалось... Ок, пусть будет (несколько) плагинов с GetCustomDataW, на луа может быть не удобно например версии из exe/dll дергать.
Плагины и сейчас есть. И плагины возвращают строки для C0.
А вот "конфигуратор" пусть будет в луа. Но он должен уметь задать любую из колонок C0..C9. На основе (но не только) данных плагинов.
То есть я ге вижу смысла делать более одного луа-обработчика. Иначе возникнет каша. А при желании - можно из скрипта конфигуратора любые другие луа-модули звать.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

обсуждение GetCustomDataW и FreeCustomDataW.

Post by John Doe »

Maximus5 wrote: То есть я не вижу смысла делать более одного луа-обработчика. Иначе возникнет каша.
Это смотря как сделать.

Кстати подскажите на чём потестировать имеющуюся сейчас функциональность.
Какие из актуальных плагинов предоставляют данные для C0?
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

обсуждение GetCustomDataW и FreeCustomDataW.

Post by Maximus5 »

Ver_c0, diz_c0
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

обсуждение GetCustomDataW и FreeCustomDataW.

Post by zg »

4204. колонки C1-C9. обработчик должен вернут массив из 10 строк. если несколько обработчиков вернули для одной и той же колонки значение, используется последнее. пример обработчика:
  1. local one,two=win.Uuid("20C6FAE1-7E67-4264-985C-41E55421276B"),win.Uuid("8F75B38A-C483-4852-969D-D668E83CE250")
  2.  
  3. Panel.AddCustomDataCallback(
  4.  
  5.   function(data)
  6.  
  7.     return {[0]="{"..data[one].."}",data[two]}
  8.  
  9.   end
  10.  
  11. )
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

обсуждение GetCustomDataW и FreeCustomDataW.

Post by John Doe »

zg wrote: 4204
Возможности пощупать эту версию пока нет, но в предыдущей заметил такие недостатки:
- При перезагрузке макросов обработчики не выгружаются.
- При старте фара содержимое панели формируется до загрузки обработчиков.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

обсуждение GetCustomDataW и FreeCustomDataW.

Post by John Doe »

zg wrote: если несколько обработчиков вернули для одной и той же колонки значение, используется последнее
В этом случае лучше бы склеивать.

Ещё пожелание: получать на входе не массив, а таблицу, где ключами будут выступать гуиды, а значениями строки (или таблицы).

Касательно апи плагинов: возможно стоит предусмотреть возможность для плагина возвращать несколько колонок (пример).
И с заделом на будущее, неплохо бы передавать параметры в GetCustomDataW, в частности требуется управлять степенью детализации информации (ранее обсуждалась например возможность вывода в QView, вьювер, использование в поиске).
(В теме Универсальные Custom-колонки, предоставляемые плагинами были и другие интересные соображения)
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

обсуждение GetCustomDataW и FreeCustomDataW.

Post by zg »

John Doe wrote:- При перезагрузке макросов обработчики не выгружаются.
- При старте фара содержимое панели формируется до загрузки обработчиков.
я знаю. я ждал, что именно вы об этом напишите. скажите, вот эти два фатальных недостатка, они как то реально влияют на принятие решения о том, нужно ли включать обсуждаемую функциональность в фар или нет?
John Doe wrote:
zg wrote: если несколько обработчиков вернули для одной и той же колонки значение, используется последнее
В этом случае лучше бы склеивать.
если надо сливать, то на мой взгляд это гораздо лучше можно сделать в обработчике.
John Doe wrote:Ещё пожелание: получать на входе не массив, а таблицу, где ключами будут выступать гуиды, а значениями строки (или таблицы).
да. пример из предыдущего поста обновил.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

обсуждение GetCustomDataW и FreeCustomDataW.

Post by John Doe »

zg wrote: они как то реально влияют на принятие решения о том, нужно ли включать обсуждаемую функциональность в фар или нет?
Не влияют. Но эта информации может быть как минимум полезна всем, кто решит поиграться с приведённым кодом.
zg wrote: если надо сливать, то на мой взгляд это гораздо лучше можно сделать в обработчике.
Если отбрасывать "лишние" значения, то пользователь не сможет исправить ситуацию, т.к. даже не увидит, что в одной колонке пересекается разнородная информация.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

обсуждение GetCustomDataW и FreeCustomDataW.

Post by John Doe »

zg wrote: решения о том, нужно ли включать обсуждаемую функциональность в фар
В том или ином виде функциональность однозначно нужна.

Текущая реализация с C0-C9 мне не нравится прежде всего тем, что названия типа "С0" не несут смысла.
При настройке режимов панели неясно что значат все эти номера (а разных типов колонок может быть хоть 50).
В любой момент (при изменении в обработчике) нумерация может куда-то уползти.
Если колонок 50, а отображается только одна, то всё равно дёргаются все 50 плагинов, что сильно неоптимально.

Может быть стоит пересмотреть архитектуру?
Например:
- в настройках режимов панели каждая кастомная колонка представляет собой некую строку заключённую в скобки.
- при формировании панели фар каждую такую строку передаёт lua-обработчику, который уже самостоятельно запрашивает у c0-плагинов требуемую информацию, и формирует итоговую строку.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

обсуждение GetCustomDataW и FreeCustomDataW.

Post by Shmuel »

zg wrote: 4204. колонки C1-C9
Чтобы понять, что сделано, пришлось посмотреть исходники.

1. Колонки C1-C9 сейчас поддерживаются только на уровне LuaMacro. Без LuaMacro есть только C0. Сохраняется совместимость с существующими C0-плагинами.

2. Один плагин не может вернуть более одной колонки. Это, на мой взгляд, серьёзное ограничение возможностей. Если причина такого ограничения состоит только в обратной совместимости, то я бы поломал эту совместимость без колебаний, тем более, что GetCustomDataW не входит в официальный API Фара.
(Это ограничение можно обойти вставкой специальных "разделителей колонок" в одной передаваемой строке, но лучше бы сделать передачу нескольких колонок явно выраженной в API).

P.S. Если я чего-то не так понял в исходниках - поправьте.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

обсуждение GetCustomDataW и FreeCustomDataW.

Post by John Doe »

Shmuel wrote: Если причина такого ограничения состоит только в обратной совместимости, то я бы поломал эту совместимость без колебаний
Я в исходники не смотрел, но полагаю что причина только одна: данная функциональность появились 4.5 года назад, и осталась всё в той же зачаточной форме (хотя в обсуждениях тогда звучало много идей).
По хорошему надо не просто поломать, а сделать заново. В прошлый раз желающих не нашлось.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

обсуждение GetCustomDataW и FreeCustomDataW.

Post by zg »

Shmuel wrote:Если причина такого ограничения состоит только в обратной совместимости
никакой обратной совместимости тут никто не обещал.
дело не в этом. насколько я могу видеть по предыдущей «дискуссии» — управление колонками — востребовано. я представил своё видение. и мне важно достаточно быстро понять, нужно ли моё видение вообще или это полная ересь. пока это не станет понятно — лезть глубже я не собираюсь, потому как если выяснится, что это всё таки ересь (а к этому всё идёт), мне абсолютно не хочется откатывать большой объём кода.
что касается GetCustomDataW, то лично я не против, чтобы она возвращала массив FarMacroValue, но на управление это не влияет, поэтому для себя я не вижу смысла обсуждать это сейчас.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

обсуждение GetCustomDataW и FreeCustomDataW.

Post by John Doe »

zg wrote: нужно ли моё видение вообще или это полная ересь.
По хорошему вся конфигурация должна производится в диалоге настройки пользовательских режимов панелей.
Но так как неясно, кто возьмётся писать этот конфигуратор, то компромисс с lua-скриптом кажется разумным.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

обсуждение GetCustomDataW и FreeCustomDataW.

Post by zg »

John Doe wrote:- в настройках режимов панели каждая кастомная колонка представляет собой некую строку заключённую в скобки.
внутри фара тип колонки — число. переделывать на строки я лично точно не буду.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

обсуждение GetCustomDataW и FreeCustomDataW.

Post by Shmuel »

zg wrote: потому как если выяснится, что это всё таки ересь (а к этому всё идёт), мне абсолютно не хочется откатывать большой объём кода
Ересь, не ересь - это всё относительно. Пока я вижу, что ты продолжаешь вносить изменения. Мне нынешняя конструкция совсем не нравится. Главный её недостаток: один плагин = одна колонка. Допустим, у меня плагин, который хочет показывать 5 колонок метаданных для файлов определённого типа, это можно сделать без извращений с LuaMacro?

Да, излишне говорить, что ничего личного, наоборот - хорошо, что лёд тронулся.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

обсуждение GetCustomDataW и FreeCustomDataW.

Post by zg »

Shmuel wrote:Главный её недостаток: один плагин = одна колонка.
вот это я для кого писал?
zg wrote:что касается GetCustomDataW, то лично я не против, чтобы она возвращала массив FarMacroValue, но на управление это не влияет, поэтому для себя я не вижу смысла обсуждать это сейчас.
Shmuel wrote:Допустим, у меня плагин, который хочет показывать 5 колонок метаданных для файлов определённого типа, это можно сделать без извращений с LuaMacro?
нет.
Post Reply

Return to “Development”