Может ли скрипт определить, какие символы может отображать терминал?

Может ли скрипт определить, какие символы может отображать терминал?

Я работаю над скриптом, который отображает символы UTF-8 в качестве вывода. В моем терминале Gnome это выводит симпатичный кленовый лист (

решение1

Приложение, работающее в терминале, не имеет возможности узнать от терминала, как выглядят нарисованные терминалом глифы (или даже являются ли они символами-заменителями/заполнителями).

Одна вещь, приложениеможетнужно выяснить, поддерживает ли терминал UTF-8 вообще, и если поддерживает, поддерживает ли он символы переменной ширины. Метод следующий:

  • Прочитайте позицию курсора, написав ESC [ 6 nи ожидая ESC[ линия ; кол R
  • Запишите 2-байтовую последовательность "\xc2\xa0". Если терминал поддерживает UTF-8, это один неразрывный пробел. Если терминал не поддерживает UTF-8, это что-то неизвестное, но, вероятно, занимающее 2 символьные позиции (вероятно, Âза которым следует неразрывный пробел, на самом деле).
  • Снова прочитайте положение курсора и выясните, переместился ли курсор на одну позицию или на две позиции.

Если терминал поддерживает UTF-8, то вы можете узнать, поддерживает ли он переменную ширину символов, в основном используя тот же трюк. Считайте позицию курсора, напишите символ, который должен быть двойной ширины в моноширинных шрифтах, например, あ, затем снова считайте позицию курсора. Если терминал не поддерживает символы двойной ширины, курсор, вероятно, наивно переместился только на одну позицию.

Связанный контент