barra di stato di tmux corrotta dopo aver catturato un file binario, come resettare?


94

Ho accidentalmente rovinato il mio terminale tmux dopo aver creato catun file binario. Ora il mio tmuxè incasinato. Staccare e ricollegare non aiuta, né ridisegna (Cb r). L'esecuzione resetridisegna solo il riquadro attivo, non il resto. Correre ssty sanedentro o fuori tmuxnon aiuta neanche.

tmux incasinato

All'interno di ogni riquadro, ho un normale feedback da ciò che scrivo (la chiamata iniziale resetsubito dopo che il terminale è stato incasinato ha risolto questo problema), ma non riesco a riparare la barra di stato.

In gnome-terminal, ogni aggiornamento alla barra di stato porta alla crescita della barra di stato (vedi screenshot sopra). Ad esempio, ciò accade quando eseguo una nuova applicazione, quando cambio i riquadri o quando ridimensiono un riquadro. Forzare un ridisegno (By C-b r, eseguendo reseto tramite il menu gnome-terminal) riduce la barra di stato su una singola riga, ma rimane danneggiata.

In xterm, la barra di stato rimane all'interno di una riga, ma rimane danneggiata come nella foto.

Sto usando tmux 1.5.

  • Come tmuxriparo il mio -terminal?

Questa segnalazione di bug del 2008 sembra descrivere lo stesso problema, ma è stata contrassegnata come risolta. Non so in quale versione sia stato corretto, ma tmux 1.5 dovrebbe includere una correzione dal 2008.


Ho appena avuto questo problema e "clear" ha funzionato per me.
user149818

1
Nel caso in cui qualcuno incontri lo stesso problema, dopo aver fatto tutto quanto sopra, la mia barra di stato di tmux era ancora incasinata. L'impostazione dell'opzione della finestra status-right l'ha riparata.

2
Il suggerimento sopra ha risolto anche per me. Il comando per farlo era: Control+ b+ :e quindi set -g status-right "#H"impostare status-right sul nome host.
Mayank,

Risposte:


85

Prova a rinominare la finestra 4

  • Passa alla finestra 4: Control+b 4
  • Rinomina finestra: Control+ b , Control+ umyNewname

(Questa è una virgola nel mezzo)

Oppure: Control+b :rename-window myNewname


1
Rinominare la finestra funziona come un incantesimo
exhuma

4
Devi cancellare il nome prima di digitare quello nuovo. Il modo più semplice è con ctrl+u, quindi la sequenza completa èctrl+b , ctrl+u newname
z0r

1
Dolce - funziona anche per questo byobu( f8, <newname>)
ali_m

Perché è Control-unecessario? Control-,sta già rinominando giusto? Anche se posso confermare che era necessario nel mio caso, è un carattere di ripristino di qualche tipo?
hbogert,

1
Control-u cancella la linea. se ogni fatfinger la tua password in un terminale e la conosci, puoi cancellare la voce usando control-u, invece di colpire backspace 20 volte
Rqomey

55

Per pulire il casino sono necessarie due sequenze di comandi:

Innanzitutto, eseguilo nella finestra confusa (funziona anche quando sei dentro ssh):

stty sane; printf '\033k%s\033\\\033]2;%s\007' "`basename "$SHELL"`" "`uname -n`"; tput reset; tmux refresh

Quindi eseguilo sul computer che esegue tmux(funziona all'interno e all'esterno di tmux):

Il seguente comando ha effetto su tutte le tmuxistanze, che possono modificare lo stato sinistro di più della finestra corrente. Se non hai bisogno di quella funzione, lasciala perdere.

tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done

Spiegato in dettaglio

Questo è stato assemblato per rispondere a tutti i bit trovati in altre risposte e commenti. Al momento sembra che sia rimasto solo un piccolo bit con il secondo comando. (Vedi nel "bit mancante" di seguito).

