Et ne dites pas " $TERM
" - c'est toujours xterm
.
Comment un bash
script peut-il dire dans quel terminal il s'exécute, en particulier s'il s'agit d'iTerm, Terminal.app ou en fait d'un xterm?
Je demande parce reset
que ne fonctionne pas¹ sur la base de Terminal.app et iTerm2. iTerm2, cependant, reconnaît une séquence d'échappement pour effectuer une réinitialisation du terminal ( \x1b]50;ClearScrollback\x07
), et si je pouvais la détecter, je pourrais remplacer reset
avec un alias qui fait la bonne chose. AFAICT, Terminal.app n'a pas de séquence de réinitialisation, et les gens ont recours à un piratage ridicule pour pirater cela .
Mon objectif final ici est d'avoir reset
le même travail que je travaille sur OS X ou Linux, en travaillant localement ou à distance via SSH. (Je ne veux pas avoir à essayer de me rappeler lequel, et il est utile de le faire reset && command-that-outputs-a-bunch
et d'avoir un travail de mise à jour.) Terminal.app et iTerm jettent une clé dans ce plan en ne l'implémentant pas reset
correctement.
Cela signifie que simplement remplacer reset
n'est pas tout à fait ça: si je suis sur une machine Linux, il doit savoir si j'utilise gnome-terminal
ou iTerm afin d'envoyer la bonne séquence d'échappement.
Existe-t-il un moyen (même si j'en ai besoin ioctl
) de demander au terminal ce que c'est vraiment ?
¹Pour les besoins de cette question, la réinitialisation doit effacer l'écran, réinitialiser le curseur et effacer le tampon de défilement.
reset
, car c'est ce que mes doigts savent.
reset
commande efface le contenu de défilement arrière de l'émulateur de terminal, mais ce n'est pas garanti, car le défilement arrière est une fonctionnalité spécifique à l'émulateur de terminal, pas vraiment une partie d'un terminal. Cependant, Terminal prend en charge une extension de la séquence d'échappement ED (Erase in Display) pour effacer le défilement arrière ESC [ 3 J
. Vous pouvez effacer l'écran, puis l'utiliser, par exemple,reset && printf '\e[3J’
xterm
(à travers TERM=xterm
), je m'attends à ce que vous émuliez un surensemble de l'XTerm, qui efface son défilement lors de la réinitialisation. (Tout comme si vous aviez envoyé la séquence d'échappement pour "bleu", vous vous attendriez à bleu.) Certes, mon xterm me le dit Erase is backspace.
, ce que je ne suis reconnaissant de rien d'autre; c'est juste ennuyeux.
Terminal.app
les paramètres, l'onglet du terminal et définissez les lignes de défilement sur 0? Est-ce que cela désactive tout ou partie du texte au-dessus de la ligne actuelle, ou tout simplement au-dessus du haut de l'écran? Je sais, ce n'est pas exactement ce que tu as demandé, ça vaut le coup.