Сортировка панелей по нескольким полям

Хотите говорить о Far и не знаете, куда обратиться?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Сортировка панелей по нескольким полям

Post by DrKnS »

Latest post of the previous page:

S.A. wrote: Wed 22 Jul, 2020 00:45папки идут в каком-то загадочном порядке
Какой забавный баг. Спасибо, 5645.
Я этот wer читать не умею, но падение, скорее всего, из-за него же.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Глюки и баги, появившиеся в «ночных сборках»

Post by Shmuel »

(Данное сообщение перенесено сюда из темы плагина TmpPanel).

Билд 5647.
Делаю поиск от текущей папки, где в подпапках есть много идентичных имён файлов.
Результаты поиска помещаю на временную панель.
Не удаётся отсортировать файлы "только по имени": и "Name", и "Name only" дают сортировку по полному пути.
До последних изменений, связанных с сортировкой, нажатие CtrlF3 давало как раз сортировку "только по имени"- например в билде 5617.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Глюки и баги, появившиеся в «ночных сборках»

Post by DrKnS »

Shmuel, оно отвалилось, потому что мне было не очевидно, как сделать лучше.
Oбрезание пути можно воткнуть в name only, будет почти как раньше, но name / name only также влияет на трактовку расширения, поэтому я могу представить ситуации, когда хочется также name, но без пути, или name only, но с путем.

Возможно, триггер "Игнорировать путь" в конце списка?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Глюки и баги, появившиеся в «ночных сборках»

Post by Shmuel »

DrKnS, на ваше усмотрение, но чем проще, тем лучше. Ибо если у вас есть сомнения в трактовке, что уже тогда говорить про типичного юзера.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Глюки и баги, появившиеся в «ночных сборках»

Post by buniak_a_h »

От имени типичного юзера скажу.
Типичный юзер ожидает, что сортировка по имени выстраивает файлы в том порядке, как они видны на панели. Т.е. если на панели есть путь - он должен учитываться при сортировке. Если нет - не должен.
Поясню.
Если путь не виден на панели, то типичному юзеру невдомёк, что он есть где-то в итеме. Он думает -то, что он видит, и есть имя файла.
Кстати, поведение сноса имени по Ctrl+Enter ожидается такое же: то, что видно на панели, то и должно сноситься в командную строку. Где-то я встречал настройку типа "показывать ли полный путь), не могу найти (ну, кроме как через флаг OPIF_SHOWNAMESONLY)
P/S. Кстати, и Alt-поиск тоже ожидается по видимому представлению файла.
Last edited by buniak_a_h on Sat 08 Aug, 2020 12:41, edited 1 time in total.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Глюки и баги, появившиеся в «ночных сборках»

Post by DrKnS »

buniak_a_h, да, это, в принципе, логично, и я хотел так сделать, но тут есть небольшая сложность.
В API есть такие флаги:
OPIF_SHOWNAMESONLY - Показывать по умолчанию имена без путей во всех режимах просмотра.
OPIF_SHOWRIGHTALIGNNAMES - Показывать по умолчанию имена, выровненные по правому краю во всех режимах просмотра.
OPIF_SHOWPRESERVECASE - Показывать имена файлов в оригинальном регистре независимо от настроек.
Но учитываются эти флаги только если плагин не передает OpenPanelInfo.PanelModesArray.

Потому что через PanelModesArray:
- эффект OPIF_SHOWNAMESONLY можно получить как NO
- эффект OPIF_SHOWRIGHTALIGNNAMES - как NR
- эффект OPIF_SHOWPRESERVECASE - как отсутствие флага PMFLAGS_CASECONVERSION.

Последнее, кстати, отдельная дичь, т. к. PMFLAGS_CASECONVERSION с какого-то хрена включает одновременно все три конверсии - Show folders in uppercase + Show files in lowercase + Show uppercase file names in lowercase, но я отвлекся.

Так вот, TmpPanel, например, не заморачивается и ставит OPIF_SHOWNAMESONLY тупо всегда, независимо от режима. Т.е. в 4 режиме (который с полными путями) этот флаг врет.

Варианты решения:
- Учитывать флаги всегда и применять их поверх переданных PanelModes. TmpPanel (и прочие подобные плагины) надо будет поправить, чтобы передавать флаги только тогда, когда надо.
- Просто поправить TmpPanel, чтобы передавать флаги только тогда, когда надо.
- Обнюхивать PanelModes и делать выводы по содержимому, но там же может быть шопопало - можно, например, сделать две колонки Name, одну N, одну NO, и по какой судить? По первой попавшейся?
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Глюки и баги, появившиеся в «ночных сборках»

Post by buniak_a_h »

DrKnS wrote: Sat 08 Aug, 2020 14:03 по какой судить? По первой попавшейся?
Думаю, да. Это был бы логично.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Глюки и баги, появившиеся в «ночных сборках»

Post by DrKnS »

5650
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Глюки и баги, появившиеся в «ночных сборках»

Post by Shmuel »

