Как сделать пользовательскую форму курсора терминала?

Я хочу изменить форму курсора в моих различных (эмулируемых) терминалах.

Мне нужна форма ⼕ (извините, если она не отображается). Это трехсторонняя коробка, которая открывается вправо. Таким образом, я мог видеть, где находятся вставки, а также видеть, на каком символе находится курсор. Я нашел этот символ в Юникоде по адресу U+2F15.

Я определенно хочу иметь возможность делать это как в виртуальных терминалах ядра Linux (т.е.что можно получить с помощью Control+ Alt+ F N) и в эмуляторах терминала с графическим интерфейсом, таких как (скажем) XTerm и RXVT. Если возможно, я хочу сделать это даже в сетевых терминалах, таких как (скажем) PuTTY и KiTTY. Если я не могу получить именно этот символ, мне нужна хотя бы эта трехстрочная форма.

Я понимаю, что это будет связано либо с escape-кодами "ANSI", либо (возможно) с настройками эмулятора терминала (хотя, учитывая, что это не относится к встроенному эмулятору терминала Linux, это нежелательно). Пожалуйста, предоставьте ответ, который не зависит от использования какой-либо конкретной оболочки. Возможно ли это вообще без изменения кода ядра?

2
29.06.2020, 16:54
1 ответ

Формы курсоров, доступные в виртуальных и реальных терминалах, ограничены. Как правило, они позволяют задавать только те формы, которые соответствуют старому оборудованию дисплея, которое обычно позволяло указывать только цикл мигания, а также начальную и конечную строки развертки для момента наведения курсора, иногда только очень ограниченное подмножество комбинаций начала и конца (. например подчеркивание, надчеркивание, половина -высоты, блок ).

Двумя основными управляющими последовательностями для этого являются DECSCUSR и LINUXSCUSR. DECSCUSR — это название DEC для управляющей последовательности, которую DEC поддерживала в своем более позднем диапазоне терминалов. Как и другие производители реальных терминалов, в своем документе DEC предоставила своему поставщику -имена частных управляющих последовательностей, которые начинались с «DEC». (В своем документе Tektronix использовала префикс «TEK» для именования частных управляющих последовательностей своего поставщика -для сравнения. )Документация по Linux, как обычно, весьма бедна и ничего не называет. Так что «LINUXCUSR» — это моя чеканка с префиксом «LINUX» по аналогии.

Ни DECSCUSR, ни LINUXSCUSR не стандартизированы. Они отличаются друг от друга, но они были изобретены примерно в одно и то же время (и появились только для DEC VT 5xx в 1990-х ), поэтому не было обычных лет предшествующего уровня техники DEC. ☺ Эгмонт Коблингер в другом месте прокомментировал, что модель обоих не впечатляет, поскольку она объединяет мерцание с формой. Также было некоторое обсуждение изменения значения DECSCUSR 0, чтобы включить определенные пользователем -формы. И Microsoft Terminal высветил несоответствие между моделью DECSCUSSR и моделью, используемой в механизме консоли Win32 , который допускал произвольные начальные строки в течение трех десятилетий (четырех десятилетий, если учитывать его предшественников в VIO. подсистема OS/2 1.x и видеопрошивка PC/AT ).

В результате не существует единой управляющей последовательности, которая работала бы универсально.мир в настоящее время делится на лагеря DECSCUSR и LINUXSCUSR, потому что почти ни один эмулятор терминала не поддерживает оба. Более того, с этими двумя у вас нет и близкой гибкости, которую вы хотите. Единственным распространенным отклонением от модели строки развертки начало+конец является вертикальная полоса, которую вы получаете только с некоторыми эмуляторами терминала с графическим интерфейсом (, например. XTerm ), который добавил одну дополнительную форму как DECSCUSR 5 и DECSCUSR 6.

Да, вы можете модифицировать код ядра FreeBSD, ядра NetBSD, ядра OpenBSD и Linux, встроенный -в эмуляторы терминала, а также различных эмуляторов терминала в режиме приложения -(кадрового буфера и X11 GUI ), чтобы сделать больше форм курсора. Однако сделать его универсальным было бы довольно сложно.

Я сделал это в моем эмуляторе терминала. DECSCUSR 7/8 представляют собой контурную рамку. DECSCUSR 9/10 — звезда. DECSCUSR 11/12 подчеркнуты+зачеркнуты. DECSCUSR 13/14 имеют перевернутую L-образную форму. Я думал, основываясь на чтении старой литературы 1970-х годов, о добавлении только двух ориентаций квадратных скобок и зачеркивания -. Но DECSCUSR не подходит для произвольной спецификации реальных символов Unicode, которую вы ищете. LINUXSCUSR вообще не соответствует этой идее , более того.

Дополнительная литература

2
18.03.2021, 23:25

Теги

Похожие вопросы