Affichage du nom de la session d'écran GNU et du titre de la fenêtre dans l'invite du shell

11

Existe-t-il un moyen de présenter le nom de la session GNU Screen et le titre de la fenêtre dans l'invite du shell (disons, l'invite Bash définie par PS1)?

brandizzi
la source

Réponses:

14

L'écran fournit certaines variables d'environnement (à partir de la screenpage de manuel (1)):

STY              Alternate socket name.
WINDOW           Window number of a window (at creation time).

Le "au moment de la création" signifie que si vous renumérotez une fenêtre (en utilisant la numbercommande de l'écran ), le shell ne sera pas informé de la modification et $ WINDOW sera toujours le même que le premier numéro de fenêtre.

Vous pouvez utiliser quelque chose comme:

PS1='\u@\h(${STY}:${WINDOW}):\w$ '
Arcege
la source
1
Parfait! C'est ce que je cherchais. BTW, il existe un moyen d'obtenir le titre de la fenêtre, au lieu du numéro de fenêtre?
brandizzi
Pas que je sache, il n'y a pas d'api pour l'écran, et lorsque vous émettez des commandes il n'y a pas de sortie - il va à la fenêtre actuelle de l'écran. Par exemple screen -xr 2466 -X windows.
Arcege
Bien qu'il relève probablement du cas de renumérotation, existe-t-il un moyen d'accéder au nom de la fenêtre si elle est définie avec Ctrl-a A?
Thalis K.
1
Si GNU screena été compilé avec l' -Qoption (requête), vous pouvez exécuter certaines commandes, telles que titleet windowset afficher les données sur stdout, cependant, sans retour à la ligne.
Arcege
3

J'utilise toujours des noms de session d'écran précis. Ensuite, je peux ajouter la var STY env de l'écran, avec l'ID numérique supprimé (merci dimo414), à PS1. Je ne le décore pas avec des accolades ou quoi que ce soit parce que je ne suis pas toujours en session. Exemple simple:

PS1='\u@\h ${STY#[0-9]*.} \w$ '
humeur
la source
1

J'utilise ceci:

(`echo ${STY} | sed -e 's/[0-9]*\.//g'`:${WINDOW}:`screen -Q title`)

supprime le numéro de processus ${STY}
inclus le numéro de fenêtre (comme mentionné "au moment de la création")
inclut le titre de la fenêtre (tel que renvoyé par screen -Q title)

Remarques:

  • première fois qu'il fonctionne, screen -Q attend une touche de retour
  • j'ai défini le titre de la fenêtre avec Ca CA et puis source mon .profile pour mettre à jour l'invite
gotjosh
la source
5
L'utilisation ${STY#[0-9]*.}évite d'avoir à passer à travers sed.
dimo414