Per capire come funziona, per prima cosa uccidiamo la linea di stato di tmuxe il tty. Successivamente lo correggiamo di nuovo, usando un metodo che dovrebbe essere sempre disponibile (diversamente dal comando reset).

Come rendere un tmuxterminale (presuppone UTF-8) inutilizzabile

stty -echo; printf '\016\033k%2000s\\\033\033]2;\355\007' $'\302\217'

Avvertenza: dopo aver eseguito il comando sopra, la shell sembra cieca e sorda e sembra parlare solo di cazzate in un linguaggio alieno sconosciuto. Vedi sotto su come ripararlo.

Ha spiegato:

  • stty -echo uccide la risposta di tipo terminale

  • printf '\016'fa un SO, quindi sei nel set di caratteri alternativo

  • printf '\033]2;%s\007' 'right status text'imposta lo stato giusto, in questo caso $'\355', che espone un bug di presentazione

  • printf '\033k%2000s\033\\' $'\302\217' imposta il nome del titolo della finestra

Questa potrebbe essere la combinazione che puoi vedere sul terminale dopo che un comando interattivo si è schiantato e ricaduto nella shell. (Con /bin/catte non puoi provocare stty -echoIMHO, ma comandi interattivi come di vimsolito impostano questo.)

Ora pulisci questo casino

stty sane; printf '\033k%s\033\\\033]2;%s\007' "$(basename "$SHELL")" "$(uname -n)"; tput reset; tmux refresh

Nota: se usi copia e incolla (probabilmente dovrai tenere premuto Shiftmentre incolli ), probabilmente non puoi vedere il tuo incolla se hai usato il comando sopra per confondere il tuo tty. Quindi, basta premere alla cieca il tasto Invio dopo averlo incollato.

Ha spiegato:

  • stty sane imposta i parametri del terminale "sano", in modo da recuperare l'eco durante la digitazione

  • printf '\033k%s\033\\' "$(basename "$SHELL")"riporta il titolo della finestra su normale. Puoi usarlo in tmux rename-window "$(basename "$SHELL")"alternativa, tuttavia tmux rename-windowè limitato a tmuxdove funziona sempre la sequenza di escape.

  • printf '\033]2;%s\007' "$(uname -n)"ripristina il diritto di stato per essere mostrato come predefinito. (Nota che non dovresti usare tmux set status-right "something", perché genera solo quello pane titleche è stato corrotto, quindi status-rightespone solo alcuni bug di presentazione. Nota anche che non ho trovato un tmuxcomando per impostare direttamente il titolo del riquadro.)

  • tput reset ripristina il terminale, nel caso in cui ciò sia stato risolto

  • tmux refresh aggiorna lo schermo per sbarazzarsi di altri detriti che potrebbero essere stati visualizzati

Pezzo mancante

La printf '\033k%s\033\\' "$(basename "$SHELL")"perde la capacità standard tmuxdi presentare il comando corrente nell'area di stato sinistra. Dopo che è printf '\033k%s\033\\' "something"stata eseguita questa abilità si perde e non ho ancora trovato un buon modo per riportarla com'era prima.

Ma, come notato nei commenti qui sotto, puoi attivare una funzione simile tmuxcome sostitutiva con le seguenti tmuximpostazioni:

set-window-option automatic-rename on
  • O fare questo nella tmuxriga di comando, che può essere raggiunta nella finestra corrente con "Escape" :(dove "Escape" è il tmuxtasto di comando) e quindi immettere il comando.

  • Oppure esegui l'escissione tmux set-window-option automatic-rename onnel tuo terminale corrente, ma ciò fallisce nel caso in cui non sei direttamente al livello di shell giusto, ad esempio non funziona all'interno sudoo ssh.

  • Oppure apri un'altra finestra nella tmuxsessione corrente ed esegui il seguente comando:

    for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
  • Oppure apri un'altra shell sul computer che è in esecuzione tmuxed esegui il comando seguente (al di fuori di tmux):

    tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done

