Quels types de séquences sont des séquences d'échappement commençant par «\ 033]»


19

J'ai trouvé de nombreuses séquences d'échappement dans Bash commençant par \033], mais quelles sont ces séquences et pourquoi commencent-elles \033]?

Réponses:


25

La chaîne est en fait \033[et ce n'est pas tout.

Après cette parenthèse ouvrante vient une série de chiffres et de symboles. Cette chaîne est connue sous le nom de séquence d'échappement et sert, entre autres, à contrôler le curseur et la couleur du texte de la console.

les séquences d'échappement non imprimables doivent être \[\033[ and \]

Si la séquence d'échappement contrôle la couleur du texte, elle sera suivie d'un m.

Voici un tableau pour les séquences de couleurs:

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   

Donc, si vous voulez que l'invite de votre console soit bleue, vous utiliserez la séquence d'échappement suivante (dans le nom de fichier que j'oublie):

\[\033[34m\]

(Remarquez le m)

Cependant, cette séquence d'échappement ne contrôle pas seulement la couleur. Il peut également contrôler le mouvement du curseur. Voici un tableau / liste avec les codes de mouvement et comment ils fonctionnent:

  • Positionnez le curseur:

    \033[<L>;<C>H

    Ou

    \033[<L>;<C>f

    place le curseur sur la ligne L et la colonne C.

  • Déplacez le curseur vers le haut de N lignes:

    \033[<N>A
  • Déplacez le curseur vers le bas sur N lignes:

    \033[<N>B
  • Déplacez le curseur vers l'avant N colonnes:

    \033[<N>C
  • Déplacer le curseur vers l'arrière N colonnes:

    \033[<N>D
  • Videz l'écran, passez à (0,0):

    \033[2J
  • Effacer jusqu'à la fin de la ligne:

    \033[K
  • Enregistrer la position du curseur:

    \033[s
  • Restaurer la position du curseur:

    \033[u

Sachez simplement que les deux derniers peuvent ne pas fonctionner dans l'émulateur de terminal que vous utilisez. Apparemment, seulement xtermet nxtermutilisez ces deux séquences.

Et exemple en utilisant une de ces séquences d'échappement: disons que je veux positionner mon curseur à la ligne 3, colonne (caractère) 9. Pour cela, j'utiliserais

\[033\[3;9H]

(Je suppose que la colonne 0 est la première position, ce serait donc le 8ème caractère).

Source: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (lire également 6.2)

Lecture plus générale: http://ascii-table.com/ansi-escape-sequences.php

Wikipédia: https://en.wikipedia.org/wiki/ANSI_escape_code


2
envisager également de créer un
cat

2
Notez que '\ 033' est le caractère ESCAPE en octal, il peut donc être donné en décimal (27) ou hex (0x1B). Il existe d'autres façons courantes d'écrire ESCAPE, par exemple '^ [' dans les scripts shell, "\ e" dans bindkey, etc.
jamesqf

1
Veuillez noter qu'un certain nombre d'entrées dans ce tableau sont trompeuses ou inexactes: gras, faible, soulignement, etc. peuvent être définis et réinitialisés indépendamment de la couleur, et sont également réinitialisés par 0 avec les couleurs; il y a tout un ensemble de codes (40–49) pour l'arrière-plan, et 7 remplace à la place l'avant-plan et l'arrière-plan; ESC [2Kefface toute la ligne avant et après le curseur. Une bien meilleure source serait l'article de Wikipedia, ou vous pouvez aller directement à ECMA-48 , section 8.3.117 SGR - Select Graphic Rendition .
deltab

L'expression "le caractère" m "à la fin de chacune des phrases suivantes est utilisée comme caractère d'arrêt" sur le post cplusplus.com est également un peu déroutante, car le tableau ci-dessous contient des commandes qui ne sont évidemment pas terminées par un "m". En fait, cela semble encore plus trompeur ici lorsqu'il est présenté tout en haut.
ilkkachu

1
Techniquement, le leader 0;dans les séquences de couleurs n'est pas nécessaire. Cela fait juste la couleur d'arrière-plan par défaut avant de définir le premier plan. Vous pouvez également définir l'arrière-plan avec 4x.
Fund Monica's Lawsuit

17

Ce sont des commandes de contrôle pour le terminal.

Les terminaux étaient à l'origine des appareils plutôt stupides connectés à un port série, et non ces logiciels GUI multi-onglets sophistiqués avec des menus que nous avons maintenant. Puisqu'ils ne recevaient qu'un flux de caractères (octets), il n'y avait pas de séparation claire entre les données (ce qu'il fallait imprimer à l'écran) et les commandes (comment l'imprimer). Au lieu de cela, les commandes sont représentées par des caractères de contrôle spéciaux.

Les caractères de contrôle évidents sont des trucs comme le saut de ligne (nouvelle ligne), le retour arrière et le bip de cloche, mais des commandes plus spécifiques sont données sous forme de séquences de caractères, en commençant par le ESCcaractère (code 27 en décimal, 0x1b en hexadécimal ou 033 octal). Il est souvent représenté par ^[ou \033comme dans votre exemple.

La séquence ESC [est appelée CSI, ou introducteur de séquence de contrôle, et elle démarre une commande avec des paramètres numériques facultatifs, se terminant généralement par une lettre qui définit la commande principale. La plupart des séquences d'échappement courantes entrent dans cette classe.

Des listes des codes d'échappement peuvent être trouvées, par exemple dans la console_codes(4)page de manuel, et sur la page Wikipedia pour les codes d'échappement ANSI .

Quelques exemples:

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

Vous pouvez tester les commandes avec par exemple Bash. En utilisant le -edrapeau, la echocommande intégrée accepte \033comme représentation du ESCpersonnage.

Par exemple, cela imprimera un message d'accueil en couleur au milieu de l'écran et un autre normalement à la position d'origine du curseur:

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

La séquence ESC ]que vous avez mentionnée est la commande OSC ou Operating System, qui est principalement utilisée dans la commande pour définir le titre de la fenêtre dans xtermet d'autres, par exemple:

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

Ensuite, il y a aussi ESC ( A(et d'autres lettres) qui définissent des jeux de caractères nationaux sur certains terminaux, avec un effet potentiellement hilarant .


8

Échap suivi d'un crochet droit escape]est utilisé pour introduire une commande de système d'exploitation ( OSC).

C'est dans ECMA-48 , et vous pouvez lire un résumé des séquences de contrôle utilisées par xterm dans XTerm Control Sequences , par exemple, pour changer le titre de la fenêtre du terminal.

Les séquences d'échappement peuvent commencer avec différents personnages. Le C1 (8 bits) caractères de contrôle section dans XTerm séquences de contrôle mentionne quelques - unes de celles -ci : CSI(que vous voyez comme escape[, APC, DCS, PM. La raison du caractère différent (seconde) est parce que la paire (évasion et ]) est associée à une caractère de contrôle à un octet utilisé pour différents types de séquence d'échappement.

Si vous lisez la spécification, vous remarquerez qu'elle CSIest utilisée pour les contrôles avec des paramètres numériques, tandis que OSCpermet les chaînes. Au-delà de la syntaxe, le comité qui a créé cette norme avait à l'esprit des utilisations pour APCet PMqui différaient de DCSet OSC.



1

Les "séquences d'échappement" décrites dans les autres réponses dépendent du TYPE de terminal que vous avez (le plus souvent "ANSI" ou des dérivés / similaires).

$ echo $TERM  
xterm

Si vous souhaitez écrire des scripts qui sont (quelque peu) INDÉPENDANTS du terminal, mais qui utilisent toujours par exemple la couleur et d'autres fonctionnalités spéciales, jetez un œil au contenu de man terminfo.

par exemple

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

imprimera .test.avec testun fond jaunâtre et une couleur de premier plan rouge, et cela fonctionnera pour TOUT terminal qui est réellement capable d'utiliser les couleurs de la même manière.

Pour voir ce qui est réellement imprimé, canalisez-le od -t x1zcomme dans

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

... où les valeurs sont affichées en hexadécimal (en raison de "x").

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.