Как изменить тему курсора в CLI?

Или, улучшаясь немного относительно колдуна:

tail -f log | perl -n -e 'print "$1 $2\n" if /(src=[^\s]+) (dst=[^\s]+)/;'

(Я не выяснил, как прокомментировать ответ все же...),

5
13.02.2014, 20:43
3 ответа

Курсор оттянут эмулятором терминала или эмулятором терминала, не приложениями, работающими в них. У некоторых из них есть условие, чтобы позволить пользователю изменять форму или атрибуты курсора с помощью escape-последовательностей.

Изменение формы курсора независимо от типа терминала может быть сделано с помощью cnorm (нормальный курсор), civis (невидимый курсор), или cvvis (очень видимый курсор) terminfo возможности (например, использующий tput команда). Однако это не дает Вам гарантии что любой из cnorm или cvvis будет блочный курсор.

Влиять на blinkiness, форму и цвет и поведение курсора а именно, который должен будет быть сделан на основе на терминал.

На Linux на x86 ПК VGA и виртуальные консоли кадрового буфера, этим можно управлять с помощью escape-последовательностей как:

printf '\e[?x;y;zc'

В самой простой форме:

printf '\e[?xc'

Вы определяете высоту курсора где x диапазоны от 1 (невидимый курсор) к 8 (полный блок), 0 давая Вам значение по умолчанию (в настоящее время, то же как 2).

Так:

printf '\e[?8c'

даст Вам полный блочный курсор.

