Какой тип последовательности является escape-последовательностью, начинающейся с «\ 033]»

19

Я нашел много escape-последовательностей в Bash, начиная с того \033], что это за последовательности и с чего они начинаются \033]?

Sessho
источник

Ответы:

25

Строка на самом деле, \033[и это еще не все.

После этой открывающей скобки появляется серия цифр и символов. Эта строка называется escape-последовательностью и используется, помимо прочего, для управления курсором консоли и цветом текста.

непечатные escape-последовательности должны быть заключены в \[\033[ and \]

Если escape-последовательность контролирует цвет текста, за ней будет следовать m.

Вот таблица для цветовых последовательностей:

Black       0;30     Dark Gray     1;30  
Blue        0;34     Light Blue    1;34  
Green       0;32     Light Green   1;32  
Cyan        0;36     Light Cyan    1;36  
Red         0;31     Light Red     1;31  
Purple      0;35     Light Purple  1;35  
Brown       0;33     Yellow        1;33  
Light Gray  0;37     White         1;37   

Итак, если вы хотите, чтобы ваша консольная подсказка была синей, вы должны использовать следующую escape-последовательность (в названии файла, которое я забыл):

\[\033[34m\]

(Обратите внимание m)

Однако эта escape-последовательность не только контролирует цвет. Он также может управлять движением курсора. Вот таблица / список с кодами движения и как они работают:

  • Поместите курсор:

    \033[<L>;<C>H

    Или

    \033[<L>;<C>f

    помещает курсор в строку L и столбец C.

  • Переместите курсор вверх на N строк:

    \033[<N>A
  • Переместите курсор вниз на N строк:

    \033[<N>B
  • Переместите курсор вперед на N столбцов:

    \033[<N>C
  • Переместить курсор назад на N столбцов:

    \033[<N>D
  • Очистите экран, перейдите к (0,0):

    \033[2J
  • Стереть до конца строки:

    \033[K
  • Сохранить позицию курсора:

    \033[s
  • Восстановить позицию курсора:

    \033[u

Просто имейте в виду, что последние два могут не работать в эмуляторе терминала, который вы используете. Видимо, только xtermи nxtermиспользуйте эти две последовательности.

И пример использования одной из этих escape-последовательностей: скажем, я хочу поместить курсор в строку 3, столбец (символ) 9. Для этого я бы использовал

\[033\[3;9H]

(Я предполагаю, что столбец 0 является первой позицией, так что это будет 8-й символ).

Источник: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (также читайте 6.2)

Более общее чтение: http://ascii-table.com/ansi-escape-septions.php

Википедия: https://en.wikipedia.org/wiki/ANSI_escape_code

Странник
источник
2
рассмотрите также ссылку на en.wikipedia.org/wiki/ANSI_escape_code
кошка
2
Обратите внимание, что \ 033 - это символ ESCAPE в восьмеричном формате, поэтому он может быть задан в десятичной (27) или шестнадцатеричной (0x1B). Существуют и другие распространенные способы написания ESCAPE, например, «^ [» в сценариях оболочки, «\ e» в bindkey и т. Д.
jamesqf
1
Обратите внимание, что некоторые записи в этой таблице вводят в заблуждение или неточны: жирный, слабый, подчеркивание и т. Д. Могут быть установлены и сброшены независимо от цвета, а также сброшены на 0 вместе с цветами; есть целый отдельный набор кодов (40–49) для фона, и вместо 7 вместо него передний план и фон; ESC [2Kстирает всю строку как до, так и после курсора. Гораздо лучшим источником была бы статья в Википедии, или вы могли бы перейти непосредственно к ECMA-48 , раздел 8.3.117 SGR - Выбор графического представления .
Deltab
Фраза «символ« m »в конце каждого из следующих предложений используется в качестве символа остановки» в посте cplusplus.com также немного сбивает с толку, поскольку таблица ниже содержит команды, которые явно не заканчиваются «м». На самом деле это кажется еще более вводящим в заблуждение здесь, когда представлено прямо вверху.
ilkkachu
1
Технически, лидерство 0;в цветовых последовательностях не является необходимым. Это просто делает цвет фона по умолчанию перед установкой переднего плана. Вы также можете установить фон с помощью 4x.
Фонд Моника иск
17

Это управляющие команды для терминала.

Терминалы изначально были довольно тупыми устройствами, подключенными к последовательному порту, а не тем модным программным обеспечением с несколькими вкладками, которое у нас теперь есть. Поскольку они получали только поток символов (байтов), не было четкого разделения между данными (что печатать на экране) и командами (как их печатать). Вместо этого команды представлены специальными управляющими символами.

Очевидными управляющими символами являются такие вещи, как перевод строки ( ESCновая строка), возврат на одну позицию и звуковой сигнал, но более конкретные команды задаются в виде последовательности символов, начиная с символа (код 27 в десятичном виде, 0x1b в шестнадцатеричном или 033 восьмеричного). Это часто представляется как ^[или \033как в вашем примере.

Последовательность ESC [называется CSI, или вводителем управляющей последовательности, и она запускает команду с необязательными числовыми параметрами, заканчивающимися обычно буквой, определяющей основную команду. Большинство общих escape-последовательностей попадают в этот класс.

Списки управляющих кодов можно найти, например, на console_codes(4)странице руководства и на странице Википедии для управляющих кодов ANSI .

Несколько примеров:

ESC [ 4 A             move cursor 4 lines up (4 can be any number)
ESC [ 5 B             move cursor 5 lines down
ESC [ 2 K             erase current line 
ESC [ 30;46 m         set black text (30) on cyan background (46)
ESC [ 0 m             reset color and attributes

Вы можете проверить команды, например, с помощью Bash. Используя -eфлаг, встроенная echoкоманда принимает \033в качестве представления ESCсимвола.

Например, это напечатает приветствие в цвете в середине экрана, а другое обычно в исходной позиции курсора:

echo -e '\033[s\033[12;30f\033[30;46m  Hello!  \033[0m\033[uhello'

Упомянутая ESC ]вами последовательность - это OSC или команда операционной системы, которая в основном используется в команде для установки заголовка окна xtermи других, например:

echo -e '\033]0;new window title\a'

Кроме того, есть также ESC ( A(и другие буквы), которые устанавливают наборы национальных символов на некоторых терминалах, что может привести к веселому эффекту .

ilkkachu
источник
8

Клавиша Escape, за которой следует правая квадратная скобка escape], используется для ввода команды операционной системы ( OSC).

Он находится в ECMA-48 , и вы можете прочитать сводку управляющих последовательностей, используемых xterm в управляющих последовательностях XTerm , например, для изменения заголовка окна терминала.

Escape-последовательности могут начинаться с разных символов. C1 (8-бит) управления Символами раздела в XTERM управления последовательностями упоминает несколько из них: CSI(которые вы видите , как escape[, APC, DCS, PM. Причина разного (второй) характер, потому что пара (побег и ]) связана с однобайтовый управляющий символ, используемый для различных типов escape-последовательности.

Если вы прочитаете спецификацию, вы заметите, что CSIона используется для элементов управления с числовыми параметрами, в то время как OSCдопускаются строки. Помимо только синтаксиса, комитет, который создал этот стандарт, имел в виду использование APCи PMотличался от DCSи OSC.

Томас Дики
источник
1

«Экранирующие последовательности», описанные в других ответах, зависят от того, какой тип терминала у вас есть (чаще всего «ANSI» или производные / похожие).

$ echo $TERM  
xterm

Если вы хотите написать сценарии, которые (в некоторой степени) НЕЗАВИСИМЫ от термина, но по-прежнему используют, например, цвет и другие специальные функции, ознакомьтесь с содержанием man terminfo.

например

$ echo -n ".";tput setb 6;tput setf 4;echo -n "test";tput sgr0;echo "."

будет печататься .test.с testжелтоватым фоном и красным цветом переднего плана, и это будет работать для ЛЮБОГО терминала, который фактически способен использовать цвета таким же образом.

Чтобы увидеть, что на самом деле напечатано, направьте это od -t x1zкак

$ tput sgr0 | od -t x1z  
0000000 1b 28 42 1b 5b 6d                                >.(B.[m<  
0000006

... где значения отображаются в шестнадцатеричном формате (из-за "х").

Ханну
источник