Page 2 of 5

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

Posted: Tue 02 Dec, 2014 11:20
by John Doe

Latest post of the previous page:

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

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

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

Posted: Tue 02 Dec, 2014 13:21
by Maximus5
Ver_c0, diz_c0

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

Posted: Wed 03 Dec, 2014 03:02
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. Panel.AddCustomDataCallback(
  3.   function(data)
  4.     return {[0]="{"..data[one].."}",data[two]}
  5.   end
  6. )

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

Posted: Wed 03 Dec, 2014 09:32
by John Doe
zg wrote: 4204
Возможности пощупать эту версию пока нет, но в предыдущей заметил такие недостатки:
- При перезагрузке макросов обработчики не выгружаются.
- При старте фара содержимое панели формируется до загрузки обработчиков.

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

Posted: Wed 03 Dec, 2014 09:51
by John Doe
zg wrote: если несколько обработчиков вернули для одной и той же колонки значение, используется последнее
В этом случае лучше бы склеивать.

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

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

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

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

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

Posted: Wed 03 Dec, 2014 10:57
by John Doe
zg wrote: они как то реально влияют на принятие решения о том, нужно ли включать обсуждаемую функциональность в фар или нет?
Не влияют. Но эта информации может быть как минимум полезна всем, кто решит поиграться с приведённым кодом.
zg wrote: если надо сливать, то на мой взгляд это гораздо лучше можно сделать в обработчике.
Если отбрасывать "лишние" значения, то пользователь не сможет исправить ситуацию, т.к. даже не увидит, что в одной колонке пересекается разнородная информация.

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

Posted: Wed 03 Dec, 2014 12:22
by John Doe
zg wrote: решения о том, нужно ли включать обсуждаемую функциональность в фар
В том или ином виде функциональность однозначно нужна.

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

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

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

Posted: Wed 03 Dec, 2014 15:05
by Shmuel
zg wrote: 4204. колонки C1-C9
Чтобы понять, что сделано, пришлось посмотреть исходники.

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

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

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

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

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

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

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

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

Posted: Wed 03 Dec, 2014 16:21
by John Doe
zg wrote: нужно ли моё видение вообще или это полная ересь.
По хорошему вся конфигурация должна производится в диалоге настройки пользовательских режимов панелей.
Но так как неясно, кто возьмётся писать этот конфигуратор, то компромисс с lua-скриптом кажется разумным.

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

Posted: Wed 03 Dec, 2014 16:37
by zg
John Doe wrote:- в настройках режимов панели каждая кастомная колонка представляет собой некую строку заключённую в скобки.
внутри фара тип колонки — число. переделывать на строки я лично точно не буду.

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

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

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

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

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

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

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