На самом деле это что tput cvvis отправляет (в то время как tput cnorm отправляет \e[0c и civis \e[1c).

При использовании 3 форм параметра поведение будет меняться в зависимости от базового видеодрайвера. Например, для получения своего рода серого курсора немигающего прямоугольника, поскольку вопрос предлагает, Вы сделали бы:

printf '\e[?81;128;240c'

В консоли PC VGA Linux. И:

printf '\e[?17;30;254c'

В консоли Linux кадрового буфера.

Теперь, это был конкретный Linux, другие терминалы имеют различные способы изменить форму курсора. Например, xterm и rxvt и их производные используют те же последовательности в качестве терминала VT520 для установки формы курсора:

printf '\e[x q'

Где x принимает значение от 1 до 6 (из xterm руководства):

  • 0-> мигающий прямоугольник.
  • 1-> мигающий прямоугольник (значение по умолчанию).
  • 2-> стабилизируют блок.
  • 3-> мигающий подчеркиванием.
  • 4-> стабилизируют подчеркивание.
  • 5-> мигающая панель (xterm).
  • 6-> стабилизируют панель (xterm).

И цвет может быть выбран с:

printf '\e]12;%s\a' 'colour'

Таким образом, Ваш серый устойчивый блочный курсор мог быть достигнут там с:

printf '\e[2 q\e]12;grey\a'

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

Например, для xterm, Вы имеете -uc/+uc опция для курсора подчеркивания, -ms для его цвета, и cursorBlink, cursorColor, cursorOffTime, cursorOnTime, cursorUnderLine, alwaysHighlight ресурсы для конфигурирования его.

И меню по умолчанию на Ctrl + щелчок левой кнопкой имеет опцию включить или выключить мигание.

5
27.01.2020, 20:38

Выполните следующую команду от подсказки или добавьте его к Вашим сценариям входа в систему:

echo -e '\033[?6c'

Escape-последовательности используются для управления выходным форматированием в терминале. echo -e говорит для интерпретации символов ESC - в этом случае \033, интерпретируется как последовательность ESC (033, код ASCII для ESC). Управляющие коды ANSI могут управлять всем от частоты мигания, цвета и других аспектов терминального вывода.

0
27.01.2020, 20:38
  • 1
    Обратите внимание, что нет ничего ANSI о той определенной последовательности. Это - конкретный Linux, детали здесь –  Stéphane Chazelas 13.02.2014, 14:32

На сегодняшний день текущая версия a ge tty (содержится в util-linux 2.27.1 [util-linux - это пакет linux, обеспечивающий большинство основных команд, например login , su , mount , more , kill - и это лишь некоторые из них] - и он должен быть у вас, если версия вашего ядра linux> = 4.4) имеет другое поведение, чем описано в еще не обновленной документации kernel.org ( Программный курсор для VGA ).

Рассмотрим

echo -n -e '\ e [? byte1 ; byte2 ; byte3 c'

byte1:

+---------------+---------------+
|  high nibble  |   low nibble  |
+---+-----------+-----------+---+
|msb|           |           |lsb|
+---+---+---+---+---+---+---+---+
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+---+---+---+---+---+---+---+---+
                  |   |   |   |
                  |   |   |   +-+
                  |   |   |     |   These bits specify the 8
                  |   |   +-----+-> possible  blinking HW caret
                  |   |         |   
                  |   +---------+
                  |
                  +---------------> When set, this bit enables SW
                                    caret instead of HW caret

] byte2 (SW-каретка):

                +-----------------> A pretty useless mask applied
                |                   to bits in byte3
+---------------+---------------+
|  high nibble  |   low nibble  |
+---+-----------+-----------+---+
|msb|           |           |lsb|
+---+---+---+---+---+---+---+---+
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+---+---+---+---+---+---+---+---+

byte3 (SW-каретка):

+---------------+---------------+
|  high nibble  |   low nibble  |
+---+-----------+-----------+---+
|msb|           |           |lsb|
+---+---+---+---+---+---+---+---+
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+---+---+---+---+---+---+---+---+
  |   |   |   |
  |   |   |   +-------------------> Highlighting
  |   |   |
  |   |   +---------------------+
  |   |                         |
  |   +-------------------------+-> Color
  |                             |
  +-----------------------------+

Выделение: выделяет символ под кареткой (например, изменение его на белый [истинный блестящий белый] вместо темно-белого [светло-серый, который обычно используется по умолчанию для телетайпов]).

Цвет: цвет каретки. Обратите внимание, что по сравнению с обычным порядком цветовых кодов ANSI, которые мы все знаем и любим, биты поменяны местами, так что для этого триплета седьмой - это l sb, а пятый - m сб.

Итак, хотя в 70-х годах ANSI определил следующие цветовые коды, установив стандарт де-факто , принятый повсеместно для TTY, различных терминалов Linux, консолей и прочего

0 black
1 red
2 green
3 yellow or dark yellow
4 blue or dark blue
5 magenta, purple or violet
6 cyan or light blue
7 white or dark white (light gray)

, в этом случае мы имеем напротив

7 white or dark white (light gray)
6 cyan or light blue
5 magenta, purple or violet
etc.

Итак, вот список:

#Hardware carets (blinking and [dark ]white)
echo -n -e '\e[?0c' #default caret
echo -n -e '\e[?1c' #invisible caret
echo -n -e '\e[?2c' #underscore caret
echo -n -e '\e[?3c' #thicker underscore caret
echo -n -e '\e[?4c' #smaller block caret
echo -n -e '\e[?5c' #small block caret
echo -n -e '\e[?6c' #big block caret
echo -n -e '\e[?7c' #biggest block caret
#On my Linux machine, both 6 and 7 are the big rectangular full-size block caret

#Software carets (non-blinking and colored)
echo -n -e '\e[?16;0;0c'  #00001000 0 00000000 black (thus invisible on black background)
echo -n -e '\e[?16;0;128c'#00001000 0 10000000 red
echo -n -e '\e[?16;0;64c' #00001000 0 01000000 green
echo -n -e '\e[?16;0;192c'#00001000 0 11000000 yellow
echo -n -e '\e[?16;0;32c' #00001000 0 00100000 blue
echo -n -e '\e[?16;0;160c'#00001000 0 10100000 magenta
echo -n -e '\e[?16;0;96c' #00001000 0 01100000 cyan
echo -n -e '\e[?16;0;224c'#00001000 0 11100000 dim white
echo -n -e '\e[?16;0;16c' #00001000 0 00010000 black     + highlighting
echo -n -e '\e[?16;0;144c'#00001000 0 10010000 red       + highlighting
echo -n -e '\e[?16;0;80c' #00001000 0 01010000 green     + highlighting
echo -n -e '\e[?16;0;208c'#00001000 0 11010000 yellow    + highlighting
echo -n -e '\e[?16;0;48c' #00001000 0 00110000 blue      + highlighting
echo -n -e '\e[?16;0;176c'#00001000 0 10110000 magenta   + highlighting
echo -n -e '\e[?16;0;112c'#00001000 0 01110000 cyan      + highlighting
echo -n -e '\e[?16;0;240c'#00001000 0 11110000 dim white + highlighting
1
27.01.2020, 20:38

Теги

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