Le titre de l'onglet est incorrect avec ssh / screen sous osx

1

je fais

ssh -t host screen -D -RR

sous OS X (10.9) onglets de terminal.

Mon ~/.screenrcest identique sur tous les hôtes distants et contient la ligne suivante:

hardstatus string "%H(%n:%t)$USER %h"

Mon ~/.bashrcest également identique sur tous les hôtes.

Lorsque je me connecte à host host_u( Ubuntu 12.04.3 LTS) en cours d'exécution Screen version 4.00.03jw4 (FAU) 2-May-06, le titre de l'onglet sur le terminal OS X est host_u(1:bash)sds ~comme prévu.

Lorsque je me connecte à host host_c( CentOS release 6.3 (Final)) en cours d'exécution Screen version 4.00.03 (FAU) 23-Oct-06, le titre de l'onglet sur le terminal OS X est ~/FooBar(qui est le répertoire local OS X à partir duquel j'ai exécuté la ssh/screencommande.

Problème : la hardstatusligne ne fonctionne pas host_c.

Informations complémentaires :

.screenrc:

termcapinfo xterm* ti@:te@

host_cEt à la fois host_u, TERMest xterm-256color(hérité du terminal OS X).

sds
la source
J'ai abandonné screenil y a quelques mois et j'ai juste mordu la balle et je suis passé à tmux. Aucune promesse ne résoudra ce problème, mais un logiciel maintenu activement surpasse presque toujours un logiciel vieux de 7 ans.
Darth Android
À première vue, la base de données termcap / terminfo sur la machine hôte_c n'a pas le contenu correct. À quoi est défini $ TERM? Est-ce que tput ts && echo -n OMG && tput fsle titre est correctement défini? Votre .screenrccontient-il des lignes termcap/ terminfo/ termcapinfo?
Gabe
@Gabe: tput ts->tput: unknown terminfo capability 'ts'
sds
OK, c'est un peu bizarre. Si vous vous connectez à host_c et pouvez définir le titre avec: ' echo -e "\033];TITLE GOES HERE\007"', essayez d’ajouter cette ligne à votre screenrc: " termcapinfo xterm* 'hs:ts=\E]2;:fs=\007'". Je suppose que cela ou quelque chose de similaire est présent dans /etc/screenrc( /usr/local/etc/screenrcou quoi que ce soit) sur host_u.
Gabe
@ Gabe: oui, presque. ajoutant termcapinfo xterm* 'hs:ts=\E]0;:fs=\007:ds=\E]0;\007'à host_c:~/.screenrcrésolu le problème. S'il vous plaît transformer vos commentaires en une réponse et je l'accepterai. Merci!
Sds

Réponses:

1

Pour définir l'état fixe, l'écran doit connaître les codes d'échappement corrects à envoyer au terminal (émulateur). ils sont trouvés via termcap / terminfo. Les capacités pertinentes sont:

  • hs - Si défini, le terminal supporte une ligne hardstatus
  • ts - déplace le curseur sur la ligne hardstatus ("begin")
  • fs - ramène le curseur là où il se trouvait auparavant ("terminer")
  • ds - comment effacer / réinitialiser le hardstatus ("default").

Personne n’a plus de véritable ligne "hardstatus". Pour utiliser le titre d'un xterm ou d'autres émulateurs d'interface graphique, les capacités doivent être définies. pour éviter toute confusion, les programmes ne sont pas définis dans les bases de données termcap / terminfo normales. Vous pouvez les ajouter ici, ou vous pouvez indiquer à l’écran ce qu’ils seraient si ils étaient configurés, dans votre .screenrc:

termcapinfo xterm* 'hs:ts=\E]0;:fs=\007:ds=\E]0;screen\007'
(Ceci définit un titre par défaut « écran », ce qui est peu susceptible d'être pertinente Les codes d'échappement réels peuvent différer en fonction de votre émulateur de terminal -. En particulier pour certaines xterm variantes du 0dans \E]0;ne peut pas être nécessaire, ou peut - être besoin d'être valeur différente; consultez la page de manuel de votre émulateur de terminal.)

Ces paramètres seront utilisés par écran, mais ne seront disponibles pour aucune autre application. Par exemple, si vous aviez un éditeur qui voulait remplacer le statut fixe, il rechercherait le termcap réel, trouverait hsnon défini (ou quelle que soit la valeur par défaut du système) et ne le ferait pas.

Gabe
la source