drkns 09.08.2020 12:26:42 +0100 - build 5650
1. При сортировке в режимах панели без отображения путей пути игнорируются.
До сих пор у нас были режимы сортировки, независимые от режимов панели, то есть теперь уже какой-то искусственный интеллект.
Лично мне это не нравится (понимаю, что могут быть и другие мнения).
А если панель не отображает размер или время, то что, сделаем соответствующие сортировки недоступными?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Глюки и баги, появившиеся в «ночных сборках»

Post by Shmuel »

Ещё на мой взгляд негативное последствие подобного решения: делать ли пересортировку при переключении режима панели?
Если не делать (как сейчас), то получается неконсистентно, т.к. порядок элементов определяется каким-то прошлым режимом панели.
Если делать, то для юзера изменение порядка элементов будет неожиданностью, да и операция при большом количестве элементов не бесплатная.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Глюки и баги, появившиеся в «ночных сборках»

Post by DrKnS »

Shmuel, согласен. Пробуйте, играйтесь, если недостаточно удобно - сделаю переключатель.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Глюки и баги, появившиеся в «ночных сборках»

Post by Shmuel »

DrKnS wrote: Sun 09 Aug, 2020 14:55 Пробуйте, играйтесь, если недостаточно удобно - сделаю переключатель.
Как по мне,то дело не в удобстве.
Если я выше недостаточно ясно высказался, перефразирую - я за то, чтобы не было никакой связи между сортировкой и режимом панели.
Эти режимы должны быть независимы друг от друга, как было всегда.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Глюки и баги, появившиеся в «ночных сборках»

Post by buniak_a_h »

Shmuel wrote: Sun 09 Aug, 2020 12:43 А если панель не отображает размер или время, то что, сделаем соответствующие сортировки недоступными?
Утрируете?
1. Одно обоснование я написал.
2. Сортировка по имени, в панели имя отображается - разве не логично, что именно по этому полю сортировка?
3. Если бы была сортировка по "представлению даты изменения", то вопрос имел бы смысл. Хотя я не очень представляю полезность сортировки, когда идут все первые числа (разных месяцев), потом все вторые и т.д. . Или в алфавитном порядке по названиям месяцев. Но есть "абсолютные" характеристики, не зависящие от настроек (языковых, ФАР-а).
Если на панели нет столбца с именем файла (хотя полезность такого трудно представить), то всё равно остаётся настройка (не код столбца N / NO, а флаг параметров панели OPIF_SHOWNAMESONLY), и на него можно ориентироваться.
Shmuel wrote: Sun 09 Aug, 2020 13:24 не делать (как сейчас), то получается неконсистентно, т.к. порядок элементов определяется каким-то прошлым режимом панели.
Это скорее результат ошибочного подхода к сортировке. Сортировка, конечно же, не должна зависеть от "истории" сортировок. Пример: сделали макрос (клавиатурный, скорее всего), ориентирующийся на номер файла на панели; сохранили. Перезапустили ФАР - там уже нет истории, и номер файла может измениться. Или вы теперь сохраняете историю сортировок по Shift+F9? Тогда (а) её надо отображать на панели и (б) должна быть возможность ею управлять (например, в OpenPanelInfo.StartSortMode, а также в настройках - не последовательно сортировать, а «огласите весь список, пжалста!»).
Увы, что сделано, то сделано…
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Сортировка панелей по нескольким полям

Post by IgorZ »

DrKnS wrote: Wed 22 Jul, 2020 01:42
S.A. wrote: Wed 22 Jul, 2020 00:45папки идут в каком-то загадочном порядке
Какой забавный баг. Спасибо, 5645.
Я этот wer читать не умею, но падение, скорее всего, из-за него же.
Почитал про проблемы с TmpPanel. Родилось несколько мыслей.
  1. Во-многом, проблема в терминологии. Термин "Имя" многозначен, и это порождает путаницу, по поводу того, которое "имя" подразумевается в данном месте и в данный момент. Стоит, наверное, оговорить в документации однозначно, что именно он означает, и в дальнейшем исходить строго из оговорённого.
  2. Хорошо бы для сортировок ввести новую сущность: Путь (Path). То есть, путь к файлу, не содержащий имени. Тогда можно было бы иметь три неперескающихся критерия сортировки: путь, имя (строго без пути и расширения) и расширение. Комбинируя их, получаем любой нужный и понятный пользователю способ сортировки.
  3. На данный момент нельзя ни добавить свои варианты наборов в список критериев сортировки дополнение к имеющимся, ни удалить ненужные (или просто я не нашёл эту возможность?). А ведь это логичное продолжение новых возможностей.
  4. Неплохо бы иметь возможность назначать свои комбинации клавиш на те критерии, что не имеют своих из списка CtrlF3-11
Насколько перечисленное реально? Думаю, особенно полезен был бы п. 2.
Last edited by IgorZ on Fri 14 Aug, 2020 07:00, edited 1 time in total.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Сортировка панелей по нескольким полям

Post by DrKnS »

