1

Я использую 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 ответ1

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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .