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
?
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).
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.