Afficher la légende de l'écran sur la première ligne du terminal

8

Lorsque je démarre un nouveau terminal, l'invite est sur la première ligne. Après avoir travaillé pendant un certain temps (ou exécuté une commande qui produit une sortie), l'invite est sur la dernière ligne. Là , il restera pendant le reste de la session , à moins que je presse Ctrl- l, courir clearou resetou quelque chose de similaire.

Pour obtenir une certaine continuité dans le travail, j'utilise screenavec une astuce pour afficher le nom de la session dans la légende (j'utilise la dernière avec les deux screencommandes .screenrc).

Pour éviter les frais généraux cognitifs en encombrant la zone de travail, j'aimerais que cette légende soit affichée en haut du terminal.

l0b0
la source

Réponses:

3

Vous avez de la chance, l'écran respecte les commandes de sauvegarde et de restauration. Donc, avec bash, cela peut être fait.

Cela donne des instructions sur la façon de déplacer le curseur avec des séquences d'échappement spéciales. Vous pouvez écrire "Bonjour tout le monde!" dans le coin supérieur gauche avec ceci:

echo -e "\033[s\033[2;0HHello World!            \n                        \033[u"

Expliqué: Le personnage \033[senregistre la position actuelle du curseur, ce que nous voulons que la taille des terminaux de l'écran b / c puisse varier considérablement. \033[2;0Déplace ensuite le curseur sur la troisième ligne vers le premier caractère (nous commençons à compter dans le coin supérieur gauche et avec 0). Vient ensuite le texte et une petite illustration de ce qui est possible. Enfin, le code \033[uremet le curseur à l'endroit où il a \033[sété émis.

Cet exemple déplace le curseur sur la deuxième ligne car lors de l'émission de la commande, 2 sauts de ligne sont imprimés, ce qui correspond à la troisième ligne actuelle sera la première ligne.

Vous pouvez l'utiliser avec la légende de session que vous pouvez déjà obtenir par l'explication que vous avez déjà liée.

Bananguin
la source
2
Vous pouvez l'utiliser tputpour le faire de manière indépendante du terminal, sans avoir à coder en dur ces codes d'échappement. Par exemple:echo -n "$(tput sc)$(tput cup 0 0)----Hello, world----$(tput rc)"
Jim Paris
Je suis sûr que chaque shell a un moyen d'émettre ces caractères, mais je ne connais que bash :-) Merci pour l'entrée tput, je n'en savais rien.
Bananguin
@ user1129682: J'ai essayé screen $SHELL -c 'echo -n "$(tput sc)$(tput cup 0 0)${STY}$(tput rc)"'et screen $SHELL -c 'screen -X caption always "$(tput sc)$(tput cup 0 0)${STY}$(tput rc)"'ni l'un ni l'autre n'a fonctionné. Des idées?
l0b0
Cela dépend de ce que vous voulez. Si vous voulez simplement que le titre de la session en cours apparaisse dans votre légende d'écran, vous le feriez screen -X caption always; screen -X caption string "%t". Si vous voulez que le titre actuel soit dans le coin supérieur gauche, vous devrez modifier votre PS1variable d'environnement pour inclure la tputmagie.
Bananguin
@ l0b0: et en relisant ceci, tput cup 0 0 pourrait bien avoir le double problème de retour à la ligne, c'est pourquoi j'ai mis mon texte à la troisième ligne, pas la première. avez-vous essayé tput cup 2 0 ou 0 2 ... encore pas lu sur tput ...
Bananguin