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

Разработка Far.
User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Tue 02 Dec, 2014 11:20

Latest post of the previous page:

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

Кстати подскажите на чём потестировать имеющуюся сейчас функциональность.
Какие из актуальных плагинов предоставляют данные для C0?

Maximus5
Posts: 3292
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 4 times
Contact:

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

Post by Maximus5 » Tue 02 Dec, 2014 13:21

Ver_c0, diz_c0

User avatar
zg
zero-gravity
Posts: 5263
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 43 times
Contact:

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

Post by zg » Wed 03 Dec, 2014 03:02

4204. колонки C1-C9. обработчик должен вернут массив из 10 строк. если несколько обработчиков вернули для одной и той же колонки значение, используется последнее. пример обработчика:
  1. local one,two=win.Uuid("20C6FAE1-7E67-4264-985C-41E55421276B"),win.Uuid("8F75B38A-C483-4852-969D-D668E83CE250")
  2. Panel.AddCustomDataCallback(
  3.   function(data)
  4.     return {[0]="{"..data[one].."}",data[two]}
  5.   end
  6. )

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Wed 03 Dec, 2014 09:32

zg wrote: 4204
Возможности пощупать эту версию пока нет, но в предыдущей заметил такие недостатки:
- При перезагрузке макросов обработчики не выгружаются.
- При старте фара содержимое панели формируется до загрузки обработчиков.

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Wed 03 Dec, 2014 09:51

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

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

Касательно апи плагинов: возможно стоит предусмотреть возможность для плагина возвращать несколько колонок (пример).
И с заделом на будущее, неплохо бы передавать параметры в GetCustomDataW, в частности требуется управлять степенью детализации информации (ранее обсуждалась например возможность вывода в QView, вьювер, использование в поиске).
(В теме Универсальные Custom-колонки, предоставляемые плагинами были и другие интересные соображения)

User avatar
zg
zero-gravity
Posts: 5263
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 43 times
Contact:

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

Post by zg » Wed 03 Dec, 2014 10:32

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

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Wed 03 Dec, 2014 10:57

zg wrote: они как то реально влияют на принятие решения о том, нужно ли включать обсуждаемую функциональность в фар или нет?
Не влияют. Но эта информации может быть как минимум полезна всем, кто решит поиграться с приведённым кодом.
zg wrote: если надо сливать, то на мой взгляд это гораздо лучше можно сделать в обработчике.
Если отбрасывать "лишние" значения, то пользователь не сможет исправить ситуацию, т.к. даже не увидит, что в одной колонке пересекается разнородная информация.

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Wed 03 Dec, 2014 12:22

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

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

Может быть стоит пересмотреть архитектуру?
Например:
- в настройках режимов панели каждая кастомная колонка представляет собой некую строку заключённую в скобки.
- при формировании панели фар каждую такую строку передаёт lua-обработчику, который уже самостоятельно запрашивает у c0-плагинов требуемую информацию, и формирует итоговую строку.

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

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

Post by Shmuel » Wed 03 Dec, 2014 15:05

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

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

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

P.S. Если я чего-то не так понял в исходниках - поправьте.

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Wed 03 Dec, 2014 16:04

Shmuel wrote: Если причина такого ограничения состоит только в обратной совместимости, то я бы поломал эту совместимость без колебаний
Я в исходники не смотрел, но полагаю что причина только одна: данная функциональность появились 4.5 года назад, и осталась всё в той же зачаточной форме (хотя в обсуждениях тогда звучало много идей).
По хорошему надо не просто поломать, а сделать заново. В прошлый раз желающих не нашлось.

User avatar
zg
zero-gravity
Posts: 5263
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 43 times
Contact:

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

Post by zg » Wed 03 Dec, 2014 16:07

Shmuel wrote:Если причина такого ограничения состоит только в обратной совместимости
никакой обратной совместимости тут никто не обещал.
дело не в этом. насколько я могу видеть по предыдущей «дискуссии» — управление колонками — востребовано. я представил своё видение. и мне важно достаточно быстро понять, нужно ли моё видение вообще или это полная ересь. пока это не станет понятно — лезть глубже я не собираюсь, потому как если выяснится, что это всё таки ересь (а к этому всё идёт), мне абсолютно не хочется откатывать большой объём кода.
что касается GetCustomDataW, то лично я не против, чтобы она возвращала массив FarMacroValue, но на управление это не влияет, поэтому для себя я не вижу смысла обсуждать это сейчас.

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Wed 03 Dec, 2014 16:21

zg wrote: нужно ли моё видение вообще или это полная ересь.
По хорошему вся конфигурация должна производится в диалоге настройки пользовательских режимов панелей.
Но так как неясно, кто возьмётся писать этот конфигуратор, то компромисс с lua-скриптом кажется разумным.

User avatar
zg
zero-gravity
Posts: 5263
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 43 times
Contact:

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

Post by zg » Wed 03 Dec, 2014 16:37

John Doe wrote:- в настройках режимов панели каждая кастомная колонка представляет собой некую строку заключённую в скобки.
внутри фара тип колонки — число. переделывать на строки я лично точно не буду.

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

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

Post by Shmuel » Wed 03 Dec, 2014 17:07

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

Да, излишне говорить, что ничего личного, наоборот - хорошо, что лёд тронулся.

User avatar
zg
zero-gravity
Posts: 5263
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 43 times
Contact:

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

Post by zg » Wed 03 Dec, 2014 17:15

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

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Wed 03 Dec, 2014 17:53

zg wrote:
John Doe wrote:- в настройках режимов панели каждая кастомная колонка представляет собой некую строку заключённую в скобки.
внутри фара тип колонки — число. переделывать на строки я лично точно не буду.
В контексте моего предложения не имеет значения как это внутри фара.
Сейчас формат панели задаётся примерно так: N,C0,C1
Вместо этого я предлагаю так: N,(ver),(diz).
При этом для каждой из строк в скобках должен будет вызван lua-обработчик, который на вход получит формат (ver), а вернёт строку для соответствующей колонки.

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

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

Post by Shmuel » Wed 03 Dec, 2014 17:56

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

Post Reply

Return to “Development”