Los caracteres y las notificaciones rebotan cuando la Terminal pierde el foco

2

OSX 10.11.2 Terminal 2.6.1

Tengo un problema intermitente que me está llevando a la pared. Pasé mucho tiempo en la Terminal en modo de pantalla completa en mi Macbook Air 2015 11 ". Generalmente tengo Chrome o Notational Velocity o algo más en uno de los" Espacios "cercanos y cambio de un lado a otro con los cuatro dedos - gesto de barrido (habilitado en System Preferences - > Trackpad - > Swipe between full screen apps ).

Durante los últimos meses, una de las pestañas de mi Terminal empezará a darme un "rebote" esporádicamente y la insignia roja 1 para activar algún tipo de alerta en cualquier momento que pierda el foco . Por lo general, me doy cuenta de que cuando uso un deslizamiento con cuatro dedos para ir y venir a otro espacio (que muestra inmediatamente un solo rebote del icono de la Terminal y la insignia en el muelle).

El terminal actúa normalmente al volver al enfoque. No veo ninguna notificación o mensaje que no sea unos pocos caracteres impares. Fue difícil identificar exactamente qué caracteres, así que ejecuté cat y luego cambié de enfoque, y parece que es ^[[O^[[I . Pensé que este tipo de aspecto se parecía a algunas de las secuencias para hacer que las flechas y las teclas especiales se comporten en Terminal - > Preferences - > Profiles - > Keyboard , pero no veo ninguno con esos caracteres.

Tengo el mismo problema cuando estoy en modo normal (no en pantalla completa) y hago clic en un ícono diferente, incluso en el mismo espacio, y la Terminal pierde el foco. Los mismos personajes, un rebote y una insignia, así que no creo que esté relacionado con el Control de la Misión.

A menudo ejecuto tmux y tengo conexiones SSH con algunos servidores, pero no he notado que sea exclusivo de una sesión de tmux o SSH. Por ejemplo, actualmente tengo algunas pestañas de Terminal abiertas, y está sucediendo en una pestaña que ejecuta una sesión de SSH (no en tmux), pero no sucede en otra pestaña que ejecuta tmux en SSH, y no sucede en otras pestañas abiertas a directorios locales.

No veo nada obvio en Console.app y nada de Terminal. Por lo general, trato de incluir una sección " WHYT " en mis publicaciones de stackexchange, pero casi no puedo saber dónde empieza aquí, estoy perplejo.

No es un problema importante, pero definitivamente molesto, y no muestra signos de dejarme solo en los últimos meses. Cualquier ayuda para resolver esto sería muy apreciada!

    
pregunta n8henrie 21.12.2015 - 03:55

1 respuesta

3

Algunos programas con los que estás interactuando han habilitado los eventos Focus In / Out del terminal, que normalmente se usan junto con Mouse Reporting (también conocido como "Seguimiento del ratón Xterm"). Cuando está habilitado, el terminal envía eventos al TTY para indicar cuándo el terminal gana o pierde el enfoque del teclado (es decir, se vuelve activo o inactivo).

El comando de terminal para habilitar eventos de foco es:

CSI ? 1 0 0 4 h

(CSI = introductor de secuencia de control: ESC [ .)

Los eventos de enfoque de entrada / salida que el terminal envía al tty son:

Focus In:  CSI I
Focus Out: CSI O

Estas son las secuencias que estás viendo cuando usas cat para verlas.

El icono del Dock del terminal y la insignia indican cuando se envía un BEL (Control-G) al terminal cuando no es el terminal activo / frontal. (Existen preferencias para controlar estos comportamientos en Preferencias > Perfiles > [perfil] > Avanzadas .)

Parece que algunos programas han habilitado eventos Focus In / Out y están enviando un mensaje BEL en respuesta a ellos.

También podría ser que el programa que envía el BEL no sea el mismo que el programa que habilitó los eventos Focus In / Out. Por ejemplo, un editor como vim puede haberlos habilitado, pero algún programa intermedio como screen o tmux (o posiblemente ssh , aunque parece menos probable) está interceptando los eventos Focus In / Out y respondiendo con una BEL para indicar que considera que la entrada no es válida.

  

... está sucediendo en una pestaña que ejecuta una sesión SSH ...

Como no lo dijiste, asumiré que solo estás usando un shell dentro de esa sesión y no otro programa. Si ese es el caso, es probable que haya ejecutado algún programa anterior dentro de esa sesión SSH que habilitó los eventos de enfoque y luego salió sin deshabilitarlos, dejando que el shell los reciba, y si escribe ESC [ I o ESC [ O manualmente en Bash Por defecto, emitirá un BEL para indicar que la entrada se considera inválida.

Si solo ha utilizado un shell en esa sesión de SSH, debe examinar los archivos de inicio / configuración del shell en el host remoto para ver si hay algún código para habilitar los eventos de enfoque.

Puedes simular esta situación ejecutando el siguiente comando en Bash (y probablemente en otros shells):

printf '\e[?1004h'

Luego encontrará que Bash emite un pitido (envía un BEL) cuando activa o desactiva la ventana / vista del terminal.

    
respondido por el Chris Page 23.12.2015 - 01:09

Lea otras preguntas en las etiquetas