Come posso aggiornare automaticamente il titolo in una schermata di esecuzione xterm?


14

Questo è un piccolo seguito a questa domanda . Sto lavorando in tcsh all'interno dello schermo GNU in un xterm .

Ho il seguente nel mio .cshrc:

alias res_t 'xtset -t %h:%d "(%u:%g)" %e'       # reset titlebar
res_t                                           # reset title right now
alias precmd res_t

E questo funziona benissimo!

Tuttavia, quando eseguo schermo vedo che il titolo non viene aggiornato con la directory corrente. Come posso aggiornare lo schermo del titolo xterm?


Hai già trovato una soluzione che ha funzionato per te?
Trey Hunner,

No. Ho provato le risposte suggerite ma non hanno funzionato. Ecco perché non li ho né accettati né votati.
Nathan Fellman,

Risposte:


4

Puoi impostare il titolo della finestra xterm aggiungendolo al tuo .tcshrco .cshrc(sostituisci il tuo attuale precmdalias):

alias precmd 'echo -n "\033]0;${PWD}\a"'

Assicurati che questo sia l'unico alias precoce nel tuo .cshrce nei .tcshrcfile quando lo usi. Questo metodo visualizza la directory corrente come titolo della finestra per me sia in xterm a gnome-terminal indipendentemente dal fatto che sia aperta una sessione GNU.

La mia risposta era basata su questo .


3

Capisco che stai usando tcsh quindi questo probabilmente non funzionerà ... Nel caso in cui qualcuno stia cercando il modo bash per farlo.

Se i tuoi sistemi (locale / remoto) eseguono bash, puoi utilizzare la variabile d'ambiente "PROMPT_COMMAND" per impostare il titolo della finestra. PROMPT_COMMAND viene valutato prima che venga visualizzato un prompt.

(nel tuo .bashrc):

export PROMPT_COMMAND='history -a && echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007'

Spiegazione:

'history -a'

Questo imposta la shell da aggiungere al file della cronologia ogni volta che un comando viene completato, anziché quando l'intera shell viene completata. (Questo non è correlato a questo esempio).

'echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

Questo fa eco al codice di escape "\ 033] 0;" che imposta il titolo della finestra con le variabili "user" @ "host" (rimuovendo la corrispondenza più lunga da destra a prima ".") e quindi la directory di lavoro (sostituendo '~' con '$ HOME').

Il trucco di cui sopra funzionerà con qualsiasi applicazione terminale che supporti la modifica dinamica del titolo della finestra (che iTerm, Terminal.app, urxvt, aterm, eTerm. Xterm ecc.). Puoi anche guardare nella variabile shell "TITLEBAR" nella documentazione di bash, è simile.


1
questo non funzionerà all'interno di gnuscreen. almeno non funziona per me. ecco perché sono qui :)
gcb


2

Questo dovrebbe funzionare in qualsiasi shell, ma è un hack sporco .screenrc. Prende il posto della linea del tuo hardstatus per funzionare, il che potrebbe essere inaccettabile per alcuni utenti. Ma funziona in gnome-terminal sull'ultimo Ubuntu, anche senza la riga termcapinfo di seguito. Alcune situazioni potrebbero richiedere modifiche più profonde (ad esempio, non ho ancora testato su PuTTY).

# enable xterm title setting; may not be necessary on some platforms
termcapinfo xterm*|rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

# dirty hack: put xterm title escapes in the hardstatus
# this example will yield "user@host || screen Win#:(windowtitle)
defhstatus "$USER@^EH || screen ^E:(^Et)"
# now turn it off so it doesn't print in the hardstatus line
hardstatus off

# and finally, use caption as a replacement hardstatus
caption always '%{= kG}[%{G}%H%{G}][%= %{= kw}%?%-Lw%?%{R}(%{W}%n*%f%t%?(%u)%?%{R})%{w}%?%+Lw%?%?%= %{G}][%{B}%C%a %M.%d%{G}]'

Trovato a questo link .


2
setenv TITLE "%{\033]0;%n@%m:%~\007%}"
set prompt = "${TITLE}%n@%m:%~%#"

1
Ma questo aggiornerà il titolo durante l'esecuzionescreen
Nathan Fellman,

1
Funziona bene con lo schermo 4.00.02 + tcsh 6.12.00. Ciò presuppone che la hardstatusvariabile dello schermo sia impostata in modo appropriato e che supporti termcap / terminfo hs|ts|fs|ds.
Darren Hall,

cosa suona qui hardstatus?
gcb,

2

Questa pagina (che è stata collegata sopra) è la soluzione, tuttavia è necessario assicurarsi che la stringa del terminale della voce sia allineata con la stringa ID del terminale (ovvero, a cosa è impostata la variabile TERM) altrimenti non avrà alcun effetto.

Ecco un riassunto di quello che ho fatto, che ha funzionato per me dopo anni di non aver investito abbastanza tempo per capirlo:

  1. Scopri qual è la stringa ID del tuo terminale eseguendo:

    echo $TERM
    

    Probabilmente dirà qualcosa come 'xterm' o 'linux' o 'rxvt'.

  2. Ora aggiungi la seguente riga al tuo file .screenrc (o creane uno se non esiste) situato nel tuo homedir (~ / .screenrc):

    termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
    

    La chiave è assicurarsi che 'xterm' sia la stringa ID del tuo TERM che hai sopra. Puoi fare più righe per ogni diverso tipo di termine che usi.

Ad esempio, ho questo come mio file .screenrc perché uso sia xterms che il tipo di termine 'linux' quando SShing in una scatola:

termcapinfo linux 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

Speriamo che questo aiuti, ed è totalmente indipendente dalla shell. Ricorda che se esegui screen come root dovresti modificare ~ root / .screenrc oltre al tuo file ~ / .screenrc in questo modo.


1

Le istruzioni qui mi hanno permesso di aggiornare il titolo in rxvt da bash per me - il che probabilmente non è di alcun aiuto, ma ho pensato che valesse la pena indagare (sezione Barra di stato informativa se il collegamento non passa alla parte destra della pagina)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.