IgorZ wrote: Fri 14 Aug, 2020 06:55 Во-многом, проблема в терминологии. Термин "Имя" многозначен, и это порождает путаницу, по поводу того, которое "имя" подразумевается в данном месте и в данный момент. Стоит, наверное, оговорить в документации однозначно, что именно он означает, и в дальнейшем исходить строго из оговорённого.
В данный момент имя - это, грубо говоря, или то, что вернула ОС в FindFirstFile или то, что вернул плагин в PluginPanelItem.FileName.
Хорошо бы для сортировок ввести новую сущность: Путь (Path). То есть, путь к файлу, не содержащий имени. Тогда можно было бы иметь три неперескающихся критерия сортировки: путь, имя (строго без пути и расширения) и расширение. Комбинируя их, получаем любой нужный и понятный пользователю способ сортировки.
- Path может существовать только на плагиновых панелях и только если плагин так захотел, т.е. в 99% случаев будет бесполезен.
- Никакой комбинацией последовательных сравнений по кускам строки нельзя получить эффект сравнения по полной строке. Это когда пользователь ожидает, что "a-b.txt" меньше, чем "a.txt"
На данный момент нельзя ни добавить свои варианты наборов в список критериев сортировки дополнение к имеющимся, ни удалить ненужные (или просто я не нашёл эту возможность?). А ведь это логичное продолжение новых возможностей.
С этим есть некоторые сложности. Наборы зачем-то вынесены в API, т.е. фактически прибиты к полу.
Неплохо бы иметь возможность назначать свои комбинации клавиш на те критерии, что не имеют своих из списка CtrlF3-11
Макросы же.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Сортировка панелей по нескольким полям

Post by IgorZ »

DrKnS wrote: Fri 14 Aug, 2020 10:17
IgorZ wrote: Fri 14 Aug, 2020 06:55 Во-многом, проблема в терминологии. Термин "Имя" многозначен, и это порождает путаницу, по поводу того, которое "имя" подразумевается в данном месте и в данный момент. Стоит, наверное, оговорить в документации однозначно, что именно он означает, и в дальнейшем исходить строго из оговорённого.
В данный момент имя - это, грубо говоря, или то, что вернула ОС в FindFirstFile или то, что вернул плагин в PluginPanelItem.FileName.
Вот-вот. Идёт смешивание абстрактного и технического подходов. А человек мыслит абстракциями, и поэтому правильнее (и удобнее) "танцевать" от них, задав определение имени, и затем говорить, к примеру: "данная функция возвращает строку , содержащую абсолютный путь+имя+расширение файла". Серьёзно, опыт подсказывает, что значительное количество ошибок возникает из-за неточности терминологии, вызывающей различия в толковании. В конце концов, мы же различаем имя, отчество, фамилию, ИО, ИФ и ФИО. А ведь имя человека - аналог имени файла, отчество - аналог пути, фамилия - аналог расширения. Так что чётко оговорить то же для файлов - естественно и логично.
DrKnS wrote: Fri 14 Aug, 2020 10:17
Хорошо бы для сортировок ввести новую сущность: Путь (Path). То есть, путь к файлу, не содержащий имени. Тогда можно было бы иметь три неперескающихся критерия сортировки: путь, имя (строго без пути и расширения) и расширение. Комбинируя их, получаем любой нужный и понятный пользователю способ сортировки.
- Path может существовать только на плагиновых панелях и только если плагин так захотел, т.е. в 99% случаев будет бесполезен.
- Никакой комбинацией последовательных сравнений по кускам строки нельзя получить эффект сравнения по полной строке. Это когда пользователь ожидает, что "a-b.txt" меньше, чем "a.txt"
  • А в 1% позволит избежать проблем и даст удобство и гибкость. К примеру, отсортировать на Временной панели файлы по пути, затем по расширению, а потом по имени. Или отсортировать по имени, а затем по пути.
  • Это, кстати, ещё один пример путаницы, возникающей из-за того, что нет однозначного формального определения, что есть имя.
DrKnS wrote: Fri 14 Aug, 2020 10:17
На данный момент нельзя ни добавить свои варианты наборов в список критериев сортировки дополнение к имеющимся, ни удалить ненужные (или просто я не нашёл эту возможность?). А ведь это логичное продолжение новых возможностей.
С этим есть некоторые сложности. Наборы зачем-то вынесены в API, т.е. фактически прибиты к полу.
Да, точно. Разбирался же с этим, когда писал скрипт панели, просто забыл. Впрочем, это не самое жизненно важное требование.
DrKnS wrote: Fri 14 Aug, 2020 10:17
Неплохо бы иметь возможность назначать свои комбинации клавиш на те критерии, что не имеют своих из списка CtrlF3-11
Макросы же.
Так-то да, но порой хочется идеальных решений.
Собственно, я и писал:
Думаю, особенно полезен был бы п. 2.
, то есть критерий сортировки Path. Остальное - больше ради завершённости.
Post Reply

Return to “Обсуждение Far Manager”