I caratteri e la notifica rimbalzano quando il terminale perde lo stato attivo

2

OSX 10.11.2 Terminal 2.6.1

Ho un problema intermittente che mi sta facendo impazzire. Trascorro molto tempo in Terminal in modalità a schermo intero sul mio MacBook Air 2015 11. Generalmente ho Chrome o Notational Velocity o qualcos'altro in uno degli "Spazi" nelle vicinanze e cambio avanti e indietro con il quattro-dito -swipe gesture (abilitato in System Preferences - > Trackpad - > Swipe between full screen apps ).

Negli ultimi mesi, una delle schede del mio terminale inizierà sporadicamente a darmi un "rimbalzo" e il rosso 1 badge a far scattare qualche tipo di avviso ogni volta che perde lo stato attivo . Di solito me ne accorgo quando utilizzo uno scorrimento a quattro dita per andare avanti e indietro in un altro spazio (che mostra immediatamente un singolo rimbalzo dell'icona Terminale e il badge nel dock).

Il terminale agisce normalmente al ritorno alla messa a fuoco. Non vedo alcuna notifica o messaggio tranne alcuni caratteri strani. È stato difficile identificare esattamente quali personaggi, quindi ho eseguito cat e poi cambiato lo stato attivo, e sembra che sia ^[[O^[[I . Ho pensato che questo tipo di assomigliava ad alcune delle sequenze per far funzionare le frecce e le chiavi speciali in Terminal - > Preferences - > Profiles - > Keyboard , ma non ne vedo nessuno con quei caratteri.

Ho lo stesso problema in modalità normale (non a schermo intero) e faccio clic su un'icona diversa, anche nello stesso spazio, e Terminal perde lo stato attivo. Stessi personaggi, un rimbalzo e un distintivo, quindi non penso sia correlato a Mission Control.

Spesso eseguo tmux e ho connessioni SSH ad alcuni server, ma non ho notato che è esclusivo di una sessione tmux o SSH. Ad esempio, attualmente ho aperto un paio di schede Terminale e sta accadendo in una scheda che esegue una sessione SSH (non in tmux), ma non in un'altra scheda che esegue tmux in SSH e che non si verifica in altre schede aperte alle directory locali.

Non vedo nulla di ovvio in Console.app e niente da Terminal. In genere cerco di includere una sezione " WHYT " nei miei post stackexchange, ma riesco a malapena a capire dove inizia da qui - I'm stumped.

Non è un grosso problema, ma sicuramente fastidioso, e non mostra segni di lasciarmi solo negli ultimi mesi. Qualsiasi aiuto a capire questo sarebbe molto apprezzato!

    
posta n8henrie 21.12.2015 - 03:55
fonte

1 risposta

3

Alcuni programmi con cui stai interagendo hanno attivato gli eventi del Focus In / Out del terminale, normalmente usati insieme a Segnalazione del mouse (alias "Xterm Mouse Tracking"). Quando abilitato, il terminale invia eventi al TTY per indicare quando il terminale guadagna o perde il focus della tastiera (cioè diventa attivo o inattivo).

Il comando del terminale per abilitare gli eventi di messa a fuoco è:

CSI ? 1 0 0 4 h

(CSI = Introduttore sequenza di controllo: ESC [ .)

Gli eventi di messa a fuoco / uscita che il terminale invia al tty sono:

Focus In:  CSI I
Focus Out: CSI O

Queste sono le sequenze che stai vedendo quando usi cat per visualizzarle.

Il terminale Dock-icona rimbalzo e distintivo indicano quando un BEL (Control-G) viene inviato al terminale quando non è il terminale attivo / anteriore. (Esistono preferenze per controllare questi comportamenti in Preferenze > Profili > [profilo] > Avanzate .)

Quindi sembra che alcuni programmi abbiano attivato gli eventi Focus In / Out e stia inviando un BEL in risposta a loro.

Potrebbe anche darsi che il programma che invia il BEL non sia lo stesso del programma che abilita gli eventi Focus In / Out. Ad esempio, un editor come vim potrebbe averli abilitati, ma alcuni programmi intermedi come screen o tmux (o forse ssh , anche se sembra meno probabile) intercettano gli eventi Focus In / Out e rispondono con un BEL per indicare che considera l'input non valido.

…it's happening in a tab running an SSH session…

Dato che non hai detto, suppongo che tu stia usando una shell solo all'interno di quella sessione e non su qualche altro programma. In questo caso, è probabile che tu abbia eseguito un programma precedente all'interno di quella sessione SSH che ha abilitato gli eventi di attivazione e quindi chiuso senza disabilitarli, lasciando la shell a riceverli e se digiti ESC [ I o ESC [ O manualmente in Bash , per impostazione predefinita emetterà un BEL per indicare che l'input è considerato non valido.

Se hai usato solo una shell all'interno di quella sessione SSH, allora dovresti esaminare i file di avvio / configurazione della shell sull'host remoto per vedere se c'è del codice per abilitare gli eventi di focus.

Puoi simulare questa situazione eseguendo il seguente comando in Bash (e probabilmente altre shell):

printf '\e[?1004h'

Quindi scoprirai che Bash emette un segnale acustico (invia un BEL) quando attivi o disattiva la vista / finestra del terminale.

    
risposta data 23.12.2015 - 01:09
fonte

Leggi altre domande sui tag