Який тип послідовностей є послідовностями, що починаються з "\ 033]"


19

Я знайшов багато послідовностей втечі у Баша, починаючи з \033], але з чого ці послідовності і з чого вони починаються \033]?

Відповіді:


25

Рядок є насправді, \033[і це ще не все.

Після цього відкриваючої кронштейни приходить серія цифр та символів. Цей рядок відомий як послідовність відхилення та використовується для керування курсором та кольором тексту, серед іншого.

недрукарські вхідні послідовності повинні бути укладені \[\033[ and \]

Якщо послідовність відстеження керує кольором тексту, то за ним буде додаватися знак 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   

Отже, якщо ви хочете, щоб запит консолі був синім, ви використовуєте наступну послідовність евакуації (у назві файлу, яку я забуваю):

\[\033[34m\]

(Зауважте m)

Однак ця послідовність втечі не лише керує кольором. Він також може керувати переміщенням курсору. Ось таблиця / список із кодами руху та способом їх роботи:

  • Розташуйте курсор:

    \033[<L>;<C>H

    Або

    \033[<L>;<C>f

    ставить курсор у рядок L та стовпці С.

  • Перемістіть курсор вгору на 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використовуйте ці дві послідовності.

І приклад, використовуючи одну з цих послідовностей евакуації: скажіть, що я хочу розташувати свій курсор у рядку 3, стовпці (символі) 9. Для цього я б використав

\[033\[3;9H]

(Я припускаю, що стовпець 0 - це перша позиція, тож це буде восьмий символ).

Джерело: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (також читати 6.2)

Більш загальне читання: http://ascii-table.com/ansi-escape-sequences.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 - Виберіть графічне видання .
дельтаб

Фраза "символ m" в кінці кожного з наступних речень використовується як символ зупинки " в публікації cplusplus.com також є дещо заплутаною, оскільки таблиця трохи нижче містить команди, які, очевидно, не закінчуються "м". Насправді це здається ще більш оманливим, коли його подають прямо вгорі.
ilkkachu

1
Технічно провідна 0;в кольоровій послідовності непотрібна. Це просто робить колір фону за замовчуванням перед встановленням переднього плану. Ви також можете встановити фон за допомогою 4x.
Позов по

17

Вони керують командами для терміналу.

Спочатку термінали були досить тупими пристроями, підключеними до послідовного порту, а не тим фантазійним програмним забезпеченням із графічним інтерфейсом з декількома вкладками з меню, яке ми маємо зараз. Оскільки вони отримали лише потік символів (байти), чіткого поділу між даними (що надрукувати на екрані) та командами (як надрукувати їх) не було. Натомість команди представлені спеціальними символами управління.

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

Послідовність ESC [називається CSI, або введення послідовності управління, і вона запускає команду з необов'язковими числовими параметрами, закінчуючи зазвичай буквою, яка визначає головну команду. Більшість поширених послідовностей втечі належать до цього класу.

Списки кодів евакуації можна знайти, наприклад 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(та інші літери), які встановлюють національні набори символів на деяких терміналах, щоб мати потенційний ефект .


8

Escape з правою квадратною дужкою escape]використовується для введення команди операційної системи ( OSC).

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

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

Якщо ви прочитаєте специфікацію, ви помітите, що CSIвикористовується для елементів керування з числовими параметрами, в той час як OSCдозволяє рядки. Окрім синтаксису, комітет, який створив цей стандарт, мав на увазі використання APCта PMякий відрізнявся від DCSта OSC.


7

Вони називаються кодами аварійних відхилень ANSI , і вони перераховані на довідковій сторінці для console_codes . Вони не характерні для Bash, а працюють у будь-якій консольній програмі до тих пір, поки термінал їх підтримує (це робить більшість емуляторів терміналів).


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

... де значення відображаються у шістнадцятковому розмірі (через "х").

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.