far2l icon indicating copy to clipboard operation
far2l copied to clipboard

Неправильно отображаются 'й' и 'ё' в именах файлов, созданных не в far2l

Open strim opened this issue 4 years ago • 29 comments

Русские имена файлов с буквами 'й' и 'ё' отображаются с отъехавшими надстрочными частями, словно они являются отдельными символами (на картинке "неудачный файл.txt"). Такая проблема не случается с файлами, созданными в самом far2l (на картинке "удачный файл.txt"). Наблюдаю эту проблему уже года 2-3 с разными сборками far2l под Mac OS X c wxWidgets 3.0 - 3.1.

image

Возможно, баг дублирует https://github.com/elfmz/far2l/issues/213, но на тот явно забили. А возможно - это всем известная проблема, и есть способ её порешать? Спасибо!

strim avatar Oct 25 '20 05:10 strim

Приложил подорожник, должно стать лучше. Но сделать идеально - не в ближайшее время точно, внутренняя логика фара не рассчитана на такое - когда символов два, а выглядят как один

elfmz avatar Oct 25 '20 19:10 elfmz

Приложил подорожник, должно стать лучше. Но сделать идеально - не в ближайшее время точно, внутренняя логика фара не рассчитана на такое - когда символов два, а выглядят как один

А как это в виндовом фаре решают?

unxed avatar Oct 25 '20 19:10 unxed

никак diacritical.txt

image

elfmz avatar Oct 25 '20 19:10 elfmz

Но у меня винда не свежая (2008r2 - считай - семерка), может в десятке чтонить с этим сделали интересное. Самое забавное что в notepad поведение как в far2l с подорожником - при удалении backspace'ом вначале у Й превращается в И и только следующий backspace его стирает полностью :)

elfmz avatar Oct 25 '20 19:10 elfmz

Ха! А в линуксовой консоли кто-то такое умеет вообще?

при удалении backspace'ом вначале у Й превращается в И и только следующий backspace его стирает полностью

А идеалогически правильно было бы сразу весь символ съедать, типа?

unxed avatar Oct 25 '20 20:10 unxed

Кстати, тут схожая проблемка есть, возможно, примерно того же генеза #825

unxed avatar Oct 25 '20 20:10 unxed

проверил в гномотерминале ubuntu16: image

в миднайте, под тем же гномотерминалом: image

Я в изумлении, если честно. Я ожидал что исконно-линуховые апликухи будут к такому готовы. Ведь с UTF8 просто нельзя быть не готовым к такому.

elfmz avatar Oct 25 '20 20:10 elfmz

в 20й убунте получше - смайлик желтый и не наезжает на квадратную скобку, но в миднайте все такой же косяк с й

elfmz avatar Oct 25 '20 20:10 elfmz

Я ожидал что исконно-линуховые апликухи будут к такому готовы.

Там страннота с этим сэмплом страннейшая:

  1. Если его вырезать или скопировать в фаре, то потом не получается в фар же вставить
  2. Если изнутри фара натравить на этот сэмпл turbo, не получается поставить курсор на правую скобку (а в gnome terminal получается)

Я на mint 20, который эквивалентен 20 убунте

unxed avatar Oct 25 '20 20:10 unxed

Спасибо за подорожник :-), похоже вскопнули какой-то древний пласт. С последней сборкой выглядит так: image

strim avatar Oct 26 '20 05:10 strim

Обычно для простоты считают 1 уникодный code point == 1 символ, но это часто не работает (из-за этих-самых комбинированных символов, ну ещё и из-за суррогатов).

Разделять текст на настоящие символы сложнее. Если это надо сделать, обычно проходят BreakIterator'ом из ICU.

Представление символов с диакритиками (вроде ё и й) в виде последовательности code point'ов -- это рекомендованный стандартом способ, хотя обычно так никто не делает.

