сортировка по "имени"

Вам не хватает чего-то в Far? Вы считаете, что вашу идею стоит услышать? Пишите сюда.
Post Reply
lvm
Posts: 57
Joined: Thu 13 Sep, 2018 12:48

сортировка по "имени"

Post by lvm » Tue 25 Dec, 2018 08:14

Включена сортировка по имени. Я понимаю стоящую за этим логику: имя - это все до последней точки, но все равно выглядит неправильно. Кмк если бы именем считалось все до первой точки, было бы лучше.
╔══════════════════════ C:\Temp\1 ═════════╤═══════════╗ ║.. │ < Up >│25-12 10:08║ ║user.action │ 111,067│25-12 09:16║ ║user.filter │ 7,005│25-12 09:16║ ║user.action.bak │ 110,899│24-12 08:30║ ║user.filter.bak │ 7,439│24-12 08:30║ ║ │ │ ║ ║ │ │ ║

Shmuel
Posts: 5789
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

сортировка по "имени"

Post by Shmuel » Tue 25 Dec, 2018 09:34

Новогодний подарок.
Распаковать, положить рядом с макрофайлами, перезагрузить Фар.
Вызывается через CtrlShiftF3, индикатор юЮ (и то, и другое можно перенастроить).
custom_sorts_first_dot.lua.7z
Исходная версия, содержит баг
(859 Bytes) Downloaded 29 times
--
custom_sorts_first_dot.lua.v1b.7z
Исходная версия с исправленным багом
(861 Bytes) Downloaded 20 times
--
custom_sorts_first_dot.lua.v2.7z
Версия с использованием FSF.CompareStrings вместо CompareStringW
(845 Bytes) Downloaded 25 times
Last edited by Shmuel on Wed 26 Dec, 2018 08:51, edited 2 times in total.

lvm
Posts: 57
Joined: Thu 13 Sep, 2018 12:48

сортировка по "имени"

Post by lvm » Tue 25 Dec, 2018 12:04

Спасибо. Только

31: local name1, name2 = getName(p1.FileName), getName(p2.FileName)

и одной вещи я не понял: NORM_IGNORECASE убрал, но оно почему-то все равно сортирует case-insensitive.

Shmuel
Posts: 5789
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

сортировка по "имени"

Post by Shmuel » Tue 25 Dec, 2018 12:10

Так работает майкрософтовская функция CompareString. У неё много разных флагов, найдите в Интернете, поиграйтесь, может что и получится.

lvm
Posts: 57
Joined: Thu 13 Sep, 2018 12:48

сортировка по "имени"

Post by lvm » Tue 25 Dec, 2018 12:17

Так я нашел: ignorecase в разных вариантах есть, а чтобы не игнорить - нет. Потому и спрашиваю.

https://docs.microsoft.com/en-gb/window ... restringex

Shmuel
Posts: 5789
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

сортировка по "имени"

Post by Shmuel » Tue 25 Dec, 2018 12:52

Так спрашивайте у Майкрософта.
Можете использовать wcscmp (с отдельной обработкой ё и Ё).

User avatar
DrKnS
Posts: 5280
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 202 times

сортировка по "имени"

Post by DrKnS » Tue 25 Dec, 2018 13:01


Shmuel
Posts: 5789
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

сортировка по "имени"

Post by Shmuel » Tue 25 Dec, 2018 16:01

DrKnS, я подозреваю, что под "case sensitive" человек понимает так, что Z должно быть меньше b.
FSF.CompareStrings в каком-то из режимов тоже так понимает?

User avatar
DrKnS
Posts: 5280
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 202 times

сортировка по "имени"

Post by DrKnS » Tue 25 Dec, 2018 17:34

Shmuel, да.

Shmuel
Posts: 5789
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

сортировка по "имени"

Post by Shmuel » Tue 25 Dec, 2018 17:41

Уж больно лаконично. Назовите настройки, чтобы можно было попробовать. (Естественно, имеется в виду только прямая сортировка).
P.S. Уже нашёл, Ordinal + case insensitive.
Last edited by Shmuel on Tue 25 Dec, 2018 17:49, edited 1 time in total.

Shmuel
Posts: 5789
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

сортировка по "имени"

Post by Shmuel » Tue 25 Dec, 2018 18:00

И тут началось интересное (для проверки нужен LuaMacro с последнего автоматического билда на Гитхабе):
custom_sorts_first_dot.lua.7z
(844 Bytes) Downloaded 26 times

User avatar
DrKnS
Posts: 5280
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 202 times

сортировка по "имени"

Post by DrKnS » Tue 25 Dec, 2018 19:33

18446744073709551615.png

Shmuel
Posts: 5789
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

сортировка по "имени"

Post by Shmuel » Tue 25 Dec, 2018 20:11

OK, мой баг (эта функция, в отличие от CompareStringW, не обрабатывает отрицательные значения как особый случай).
Теперь остаётся понять:
1) почему файлы (даже без расширения) сортируются иначе, чем в Фаре
2) почему переключение между прямой и инверсной сортировкой ничего не меняет
custom_sorts_first_dot.lua.7z
(910 Bytes) Downloaded 20 times

Shmuel
Posts: 5789
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

сортировка по "имени"

Post by Shmuel » Tue 25 Dec, 2018 20:24

Извиняюсь, ещё один баг (копипаста).
Но поведение прежнее.
custom_sorts_first_dot.lua.7z
(911 Bytes) Downloaded 23 times

User avatar
DrKnS
Posts: 5280
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 202 times

сортировка по "имени"

Post by DrKnS » Tue 25 Dec, 2018 21:12

CompareStrings - интерфейс к базовой функции сортировки строк. На неё влияют опции в системных настройках. Отдельные компоненты (например, файловая панель) могут реализовывать расширенные варианты сортировки на её базе.

Shmuel
Posts: 5789
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 210 times

сортировка по "имени"

Post by Shmuel » Tue 25 Dec, 2018 21:19

Причина нашлась, мне на неё указали ещё здесь, но я, видно, читал по диагонали. Теперь всё работает нормально.
--
custom_sorts_first_dot.lua.7z
(850 Bytes) Downloaded 42 times
P.S. Примечание: в файле макрос назначен на клавишу F1. Пожалуйста переопределите клавишу по вашему выбору.
Last edited by Shmuel on Wed 26 Dec, 2018 08:53, edited 2 times in total.

Post Reply

Return to “Предложения и идеи”