[LINUX] "CSI" que je souhaite enseigner aux débutants en production d'applications pour console interactive

introduction

Je ne suis pas une application console avancée ** Il m'est arrivé de connaître CSI pendant que je faisais diverses choses, alors je l'ai écrit.

Qu'est-ce que CSI

Un type de ** séquence d'échappement **. La première chose qui vous vient à l'esprit lorsque vous entendez le mot «échapper» est «\ n». \ n est un échappement très simple qui signifie un saut de ligne dans le système Unix, mais cette fois nous utiliserons une expression spéciale un peu plus compliquée.

À propos, CSI est un acronyme pour * Control Sequence Introducer *.

Que puis-je faire

Typiques --Déplacez le curseur --Effacer l'écran (Effacer tout avant le curseur et tout supprimer après le curseur)

** here ** a tous les types et méthodes de contrôle.

À propos du fonctionnement

~~ ** Bash ne semble pas s'échapper facilement ** (Reference). ~~ [Ajout: informations de commentaire] Il semble que vous puissiez vous échapper avec Bash. Si vous ajoutez l'option -e, telle que ʻecho -e`, l'échappement sera appliqué. En outre, le lien ci-dessus était une autre discussion. Nous corrigerons.

Essayez d'utiliser CSI

Maintenant, dans l'exemple précédent, nous avons montré \ n pour couper une ligne. Puisque CSI peut contrôler plusieurs choses, le code de contrôle n'en est pas un, mais il existe un préfixe pour reconnaître qu'il s'agit de CSI. C'est ** \ e [ ** ou ** \ 033 [ ** ou ** \ 0x1b [ **.

[Une addition] Je pensais que bash ne pouvait pas s'échapper, juste \ e [ ne le soutenait pas. C'est possible avec \ 033 [.

Puisque e est un type de caractère, 033 est un nombre octal et 0x1b est un nombre hexadécimal, c'est essentiellement le même, mais e est plus facile. CSI est une sorte de séquence d'échappement [^ 1] au sens strict. L'insertion de \ e au début vous indique le début de la séquence d'échappement, et [ vous indique qu'il s'agit de CSI.

Le contrôle de CSI change en fonction de ce que vous écrivez après cela.

Liste de contrôle CSI (partie)

Caractère de contrôle (aucun espace requis) mouvement
n A n lignes(1 ligne si non spécifié)Relevez le curseur
n B n lignes(1 ligne si non spécifié)Abaissez le curseur
n C n caractères(1 caractère sauf indication contraire)Avancez le curseur
n D n caractères(1 caractère sauf indication contraire)Déplacer le curseur en arrière
n E Déplacez le curseur sur n lignes(1 ligne si non spécifié)Alignez-vous sur le début ci-dessous
n F Déplacez le curseur sur n lignes(1 ligne si non spécifié)Ajuster au début du haut
n G Placez le curseur sur le nième caractère de la ligne courante(1er caractère si non spécifié)Correspondre
n; m H Placez le curseur sur la nième ligne, caractère m(1 caractère par ligne sauf indication contraire:en haut à gauche)Correspondre
n J Effacer l'écran (les détails seront décrits plus tard)
n K Supprimer la ligne (les détails seront décrits plus tard)
n S n lignes (1 ligne si non spécifié) Faites défiler l'écran pour continuer
n T n lignes (1 ligne si non spécifié) Faire défiler l'écran en arrière
n L Insérer n lignes (1 ligne si non spécifié) avant la ligne où se trouve le curseur
n M Supprimer n lignes (1 ligne si non spécifié) de la ligne où se trouve le curseur
n P Supprimer n caractères (1 caractère si non spécifié) de la position du curseur
n P Remplacez n caractères (1 caractère si non spécifié) par des espaces à partir de la position du curseur
n ` Déplacer le curseur sur le nième caractère de la ligne courante (1er caractère si non spécifié)
n a Avance le curseur de n caractères (1 caractère si non spécifié)
n d Élever le curseur de n lignes à la position actuelle (1 ligne si non spécifié)
n m SGR(Select Graphic Rendition)Spécifiez les paramètres (les détails seront décrits plus tard)
s Se souvenir de la position actuelle du curseur
u Appeler la position mémorisée du curseur
> 3; a; b; c; d J (b, a)De(d, c)Effacer le rectangle jusqu'à
> 3; a; b; K Effacer les caractères a à b sur la ligne courante

Comportement de l'effacement d'écran (* CSI * * n * J) et de l'effacement de ligne (* CSI * * n * K)

n comportement
Non spécifié Effacer derrière le curseur jusqu'au début de l'écran (ligne)
0 Effacer derrière le curseur jusqu'au début de l'écran (ligne)
1 Effacer avant le curseur jusqu'à la fin de l'écran (ligne)
2 Effacer tout l'écran (ligne)

Paramètres SGR (typiques)