PS: Grazie a tutti coloro che hanno contribuito a mettere insieme questa soluzione.


2
Si prega di notare il uname -ninvece di hostname -s. hostnameè pericoloso nel rootcontesto, poiché potresti finire con il tuo host rinominato -ssu Linux / Unix precedente dove hostnamenon si trovano le opzioni.
Tino,

Non reimpostare il titolo del riquadro mi rende triste; ecco perché sono anche qui, in primo luogo. Grazie per essere l'unico sulla pagina che almeno riconosce questo difetto!
Evanato il

2
Considera anche "tmux setw automatic-rename" dopo aver corretto il titolo della finestra
EB.

La stty saneparte mi ha aiutato quando il mio terminale è stato rovinato e non ha mostrato nulla. Grazie!
johnny,

Se si desidera il "bit mancante", ovvero il comando attualmente in esecuzione visualizzato nell'area di stato sinistra, è possibile utilizzare il comando tmux set-window-option automatic-rename.
David Foerster,

26

Il problema specifico che stai vedendo ha a che fare con il nome / titolo della finestra 4. Una combinazione di essere troppo lungo (ovviamente) e contenere strani caratteri che fanno sì che tmux lo consideri più corto (quindi non riesce a limitare correttamente la barra di stato alla larghezza dello schermo) Non sono sicuro di come ripristinarlo (sul mio traccia il nome del processo in primo piano), potrebbe essere necessario chiudere la finestra.


4
l'impostazione predefinita per rinominare una finestra è^b - ,
Rob,

8
Nel caso in cui la scorciatoia da tastiera nel commento di @ Rob ti confonda, è Ctrl- ballora ,.
Doug Paul,

Si noti che quando si rinomina una finestra, il campo viene precompilato con il nome della finestra corrente (e il cursore si trova alla fine di quel nome). Dato che il nome della mia finestra era una lunga sequenza di immondizia, ho dovuto tenere premuto Backspaceper un minuto per cancellare il nome corrente. Per me, il feedback visivo alla fine ha chiarito che l'intero vecchio nome era stato cancellato.
Doug Paul,

puoi anche usare Ctrl-b :rename-window <il nome va qui>; questo utilizza il sistema di comando tmux invece della scorciatoia da tastiera per quel comando.
Abbafei,

5

fai semplicemente questo $ reset && tmux rename-window <new_window_name>


5
tmux set-option -g status off && tmux set-option -g status on 

risolto questo problema quando qualcosa di diverso dal nome della finestra era corrotto e non riuscivo a disturbarmi a capire cosa fosse.


2

tmuxpotrebbe costituire solo una parte del problema. Potrebbe essere necessario richiamare stty sanedalla riga di comando. In questo modo i driver TTY nel kernel vengono reimpostati su alcuni set di valori predefiniti che in genere consentono di procedere. Se i driver TTY sono abbastanza incasinati, potrebbe essere necessario digitare stty sane"cieco", cioè senza feedback sullo schermo.


stty saneneanche risolve il problema. Ho un feedback sullo schermo, all'interno di ciascuno dei tmuxriquadri posso digitare e ricevere feedback normalmente, ma non appena tmux deve disegnare qualcosa (ad esempio eseguendo una nuova applicazione, cambiando o ridimensionando i riquadri) la barra di stato si sposta nei riquadri ...
Gerrit,

2

Prova a ricaricare il tuo file di configurazione?

Ctrlb, poi: :source-file ~/.tmux.conf


la migliore soluzione finora.
dave,

-3

per risolvere il problema per me:

Ho appena ucciso il riquadro e la finestra del problema e ho creato una nuova finestra e un riquadro.

Nel riquadro del problema, CTRL+ AXe CTRL+ AC.


in questo modo per me di nuovo. nessun altro modo può aiutare
itech
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.