Page 1 of 1

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

Posted: Tue 25 Dec, 2018 08:14
by lvm
Включена сортировка по имени. Я понимаю стоящую за этим логику: имя - это все до последней точки, но все равно выглядит неправильно. Кмк если бы именем считалось все до первой точки, было бы лучше.
╔══════════════════════ 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║ ║ │ │ ║ ║ │ │ ║

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

Posted: Tue 25 Dec, 2018 09:34
by Shmuel
Новогодний подарок.
Распаковать, положить рядом с макрофайлами, перезагрузить Фар.
Вызывается через CtrlShiftF3, индикатор юЮ (и то, и другое можно перенастроить).
custom_sorts_first_dot.lua.7z
Исходная версия, содержит баг
(859 Bytes) Downloaded 37 times
--
custom_sorts_first_dot.lua.v1b.7z
Исходная версия с исправленным багом
(861 Bytes) Downloaded 29 times
--
custom_sorts_first_dot.lua.v2.7z
Версия с использованием FSF.CompareStrings вместо CompareStringW
(845 Bytes) Downloaded 32 times

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

Posted: Tue 25 Dec, 2018 12:04
by lvm
Спасибо. Только

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

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

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

Posted: Tue 25 Dec, 2018 12:10
by Shmuel
Так работает майкрософтовская функция CompareString. У неё много разных флагов, найдите в Интернете, поиграйтесь, может что и получится.

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

Posted: Tue 25 Dec, 2018 12:17
by lvm
Так я нашел: ignorecase в разных вариантах есть, а чтобы не игнорить - нет. Потому и спрашиваю.

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

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

Posted: Tue 25 Dec, 2018 12:52
by Shmuel
Так спрашивайте у Майкрософта.
Можете использовать wcscmp (с отдельной обработкой ё и Ё).

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

Posted: Tue 25 Dec, 2018 13:01
by DrKnS

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

Posted: Tue 25 Dec, 2018 16:01
by Shmuel
DrKnS, я подозреваю, что под "case sensitive" человек понимает так, что Z должно быть меньше b.
FSF.CompareStrings в каком-то из режимов тоже так понимает?

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

Posted: Tue 25 Dec, 2018 17:34
by DrKnS
Shmuel, да.

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

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

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

Posted: Tue 25 Dec, 2018 18:00
by Shmuel
И тут началось интересное (для проверки нужен LuaMacro с последнего автоматического билда на Гитхабе):
custom_sorts_first_dot.lua.7z
(844 Bytes) Downloaded 31 times

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

Posted: Tue 25 Dec, 2018 19:33
by DrKnS
18446744073709551615.png

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

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

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

Posted: Tue 25 Dec, 2018 20:24
by Shmuel
Извиняюсь, ещё один баг (копипаста).
Но поведение прежнее.
custom_sorts_first_dot.lua.7z
(911 Bytes) Downloaded 32 times

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

Posted: Tue 25 Dec, 2018 21:12
by DrKnS
CompareStrings - интерфейс к базовой функции сортировки строк. На неё влияют опции в системных настройках. Отдельные компоненты (например, файловая панель) могут реализовывать расширенные варианты сортировки на её базе.

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

Posted: Tue 25 Dec, 2018 21:19
by Shmuel
Причина нашлась, мне на неё указали ещё здесь, но я, видно, читал по диагонали. Теперь всё работает нормально.
--
custom_sorts_first_dot.lua.7z
(850 Bytes) Downloaded 52 times
P.S. Примечание: в файле макрос назначен на клавишу F1. Пожалуйста переопределите клавишу по вашему выбору.