Комбинированные символы (вроде ё и й одним code point'ом) в уникоде в качестве исключения только для тех символов, которые были в старых кодировках. Строку можно перевести в каноническую форму нормалайзером из ICU. В большинстве случаев это поможет, но для символов, для которого комбинированной формы нет (какое-нибудь ы̆ы̆ы̆ы̆) такое не сработает.

Насчёт того, что смайл налазит на следующий символ -- это скорее проблема шрифта, а не рендерера. Если какой-то символ оказывается шире, чем остальные, то либо он налазит на следующий, либо сдвигает оставшуюся строку вправо. По-моему, лучше, чтоб налазил.

И ещё надо не забывать о лигатурах. В некоторых языках символы объединяются в лигатуры. Например, в арабском ويكيبيديا, если повставлять пробелы между буквами, выглядит так: وي ك ي ب ي د ي ا. Ну и у программистов начали появляться шрифты с лигатурами, всякие там JetBrains Mono (рекомендую). В этом случае если каждый символ отдельно рендерить, то лигатуры сливаться не будут, а если вместе -- то будут. Но тогда больше риск, что в шрифте ширина глифа окажется неправильной и всё съедет.

mooskagh avatar Oct 26 '20 07:10 mooskagh

это скорее проблема шрифта, а не рендерера

Вот редактор фара в его wx-версии и в терминалке гнома. Шрифт один и тот же — Ubuntu Mono.

Снимок экрана в 2020-10-26 11-30-56

unxed avatar Oct 26 '20 08:10 unxed

Ну и у программистов начали появляться шрифты с лигатурами, всякие там JetBrains Mono (рекомендую).

Идея — кайф! Сходил на сайт JB, восхитился, стянул шрифт, выставил в f2l, и словил огромные дыры между буквами.

UPD: Похоже, с дырами рендерится шрифт Ubuntu, а JB Mono просто не выбирается.

Снимок экрана в 2020-10-26 11-39-08

unxed avatar Oct 26 '20 08:10 unxed

Да причины вполне понятны, корень проблем в квадратно-гнездовом представлении винды о консоли, ну и фар его унаследовал. 2 @strim а теперь попробуйте шрифт размером кратным 5. То есть один из 10 15 20 25..

elfmz avatar Oct 26 '20 08:10 elfmz

в квадратно-гнездовом представлении винды о консоли

зато в никсах до недавнего времени клипборда в консоли не было и половины кнопок))

В теперь попробуйте шрифт размером кратным 5. То есть один из 10 15 20 25..

А что должно случится? Вроде странностей не наблюдается

unxed avatar Oct 26 '20 08:10 unxed

Ну и у программистов начали появляться шрифты с лигатурами, всякие там JetBrains Mono (рекомендую).

Идея — кайф! Сходил на сайт JB, восхитился, стянул шрифт, выставил в f2l, и словил огромные дыры между буквами

Странно, у меня с JetBrains Mono никогда такого не было (и в far2l тоже хорошо работает). После установки там много всяких вариантов в списке было, я выбрал JetBrains Mono Regular.

mooskagh avatar Oct 26 '20 08:10 mooskagh

А что должно случится? Вроде странностей не наблюдается

это я strim посоветовтаь хотел, не вкопипастил ник просто

elfmz avatar Oct 26 '20 08:10 elfmz

После установки там много всяких вариантов в списке было, я выбрал JetBrains Mono Regular.

Хм, со второй попытки включился! Лигатуры работат странно, но работают. Ух, зачем же он только узкий такой. Не очень-то оно читабельность повышает, наоборот, скорее: контраст заглавных и строчных букв как раз для того и придуман, чтоб читабельность повысить.

unxed avatar Oct 26 '20 08:10 unxed

это скорее проблема шрифта, а не рендерера

Вот редактор фара в его wx-версии и в терминалке гнома. Шрифт один и тот же — Ubuntu Mono.

А теперь попробуйте в рамочку в это поместить, или например в имени файла использовать. То всё что справа, cъедет.

