Как разрешить gnome-терминалу использовать определенный шрифт для отображения знаков пунктуации в полноразмерных формах? (· '' «»)


1

Я хотел бы использовать шрифт SimSun (宋体) для отображения символов «точка / середина»· , одинарные кавычки (вьющиеся) ‘’, двойные кавычки (вьющиеся)“” в их полноразмерных формах , потому что их легко отличить от .(точки) '(одинарные кавычки) "(двойная кавычка), и такая различимая видимость особенно полезна при наборе кода с использованием метода ввода, потому что метод ввода может легко вводить символы · '' “”, и код не может быть скомпилирован ( char *str=“will not compile”;).

В редакторе gedit, geany и leafpad, установите шрифт SimSun, чтобы он работал как положено.

Geany редактор, шрифт SimSun, полная ширина формы

Однако в gnome-terminal установка шрифта на SimSun не дает ожидаемого результата. Это , кажется , Gnome-терминал использовать другой шрифт , чтобы показать их половину формы ширины, или кажется , они просто толпятся.

gnome-терминал, шрифт SimSun, формы половинной ширины

Я также попробовал lxterminal (LXDE) и Terminal (xfce) и ROXTerm, они отображались так же, как и gnome-Terminal.

Как позволить этим эмуляторам терминала отображать знаки пунктуации в полноразмерных формах, как это делает Geany?

Пример текста

1234567890
·“”‘’

Кодовые точки Unicode (HEX)

   UTF16  UTF8
· 00B7   C2B7
‘ 2018   E28098
’ 2019   E28099
“ 201C   E2809C
” 201D   E2809D

Ответы:


1

Для более старых версий gnome-терминала вы должны экспортировать VTE_CJK_WIDTH=wideпеременную перед запуском первого экземпляра gnome-терминала.

В более новых версиях gnome-terminal (возможно, начиная с 3.12 или 3.14) это было перенесено в настройку пользовательского интерфейса: настройки профиля -> совместимость -> символы неоднозначной ширины: узкий (по умолчанию) или широкий (то, что вы ищете).

Обратите внимание, что любое сложное приложение (например, текстовый редактор), которое вы запускаете в своем терминале, также должно быть уведомлено об этом изменении, иначе оно будет иметь ложные предположения о местоположении курсора, и дисплей, скорее всего, развалится. Я не знаю об общем методе для этого (может быть / должна быть локаль, в которой wcwidth () возвращает 2 для этих символов, а не 1, но я не думаю, что они есть), поэтому вам придется настроить каждый приложение отдельно (если у них есть такая опция конфигурации вообще). Простые утилиты, которые не заботятся о курсоре, например, catкоманда должна работать без изменений.


И чтобы уточнить: в gnome-Terminal ширина символа (занимает ли он одну или две ячейки) никогда не определяется шрифтом.
egmont

Большое спасибо!!! Настройка пользовательского интерфейса в более новой версии gnome-terminalработает хорошо (хотя требует открытия нового экземпляра). VTE_CJK_WIDTH=wideработает для некоторых других терминалов, в том числе lxterminal lilyterm, но не mate-terminalдля MATE Desktop (который является производным от GNOME2).
LiuYan 研 研

Похоже, что в bash есть ошибка, когда VTE_CJK_WIDTH = wide: если я вставил ·“”‘’в командную строку bash, я не могу переместить курсор назад к·“”‘’
исходному месту

Это не ошибка в bash как таковая. Каждое приложение, которое выполняет позиционирование курсора, должно знать об изменении. Возможно, вы пропустили это в моем ответе или не думаете, что bash также относится к этой категории. Я не думаю, что bash поддерживает это, и я не уверен, должна ли эта функция принадлежать bash или системе локалей. К сожалению, с этими настройками вы ограничены утилитами, которые производят некоторый непрерывный поток вывода, не заботясь о положении курсора, и приложениями, которые выполняют перемещение курсора, но могут обрабатывать символы неоднозначной ширины, имеющие двойную ширину.
egmont

Если я запускаю vimиз командной строки bash, vim может правильно обрабатывать форму полной ширины (как отображение, так и перемещение курсора), catдействует как bash.
LiuYan 刘 研
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.