Сброс стиля курсора виртуального терминала Ubuntu
Я использую Ubuntu 14.04 и использую один из виртуальных терминалов (TTY[1-6], доступный через Ctrl-Alt-F[1-6]); Я хочу навсегда изменить вид моего курсора с видимого по умолчанию, мигающего подчеркивания, на мигающий прямоугольник. Я могу временно изменить его, но он постоянно сбрасывается при запуске определенных приложений.
Первоначально стиль курсора в сеансах TTY был мигающим подчеркиванием. Я обнаружил, что могу изменить его на мигающую коробку с помощью команды:
printf '\e[?8c'
Это меняет курсор в терминале и отражается в таких программах, как emacs или elinks. Поэтому я поместил вышеуказанную команду в свой.bashrc.
Однако некоторые приложения, кажется, возвращают стиль курсора к мигающему подчеркиванию, и это сохраняется даже после выхода из этих приложений. Я могу сбросить стиль курсора до мигающего окна, повторно введя указанную выше команду, используя источник.bashrc, или выйдя из системы и вернувшись обратно.
Например, рассмотрим, как следующие 3 приложения (tmux, emacs, elinks) влияют на стиль курсора:
- tmux: стиль курсора немедленно устанавливается на мигающее подчеркивание, этот стиль поддерживается во всех приложениях, запущенных в tmux, и изменение сохраняется после выхода из tmux. Приведенная выше команда printf не действует в tmux.
- emacs: стиль курсора зависит от того, какой стиль был активен, когда я его запустил, а затем при выходе из emacs стиль меняется на мигающее подчеркивание.
- elinks: стиль курсора зависит от того, какой стиль был активен, когда я его запускал, и стиль курсора НЕ изменяется при выходе из elinks.
Я должен отметить, что у меня есть настройки emacs для установки стиля курсора (внутри emacs) на блок, и что, хотя я искал настройку для установки стиля курсора в tmux, я не смог найти ничего, кроме записи в справочной странице tmux, которая состояния:
tmux understands some extensions to terminfo(5):
[...]
Cs, Csr
Change the cursor style. If set, a sequence such as this may be used to change the cursor to an underline:
$ printf '\033[4 q'
If Csr is set, it will be used to reset the cursor style instead of Cs.
К сожалению, я не понимаю, как "установить Cs", и, как упоминалось выше, я попытался выполнить команду printf, чтобы установить стиль курсора в tmux безрезультатно.
Еще одно интересное замечание: проблема с изменением стиля курсора не возникает при запуске эмулятора X-терминала, такого как XFCE4 Terminal. Это только кажется, что происходит в TTY.
Кажется, я не могу найти информацию о других людях, у которых была эта проблема, или о настройках в указанных приложениях, которые могут быть причиной проблемы. Что является причиной этой проблемы и как я могу решить ее, чтобы у меня был постоянный стиль курсора мигающего блока?
1 ответ
Функции терминала доступны не для всех терминалов и могут отличаться в зависимости от версии tmux. Я вижу описание, приведенное в tmux 1.6 на Debian 7. Ubuntu 14.04 немного устарела и имеет tmux 1.8 (то же описание).
Пример, приведенный на странице руководства, выглядит следующим образом DECSCUSR
, который поддерживается xterm
начиная с патча № 252 в 2009 году. См. Последовательности управления XTerm:
CSI Ps SP q
Set cursor style (DECSCUSR, VT520).
Ps = 0 -> blinking block.
Ps = 1 -> blinking block (default).
Ps = 2 -> steady block.
Ps = 3 -> blinking underline.
Ps = 4 -> steady underline.
Ps = 5 -> blinking bar (xterm).
Ps = 6 -> steady bar (xterm).
Чтобы использовать их, вы должны сделать измененную запись terminfo, используя тик ncurses, например,
infocmp -x >foo
vi foo
tic -x foo
добавив эту строку (с ведущей вкладкой, как и другие возможности):
Cs=\E[%p\sq, Csr=\E[0\sq,
Однако, проверяя исходный код tmux 2.1, он больше не читает эти функции terminfo и был изменен для использования Cs
а также Cr
для настройки цвета (сделано в более старых версиях с использованием Cc
а также Cr
). Более новая версия имеет встроенную логику для распознавания DECSCUSR
без расширения terminfo.
Терминалы на основе VTE (такие как терминал XFCE) могут (в зависимости от версии) реализовывать DECSCUSR
, но консоль Linux вряд ли сделает это, поскольку она реализует только подмножество VT220, в то время как DECSCUSR
от VT520
терминал (суперсет VT220).
Вы увидите различия с другими приложениями, такими как Emacs, потому что DECSCUSR
перекрывает другие функции стиля курсора, такие как мигающий курсор, установите или сбросьте с помощью cvvis
а также cnorm
возможности от terminfo для xterm
:
CSI ? Pm h
DEC Private Mode Set (DECSET).
Ps = 1 2 -> Start Blinking Cursor (att610).
Однако вы, похоже, хотите изменить внешний вид курсора в консоли Linux (также называемой виртуальной консолью). DECSCUSR
не имеет никакого эффекта там.
Чтобы сделать курсор постоянно мигающим, вам придется изменить возможности появления курсора в описаниях терминалов, которые вы используете. Те civis
(сделать курсор невидимым), cnorm
(сделать курсор "нормальным" видом) и cvvis
(сделать курсор очень видимым):
- Делая оба из тех
\e[?8c
в записи "linux" указывается, что программы, такие как emacs, используют эту запись, чтобы использовать ваш мигающий курсор. - tmux также читает запись терминала, глядя на
cnorm
а такжеcivis
, - elinks, с другой стороны, жестко запрограммирован, игнорируя базу данных терминала. Быстро прочитав его источник, я не вижу никаких escape-последовательностей, которые сбрасывают терминал или изменяют внешний вид курсора.
Поскольку вы используете tmux
Вам также может понадобиться изменить xterm
(так что приложения, работающие внутри tmux
использовать этот стиль курсора). Но сначала протестируйте без этого: если нужно, вы можете объединить \e[?8c
с существующим cnorm
строка, так как xterm
игнорируемых \e[?8c
,