El terminal vt100 que emula la pantalla (y casi todos los demás emuladores de terminal) tiene dos modos, modo normal y modo de aplicación. El modo normal se usa para aplicaciones de línea por línea y modo de aplicación para aplicaciones de pantalla completa. Entre las diferencias entre los modos es que las teclas de flecha envían different control sequences (no sé por qué): p. ESC O A
en modo de pantalla completa y ESC [ A
en modo normal. Parece que cuando presiona Ctrl + Z, Emacs cambia el terminal al modo normal, pero cuando lo regresa al primer plano, no cambia al modo de pantalla completa otra vez, o la pantalla no reacciona a Emacs comandos apropiadamente
Una posible solución es bind the same character sequences en ambos modos en su .screenrc
, p. Ej.
bindkey -k ku stuff ^[OA
bindkey -k kd stuff ^[OB
bindkey -k kr stuff ^[OC
bindkey -k kl stuff ^[OD
Otra solución posible es decirle a Emacs que interprete ambas secuencias de teclas independientemente de lo que diga la terminal. Aunque esto es, en principio, una mala idea, ya que algunos terminales pueden usar estas secuencias de teclas para claves diferentes, nunca me he encontrado con un terminal tan incompatible, y sospecho que no se han fabricado en los últimos 20 años o más.
(define-key function-key-map "\eOA" [up])
(define-key function-key-map "\e[A" [up])
(define-key function-key-map "\eOB" [down])
(define-key function-key-map "\e[B" [down])
(define-key function-key-map "\eOC" [right])
(define-key function-key-map "\e[C" [right])
(define-key function-key-map "\eOD" [left])
(define-key function-key-map "\e[D" [left])
Una verdadera solución implicaría encontrar lo que está causando el problema. Podría ser un error en la pantalla, un error en Emacs, un error en el terminal (emulador) en el que se está ejecutando la pantalla, un error o una configuración incorrecta en su termcap o base de datos terminfo. Si desea investigar esto, comience mencionando su sistema operativo, en qué pantalla de terminal (emulador) se está ejecutando, dónde obtuvo Screen (o cómo lo compiló, si eso fue lo que hizo) y qué versión, ídem para Emacs, si ha observado el mismo problema fuera de la pantalla, la salida de echo $TERM
y echo -E "$TERMCAP"
dentro de la pantalla.
debe ser mapeada no '\ e [A' a' [C-up] 'en lugar de' [arriba] '? (¿Y lo mismo con las otras direcciones?) – robert
@robert ¿Por qué debería? '\ e [A' es lo que' up' envía en muchos terminales. ¿Has encontrado uno donde 'C-up' envía' \ e [A' pero 'up' envía algo más? ¿Qué es? – Gilles
Eso funcionó inicialmente para mí, pero tuve otros problemas. Esto los solucionó a todos: https://stackoverflow.com/questions/15445481/mapping-arrow-keys-when-running-tmux – robert