tmux: ocasionalmente CTRL + B <tecla de flecha> imprime el código de caracteres ([A, [B, [C o [D]) en lugar de cambiar paneles

3

Cuando intento cambiar paneles en tmux con ctrl + b, tmux imprime esporádicamente el código de carácter correspondiente [A, [B, [C o [D] en lugar de cambiar paneles.

Puedo hacer esto repetidamente, exactamente de la misma manera, el 75% del tiempo que cambiará correctamente y el otro 25% el tiempo que imprimirá el código de caracteres.

ctrl+b <up arrow>    prints [A
ctrl+b <down arrow>  prints [B
ctrl+b <right arrow> prints [C
ctrl+b <left arrow>  prints [D

Estoy usando cygwin conectado a Linux Mint. Tmux se ejecuta en Linux mint, y el shell que estoy usando es bash.

Editar: para que esta pregunta sea más fácil de buscar, agregaré estas palabras clave:

Los códigos de caracteres de las salidas de terminal abren el soporte A, abre el soporte B, abre el soporte C, abre el soporte D.

¿Algunas ideas?

Mateo
fuente
¿Qué emulador de terminal estás usando en Cygwin? mintty?
jjlin
El emulador de terminal es mintty con el tipo de terminal establecido en xterm-256color.
Matthew

Respuestas:

2

Parece que tmux 's escape-timeestá un poco bajo para la calidad de conexión que tiene entre su sistema Cygwin y el sistema Linux.

Muchos terminales generan la secuencia de tres bytes ESC [ Bpara la tecla de flecha hacia abajo. La escape-timeconfiguración le dice a tmux cuánto tiempo debe esperar una secuencia completa después de recibir el ESC; si el tiempo se agota sin recibir una secuencia completa, tmux tratará los bytes individuales como pulsaciones de teclas individuales (tratando Cb ESC como una tecla tmux independiente y pasando [Bal tty del panel activo).

Entonces, o ha escape-timeestablecido un valor muy bajo (que probablemente funciona bien cuando accede a tmux a través de conexiones estrictamente locales), o la conexión entre las dos máquinas a veces termina un poco más allá de su escape-timevalor. Puede consultar el valor actual con el comando tmux show-options -s | grep escape-time.

El valor predeterminado es 500 milisegundos; Esto debería funcionar bien en la mayoría de las situaciones, pero podría ser demasiado corto para conexiones marginales. Puede intentar aumentar el valor de escape-time:

set-option -s escape-time 1000

Puede poner esto en su ~/.tmux.confarchivo, ejecutarlo como un tmuxcomando en un shell dentro de una sesión tmux , o escribirlo directamente en el indicador tmux (abierto con Cb :). Nota: Los cambios realizados ~/.tmux.confno tendrán efecto hasta que vuelva a grabar sourceel archivo o reinicie su servidor tmux .

Chris Johnsen
fuente
+1 para una explicación increíble, desafortunadamente no solucionó el problema. El problema parece empeorar después de aumentar el tiempo de escape :( Debo señalar que las teclas de flecha actúan de manera extraña y extraña al intentar navegar por la línea de comando tmux (ctrl + b :). Presionando a la izquierda para mover el cursor en una parte parcialmente completada El comando tmux a veces borra caracteres en lugar de mover el cursor, y necesito presionar 'i' para poder escribir de nuevo como si tuviera las teclas vi atadas y se presionó escape. Probablemente tengas razón acerca de que es un problema de conexión lenta, pero los tiempos de escape más altos lo empeoran
Matthew
Bueno, ese comportamiento en su línea de comando tmux definitivamente parece un problema de secuencia de escape retrasada: el ESC lo saca del modo de inserción, [se ignora (no está vinculado en la vi-edittabla) y Des el delete-end-of-linecomando. No hubiera esperado que una escape-timesubida empeorara el problema de la secuencia de escape interrumpido; sin embargo, haría que los enlaces de estilo vi sean inconvenientes: siempre tendrá que esperar a escape-timeque transcurra después de presionar la tecla ESC (es decir, para salir del modo de inserción) y antes de comenzar a escribir comandos de modo normal (por ejemplo, bpara retroceder una palabra) .
Chris Johnsen
¿Por qué esto solo sucedería en tmux y no en absoluto cuando solo en bash o una sesión de pantalla gnu?
Matthew
Además, solo ocurre cuando es interpretado por tmux (después de ctrl + b o mientras está en tmux: línea de comando); Puedo presionar las teclas de flecha repetidamente en el terminal en una ventana tmux sin problemas (bash prompt en la sesión tmux).
Mateo
1
Suponga que el terminal desea enviar la secuencia ESC de tres bytes [ D, pero se detiene después del primer byte. Si esto ocurre después de su Prefix, el ESC principal se "come" como una combinación de teclas enlazables (Prefix ESC). En el modo de edición de línea de comando vi- style se "come" como la tecla vi para volver al modo normal. Cuando está escribiendo en un tty (por ejemplo, bash en tmux ), el ESC nunca se "come", simplemente lo envía al tty subyacente como una tecla "separada"; Si el proceso de escucha ( bash ) no es tan exigente con Escape vs. inicio de secuencia, simplemente esperará el [Dy lo tratará como una flecha izquierda.
Chris Johnsen el
1

Estoy teniendo este problema también; definitivamente es específico para las teclas de flecha (y probablemente cygwin) Por el momento, decidí desvincular las teclas de flecha y mover los comandos del panel de selección a otra parte, y los nuevos enlaces de teclas funcionan perfectamente. Sin embargo, no es una solución muy satisfactoria. Me encantaría saber si alguien se da cuenta de lo que está sucediendo.

Julia
fuente