Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
strim opened this issue Oct 25, 2020 · 31 comments

Comments

@strim
Copy link

strim commented Oct 25, 2020

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

image

Возможно, баг дублирует #213, но на тот явно забили. А возможно - это всем известная проблема, и есть способ её порешать? Спасибо!

elfmz added a commit that referenced this issue Oct 25, 2020
 workaround for diacritical characters rendering (touch #826 #213)
@elfmz
Copy link
Owner

elfmz commented Oct 25, 2020

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

@unxed
Copy link
Contributor

unxed commented Oct 25, 2020

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

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

@elfmz
Copy link
Owner

elfmz commented Oct 25, 2020

никак
diacritical.txt

image

@elfmz
Copy link
Owner

elfmz commented Oct 25, 2020

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

@unxed
Copy link
Contributor

unxed commented Oct 25, 2020

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

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

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

@unxed
Copy link
Contributor

unxed commented Oct 25, 2020

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

@elfmz
Copy link
Owner

elfmz commented Oct 25, 2020

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

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

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

@elfmz
Copy link
Owner

elfmz commented Oct 25, 2020

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

@unxed
Copy link
Contributor

unxed commented Oct 25, 2020

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

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

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

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

@strim
Copy link
Author

strim commented Oct 26, 2020

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

@mooskagh
Copy link

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

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

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

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

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

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

@unxed
Copy link
Contributor

unxed commented Oct 26, 2020

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

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

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

@unxed
Copy link
Contributor

unxed commented Oct 26, 2020

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

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

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

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

@elfmz
Copy link
Owner

elfmz commented Oct 26, 2020

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

@unxed
Copy link
Contributor

unxed commented Oct 26, 2020

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

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

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

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

@mooskagh
Copy link

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

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

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

@elfmz
Copy link
Owner

elfmz commented Oct 26, 2020

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

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

@unxed
Copy link
Contributor

unxed commented Oct 26, 2020

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

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

@mooskagh
Copy link

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

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

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

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

@unxed
Copy link
Contributor

unxed commented Oct 26, 2020

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

@unxed
Copy link
Contributor

unxed commented Oct 26, 2020

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

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

@mooskagh
Copy link

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

2g0.ru/tmp/demo1.htm

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

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

@mooskagh
Copy link

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

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

@unxed
Copy link
Contributor

unxed commented Oct 26, 2020

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

@elfmz
Copy link
Owner

elfmz commented Oct 26, 2020

давайте ширину смайла в соответтвующей теме обсуждать #825 , природа багов общая но все же человек мою просьбу выставить кратный 5 шрифт может не заметить

@strim
Copy link
Author

strim commented Oct 26, 2020

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

@unxed
Copy link
Contributor

unxed commented Oct 26, 2020

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

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

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

@unxed
Copy link
Contributor

unxed commented Oct 26, 2020

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

@unxed
Copy link
Contributor

unxed commented Jan 2, 2022

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

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

@unxed
Copy link
Contributor

unxed commented Oct 24, 2022

duplicates #1329, #213

@elfmz
Copy link
Owner

elfmz commented Nov 5, 2022

closing as fixed

@elfmz elfmz closed this as completed Nov 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants