web-dev-qa-db-fra.com

Effacer l'écran en imprimant un caractère?

J'utilise Chez-Scheme et je ne trouve pas de moyen d'effacer complètement l'écran. (Si quelqu'un connaît une meilleure méthode que l'impression, cela m'intéresserait aussi mais ce n'est pas ma question ici)

D'après ce que je peux trouver, effacer l'écran en ^ L (control-L) ou en donnant la commande clear (en bash au moins) équivaut à sortir ASCII caractère 12: Form feed. Cependant, l'impression ne fait rien. Si j'utilise (display (integer->char 12)), Il imprime simplement un newline. Une autre façon d'encoder ce caractère est \f (Analogue à \n Pour newline), mais dans Python print("\f") ainsi que dans le schéma (display "\f") Est juste un newline.

Ma compréhension de la signification de ASCII 12 est-elle juste fausse, ou les implémentations manquent-elles?

Existe-t-il un moyen d'effacer l'écran qui devrait fonctionner dans toutes les langues, comme \n Pour un newline?

12
Lara

Si vous voulez effacer l'écran, la séquence "ANSI" dans un printf

\033[2J

efface tout l'écran, par exemple,

printf '\033[2J'

Le programme en ligne de commande clear utilise ceci, avec le déplacement du curseur à la position "home", encore une séquence "ANSI":

\033[H

Le programme obtient les informations de la base de données du terminal. Par exemple, pour TERM=vt100 , il pourrait voir ceci (en utilisant \E comme \033):

clear=\E[H\E[J$<50>

(les $<50> indique padding nécessaire pour les vrais VT100). Vous remarquerez peut-être que le 2 est absent de cette chaîne. C'est parce que le curseur est d'abord déplacé vers la position d'origine (en haut à gauche), et le 2 (écran entier) n'est pas nécessaire. L'élimination de la chaîne a rendu les VT100 plus rapides peu.

Par contre, si vous voulez juste reset le terminal, vous pouvez utiliser le VT100 -style RIS :

\033c

mais cela a des effets secondaires, en plus de ne pas être dans ECMA-48. Ces rapports de bogues concernaient effets secondaires sur \033c:

Lectures complémentaires:

 CSI Ps J Erase in Display (ED). 
 Ps = 0 -> Erase Below (par défaut). 
 Ps = 1 -> Erase Above. 
 Ps = 2 -> Effacer tout. 
 Ps = 3 -> Effacer les lignes enregistrées (xterm). 
30
Thomas Dickey

Vous pouvez imprimer \033c qui réinitialise le terminal:

petite -q <<< '(display "\033c")'

\033 est d'échappement et c est littéral c.

Je ne peux vous donner aucune information sur la façon dont cela est pris en charge.

5
andlrc