n sens
Aucun Réinitialisation des paramètres
0 Réinitialisation des paramètres
1 Audacieux
2 Impression légère (pas largement prise en charge)
3 Oblique (pas largement pris en charge, inversé)(n=7)Peut également être)
4 Souligner
5 Clignotant: 150 fois/Dans quelques minutes
6 Clignotement rapide: 150 fois/Plus d'une minute (pas largement pris en charge)
7 Affichage inversé: les couleurs de premier plan et d'arrière-plan sont permutées
8 Masquer les caractères (pas largement pris en charge)
9 Ligne d'annulation (pas largement prise en charge)
10 Police par défaut
11–19 (n-10)Utilisez la deuxième police alternative
20 Police de fracture(Principalementnonprisencharge)
21 Gras désactivé (pas largement pris en charge),Soulignement double (presque non pris en charge)
22 Restaurer la couleur et l'accentuation (gras / clair)
23 Restaurer l'inclinaison et la fracture
24 Annuler le soulignement
25 Annuler le clignotement
28 Afficher le texte
29 Effacer le barré
30–37 Couleur de premier plan (essentiellement la couleur du texte)(n-30)Changer en numéro (le numéro de couleur sera décrit plus tard)
38 Expansion des paramètres de couleur de premier plan.\e[38;5;nVous pouvez spécifier l'index de couleur avec(0...255)。\e[38;2;r;g;bRVB peut être réglé avec(0 chacun...255)。
39 Réinitialiser la couleur de premier plan
40–47 Couleur de l'arrière plan(n-40)Changer en numéro (le numéro de couleur sera décrit plus tard)
48 Expansion de la mise en scène de l'arrière-plan.\e[48;5;nVous pouvez spécifier l'index de couleur avec(0...255)。\e[48;2;r;g;bRVB peut être réglé avec(0 chacun...255)。
49 Réinitialiser la couleur d'arrière-plan

Quelle est cette tempête non prise en charge ...

Numéro de couleur

nombre Couleur
0 noir
1 rouge
2 vert
3 Jaune
4 Bleu
5 Magenta
6 cyan
7 blanc

Cela ressemble à ceci lorsque vous affichez approximativement chaque couleur. スクリーンショット 2016-08-05 10.39.55.png

Comment utiliser SGR

Lors du réglage du SGR

echo "\e[31mred\e[m"

Si vous le faites, il sera affiché en rouge en rouge.

Aussi,

echo "\e[31;43mred&yellow\e[m"

Si vous le faites, il affichera «rouge et jaune» avec un fond jaune de caractère rouge. Vous pouvez définir plusieurs options à la fois en tapant les options séparées par ; de cette manière. ** Assurez-vous de désactiver l'option à la fin avec \ e [m ou \ e [0m" pour éviter un comportement inattendu après la sortie de CSI. ** **

[^ 1]: Strictement parlant, \ n n'est pas une séquence d'échappement. Dans un sens étroit, il fait référence à une chaîne d'octets de contrôle commençant par ʻESC (0x1B) `.

Recommended Posts

"CSI" que je souhaite enseigner aux débutants en production d'applications pour console interactive
Fonctionnement pratique du clavier Linux que je veux apprendre moi-même quand j'étais à l'école
Je veux sortir froidement sur la console
Je veux imprimer dans la notation d'inclusion
Je souhaite utiliser la console IPython Qt
Je veux intégrer Matplotlib dans PySimpleGUI
J'ai créé une application Web en Python qui convertit Markdown en HTML
Je souhaite utiliser Django Debug Toolbar dans les applications Ajax
Je veux corriger Datetime.now dans le test de Django
Je veux créer une fenêtre avec Python
Je souhaite créer une file d'attente prioritaire pouvant être mise à jour avec Python (2.7)
Je souhaite stocker les informations de la base de données dans la liste
Je veux fusionner des dictionnaires imbriqués en Python
Je souhaite créer une application WEB en utilisant les données de League of Legends ①
Je veux afficher la progression en Python!
Je veux écrire en Python! (1) Vérification du format de code
Même les débutants veulent dire "Je comprends parfaitement Python"
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Python que je voudrais recommander aux débutants en programmation
Je veux faire la transition avec un bouton sur le ballon
Je veux utiliser self avec Backpropagation (tf.custom_gradient) (tensorflow)
Je veux écrire en Python! (2) Écrivons un test
Même avec JavaScript, je veux voir Python `range ()`!
Je souhaite développer des applications Android sur Android (débogage)
Je veux échantillonner au hasard un fichier avec Python
Je veux travailler avec un robot en python.
Je veux écrire en Python! (3) Utiliser des simulacres
Je veux dire qu'il y a un prétraitement des données ~
Je veux utiliser le jeu de données R avec python
Je veux faire quelque chose avec Python à la fin
Je veux manipuler des chaînes dans Kotlin comme Python!
Technique de création d'arbre phylogénétique moléculaire super facile que je ne veux enseigner à personne
[Pour les débutants] Je souhaite expliquer le nombre d’apprentissage d’une manière facile à comprendre.
Je souhaite supprimer facilement une colonne contenant NA dans R
Je veux faire quelque chose comme sort uniq en Python
[Django] Je souhaite me connecter automatiquement après une nouvelle inscription
Je veux rendre le type de dictionnaire dans la liste unique
[Introduction à Pytorch] Je souhaite générer des phrases dans des articles de presse
Je veux compter des valeurs uniques dans un tableau ou un tuple
Je veux aligner les nombres valides dans le tableau Numpy
Je veux pouvoir exécuter Python avec VS Code
Je veux ajouter un joli complément à input () en python
Je ne voulais pas écrire la clé AWS dans le programme
[Python] J'ai essayé d'expliquer des mots difficiles à comprendre pour les débutants d'une manière facile à comprendre.
Je veux résoudre SUDOKU
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
Je veux utiliser des rails avec des rails même dans un environnement vagabond
Qiskit: Je veux créer un circuit qui crée des états arbitraires! !!
Développement LINEbot, je souhaite vérifier le fonctionnement dans l'environnement local
[Couches Python / AWS Lambda] Je souhaite réutiliser uniquement le module dans AWS Lambda Layers
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
Je veux créer un fichier pip et le refléter dans le menu fixe
Je veux faire de la deuxième ligne le nom de la colonne dans pandas
Je veux réussir le test G dans un mois Jour 1
Je veux connaître la population de chaque pays du monde.
[Pour les débutants] Je veux obtenir l'index d'un élément qui satisfait une certaine expression conditionnelle