View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003583 | Far Manager | Panel | public | 2018-02-19 18:03 | 2018-02-27 20:19 |
Reporter | Raistlin | Assigned To | DrKnS | ||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | assigned | Resolution | fixed | ||
Platform | x64 | OS | Windows | OS Version | 2008 R2 |
Product Version | 3.0 | ||||
Fixed in Version | 3.0 | ||||
Summary | 0003583: Неправильная сортировка для "й" | ||||
Description | Far не делает различия между "и" и "й" при сортировке на панелях. | ||||
Steps To Reproduce | Создаем файлы с именами "йа" и "ии". Сортировка по расширению. Файл "ии" должен идти раньше "йа", но на деле наоборот. | ||||
Tags | No tags attached. | ||||
Build | 5150 | ||||
|
у меня так и происходит. |
|
> Far не делает различия между "и" и "й" при сортировке на панелях. Это не Фар, это функция Windows API. Возможно есть какой-то флаг, на это влияющий. |
|
В Total Commander и в Windows Explorer то же самое. |
|
Фар (как и все остальные) сравнивает в контексте (т.е. всю строку), в этом случае разницы действительно нет. Если вы хотите побуквенной сортировки - включите numeric sort или uppercase before lowercase, это их побочный эффект. |
|
а почему у меня так? |
|
Значит зависит от ещё каких-то факторов. На моей системе йа идёт впереди ии также и при прямой сортировке по имени, причём во всех трёх вышеперечисленных файл-менеджерах. |
|
попробуйте ёа ее, если с йа ии всё хорошо. нагуглилось... |
|
> Если вы хотите побуквенной сортировки - включите numeric sort > 5149 -- numeric уже не помогает. Так и задумано? |
|
Да. Numeric sort теперь тоже многоуровнево-натуральная, если ОС позволяет. |
|
Мне этот вопрос с "ий" и "её" как бы не досаждает, но если бы досаждал, то за 10 минут можно сделать кастомную сортировку с использованием wcscmp. |
|
'Натуральная' прямо скажем выглядит противоестественно. В русской локали поведение для Ё и Й РАЗНОЕ: "Ё1" < "Е2", "Й1" > "И2" Может дополнить единственный оставшийся побочный эффект для получения естественной сортировки возможностью напрямую указать такую сортировку в конфиге? Кастомная - не для всех. И как-то у меня нет уверенности, что wcscmp даст нужное сравнение. |
|
> Кастомная - не для всех. Кастомная хороша тем, что решает проблему "нужного сравнения", которое разные люди понимают по-разному. Но это уже офтопик. |
|
> Для русской локали поведение для Ё и Й РАЗНОЕ. Так оно и должно быть разным, судя по вашей ссылке. Или у нас сейчас одинаковое и это типа багрепорт? |
|
Windows так сравнивает, да. Но я такое сравнение правильным назвать не могу. Не различать при сравнении строк ОБА варианта (как в английской локали) можно признать логичным, но вести себя по-разному это какой-то бред. Это, конечно, не баг farmanager (точнее баг не farmanager). Это хотелка - иметь возможность получить естественную сортировку (думаю не только с моей точки зрения) с минимальными усилиями со стороны пользователя. |
|
Shmuel, а у нас сейчас можно только кастомный критерий сортировки задать или базовую функцию типа strcmp(s1,s2), которая будет использоваться стандартными критериями, тоже можно? |
|
wcscmp - поэтому такая кастомизация ничего не даст. нужный результат может дать принудительное (optional) включение посимвольного сравнения в farmanager. |
|
Я правильно понимаю, что хочется чего-то типа: |
|
Да. Только вместо full, unicode-aware лучше system string sort |
|
и не совсем понятно как совместить numeric и per char. |
|
Numeric: os >= win7: numeric может быть system, может быть per char. os < win7: numeric только per char (если никто не напишет эмулятор system) Case sensitive: Для system: убирает NORM_IGNORECASE или LINGUISTIC_IGNORECASE. Для per char: uppercase before lowercase. |
|
DrKnS> а у нас сейчас можно только кастомный критерий сортировки задать или базовую функцию типа strcmp(s1,s2), которая будет использоваться стандартными критериями, тоже можно? Сейчас - только кастомный, но сделать дополнительно второй вариант должно быть не сложно. 2useven10> wcscmp сортирует как CompareStringOrdinal ("ё" > "я"). поэтому такая кастомизация ничего не даст. Ну не обязательно же wcscmp. Можно легко добавить look-up table и написать свою функцию сравнения в три строчки. |
|
DrKnS как это отразится в коде я представляю. Просто формально посимвольность и numeric кажутся несовместимыми. Shmuel для 33 букв алфавита кажется несложно, но добавка должна быть непротиворечива для всего unicode (ucs2) диапазона. Это уже сложнее. |
|
2useven10> Добавка реализуется достаточно легко. Ну допустим она займёт не 10 минут времени, а час - не в этом же дело, если человеку надо. |
|
> формально посимвольность и numeric кажутся несовместимыми Формально да. Однако, непосимвольный numeric в Far появился 18 часов назад, а посимвольный до этого был лет 15 и вроде никто не возражал. > добавка должна быть непротиворечива для всего unicode (ucs2) memcmp же :) |
|
Значит per char не всегда подходит. Может просто System/Far string sort? |
|
По этому инцу DrKnS вроде как уже всё сделал. После 5151 в системных настройках надо выбрать инвариантное сравнение, тогда И должна быть перед Й (Е перед Ё). PS: Не вижу разницы между ordinal и linguistic... PPS: Uppercase before lowercase было ближе к делу чем Case sensitive. |
|
linguistic - это CompareString, е вперемешку с с ё. invariant - это посимвольно по внутренней таблице, uppercase before lowercase, е перед ё. ordinal - это для настоящих пуристов, по номеру символа. ё после я, Ё перед А. |
|
> Uppercase before lowercase было ближе к делу чем Case sensitive. Для linguistic это было бы ложью. |
|
>ordinal - это для настоящих пуристов, по номеру символа. ё после я, Ё перед А. > У меня не так (ordinal == linguistic) |
|
Уточнение: не так если [ ] Case sensitive. |
|
>> Uppercase before lowercase было ближе к делу чем Case sensitive. >Для linguistic это было бы ложью. [x] Case sensitive - неичего не меняет для linguistic (по карайней мер я этого не вижу). Т.е. это тоже ложь. В таком случае луше как было и для linguistic эту опцию отключать. |
|
> [x] Case sensitive - неичего не меняет для linguistic lua:Menu.Show("abc\nAbc\naBc\nabC\nABc\naBC\naBC\nAbC\nABC", "", 0x20) > В таком случае луше как было и для linguistic эту опцию отключать "давайте запретим всё, что непонятно", да. |
|
>"давайте запретим всё, что непонятно", да. Давайте не будем передёргивать и называть непонятно что 'Case sensitive'. Достаточно посмотреть как linguistic/Case sensitive отсортирует файлы: ab_3 aB_2 Ab_1 AB_0, чтобы понять что название совершенно неуместно. И не увидел ответа про Ordinal без Case sensitive. |
|
И да на мой взгляд из linguistic имеет смысл оставить только то что сейчас linguistic+ case sensitive. |
|
> Достаточно посмотреть как linguistic/Case sensitive отсортирует файлы Точно так же как и insensitive, т.к. регистр - далеко не первый уровень сравнения и здесь ни на что не влияет. Если предыдущие уровни совпали (см. выше) - будет влиять. Это можно учитывать, можно не учитывать, что и отражает название опции. Это не "вообще все uppercase вначале", нет. > Ordinal без Case sensitive. Это upper(a) - upper(b). ё < а, потому что int(L'Ё') < int(L'А'). И да, на всякий случай - я ничего не убрал: Linguistic [][] - это как раньше по умолчанию. Invariant [x][] - это как раньше numeric. Invariant [][x] - это как раньше uppercase first. Invariant [x][x] - это как раньше numeric + uppercase first. Остальные 8 сочетаний - новые. |
|
Только моё мнение... Термин CaseSensitive запутывающий, все 12 сочетаний вряд ли нужны, достаточно: ================================================================== ( ) Ordinal = Ordinal + CaseSensitive (в терминах текущего момента) ( ) Uppercase first = Invariant + CaseSensitive ( ) Invariant (*) Linguistic = Linguistic + CaseSensitive =================================================================== [x] Numeric Всего 8 вариантов. |
|
> все 12 сочетаний вряд ли нужны Ну вроде бы никто не заставляет пользоваться, если не нужны. |
|
Конечно нет. Но при этом у всех будут бесполезные и непонятные режимы сортировки, с успешно запутанными названиями. И соответствующие вопросы. |
|
> бесполезные Если вы не видите применения CaseInsensitive - это ещё не значит, что его нет. Отсортируйте по расширению a.TXT и z.txt, например. |
|
Хороший аргумент - 4-й пункт Linguistic (при большом желании можно его раздвоить). Но никак не отдельная опция [x] Case sensitive, применяемая по-разному к 3 разным типам. |
Date Modified | Username | Field | Change |
---|---|---|---|
2018-02-19 18:03 | Raistlin | New Issue | |
2018-02-19 18:15 | zg | Note Added: 0015973 | |
2018-02-19 18:17 | shmuel | Note Added: 0015974 | |
2018-02-19 18:25 | shmuel | Note Added: 0015975 | |
2018-02-20 10:02 | DrKnS | Note Added: 0015976 | |
2018-02-21 18:23 | zg | File Added: Gimp-2.png | |
2018-02-21 18:23 | zg | Note Added: 0015980 | |
2018-02-21 18:37 | shmuel | Note Added: 0015981 | |
2018-02-21 21:46 | 2useven10 | Note Added: 0015982 | |
2018-02-22 09:33 | 2useven10 | Note Added: 0015983 | |
2018-02-22 10:45 | DrKnS | Note Added: 0015984 | |
2018-02-22 10:51 | shmuel | Note Added: 0015985 | |
2018-02-22 11:48 | 2useven10 | Note Added: 0015986 | |
2018-02-22 11:58 | shmuel | Note Added: 0015987 | |
2018-02-22 12:01 | 2useven10 | Note Edited: 0015986 | |
2018-02-22 12:17 | DrKnS | Note Added: 0015988 | |
2018-02-22 12:59 | 2useven10 | Note Added: 0015989 | |
2018-02-22 13:16 | DrKnS | Note Added: 0015990 | |
2018-02-22 13:29 | 2useven10 | Note Added: 0015991 | |
2018-02-22 13:29 | 2useven10 | Note Edited: 0015991 | |
2018-02-22 13:51 | DrKnS | Note Added: 0015992 | |
2018-02-22 14:11 | 2useven10 | Note Edited: 0015991 | |
2018-02-22 14:13 | 2useven10 | Note Added: 0015993 | |
2018-02-22 14:18 | 2useven10 | Note Added: 0015994 | |
2018-02-22 14:28 | DrKnS | Note Added: 0015995 | |
2018-02-22 14:40 | shmuel | Note Added: 0015996 | |
2018-02-22 14:58 | 2useven10 | Note Added: 0015997 | |
2018-02-22 15:04 | shmuel | Note Added: 0015998 | |
2018-02-22 15:49 | DrKnS | Note Added: 0015999 | |
2018-02-25 10:53 | 2useven10 | Note Added: 0016000 | |
2018-02-27 08:00 | 2useven10 | Note Added: 0016001 | |
2018-02-27 08:04 | 2useven10 | Note Edited: 0016001 | |
2018-02-27 08:10 | DrKnS | Note Added: 0016002 | |
2018-02-27 08:15 | DrKnS | Note Added: 0016003 | |
2018-02-27 08:24 | 2useven10 | Note Added: 0016004 | |
2018-02-27 08:29 | 2useven10 | Note Added: 0016005 | |
2018-02-27 08:30 | 2useven10 | Note Edited: 0016005 | |
2018-02-27 08:32 | 2useven10 | Note Edited: 0016005 | |
2018-02-27 08:51 | 2useven10 | Note Added: 0016006 | |
2018-02-27 12:03 | DrKnS | Note Added: 0016008 | |
2018-02-27 12:04 | DrKnS | Assigned To | => DrKnS |
2018-02-27 12:04 | DrKnS | Status | new => closed |
2018-02-27 12:04 | DrKnS | Resolution | open => fixed |
2018-02-27 12:04 | DrKnS | Fixed in Version | => 3.0 |
2018-02-27 12:04 | DrKnS | Build | => 5150 |
2018-02-27 13:25 | 2useven10 | Status | closed => assigned |
2018-02-27 13:25 | 2useven10 | Note Added: 0016009 | |
2018-02-27 13:28 | 2useven10 | Note Added: 0016010 | |
2018-02-27 13:39 | 2useven10 | Note Edited: 0016010 | |
2018-02-27 13:40 | 2useven10 | Note Edited: 0016010 | |
2018-02-27 14:04 | DrKnS | Note Added: 0016012 | |
2018-02-27 14:26 | 2useven10 | Note Added: 0016014 | |
2018-02-27 14:37 | 2useven10 | Note Edited: 0016014 | |
2018-02-27 14:38 | 2useven10 | Note Edited: 0016014 | |
2018-02-27 18:53 | DrKnS | Note Added: 0016017 | |
2018-02-27 19:29 | 2useven10 | Note Added: 0016018 | |
2018-02-27 19:33 | DrKnS | Note Added: 0016019 | |
2018-02-27 20:19 | 2useven10 | Note Added: 0016020 |