┌───────────────────┐
│  ╔═══╗ Some Text  │▒
│  ╚═╦═╝ in the box │▒
╞═╤══╩══╤═══════════╡▒
│ ├──┬──┤ 👁 👁 👁 👁 │▒  <- вот тут тоже съехал
│ └──┴──┘           │▒
└───────────────────┘▒
 ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

mooskagh avatar Oct 26 '20 08:10 mooskagh

Ну, хм, mcedit, turbo и nano считают смайл шириной в два знакоместа просто. И ничего, интерфейс у turbo не ломается от этого, хотя он тоже из box drawing chars сделан, как и у фара. Ну это если в терминалке гнома.

unxed avatar Oct 26 '20 08:10 unxed

Браузеры в fixed-width chars режиме тоже смайл на два знакоместа рисуют. И хром и лиса. Ну уж браузеры-то точно должны знать, как обращатья с юникодом правильно?

https://2g0.ru/tmp/demo1.htm

unxed avatar Oct 26 '20 09:10 unxed

Браузеры в fixed-width chars режиме тоже смайл на два знакоместа рисуют. И хром и лиса. Ну уж браузеры-то точно должны знать, как обращатья с юникодом правильно?

2g0.ru/tmp/demo1.htm

В браузере у меня так, где-то полтора. image

В некоторых моноширинных шрифтах смайлы действительно ровно в два раза шире, но это опять же просто автор шрифта так решил, это не хром с фаерфоксом. В разных шрифтах оно по-разному, нельзя заранее сказать как оно будет, или как "надо".

mooskagh avatar Oct 26 '20 09:10 mooskagh

А вот нашлось: https://bugs.launchpad.net/ubuntu/+source/gnome-terminal/+bug/1665140

Со стандарта Unicode 9 (2017 года), смайлы объявили wide, и они действительно должны занимать два знакоместа (как, например, иероглифы). Это облегчает работу с моноширинными интерфейсами, но как видим не все шрифты ещё правильно рендерят смайлы.

mooskagh avatar Oct 26 '20 09:10 mooskagh

Ладно, Ктулху с ней с шириной, вот почему в turbo под far2l курсор на правую квадратную скобку у смайла не поставить? А в гном терминале норм. Ну это-то точно баг.

unxed avatar Oct 26 '20 09:10 unxed

давайте ширину смайла в соответтвующей теме обсуждать https://github.com/elfmz/far2l/issues/825 , природа багов общая но все же человек мою просьбу выставить кратный 5 шрифт может не заметить

elfmz avatar Oct 26 '20 09:10 elfmz

Спасибо за глубокое осмысление и за совет использовать JetBrains Mono! С этим шрифтом на последней сборке всё стало нормально. image

strim avatar Oct 26 '20 18:10 strim

JBшный так и не прижился у меня (больно узкий), но за инфу про прогерские шрифты с лигатурами — Большое Человеческое Спасибо!

Вот ещё несколько таких, для тех, кому JB не зашел. И вот тут ещё есть. https://github.com/tonsky/FiraCode https://github.com/microsoft/cascadia-code https://rubjo.github.io/victor-mono/

О господи, с Microsoft'овского гитхаба подсел на Microsoft'овский шрифт. Какой-то я неправильный линуксоид

unxed avatar Oct 26 '20 19:10 unxed

Рендерилка f2l, конечно, подглюкивает местами на некоторых конструкциях. На таком, например !== шрифт cascadia

unxed avatar Oct 26 '20 20:10 unxed

а что у нас здесь осталось не решенным, собственно? я проверил сэмпл, нормально сейчас рисуется. два бекспейса тоже нормально, ведь по факту там два символа наличествует

что требуется доделать с точки зрения UX?

unxed avatar Jan 02 '22 18:01 unxed

duplicates #1329, #213

unxed avatar Oct 24 '22 07:10 unxed