2010-12-28 7 views
22

Cada vez que uso emacs, puedo usar las teclas de flecha para mover el cursor. Pero cuando estoy ejecutando emacs dentro de la pantalla, y presiono emacs hacia el fondo (ctrl-Z) y luego lo devuelvo al primer plano, mis teclas de flecha ya no funcionan, p."pantalla" de alguna manera desaparece mis teclas de flecha en emacs después de^Z

M-[ a is undefined 

Este comportamiento no ocurre cuando estoy corriendo emacs fuera de la pantalla.

¿Alguna idea? ¿Esto es una configuración de pantalla?

Respuesta

23

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.

+0

debe ser mapeada no '\ e [A' a' [C-up] 'en lugar de' [arriba] '? (¿Y lo mismo con las otras direcciones?) – robert

+0

@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

+0

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

29

Por lo que vale la pena, esto sólo me pasó a mí, y yo era capaz de corregirlo mediante la desconexión de la pantalla y luego volver a conectar: ​​

Ctrl + A, D

pantalla -R

+3

que es fascinante. funcionó para mí también –

+1

Funcionó para mí también (Debian Wheezy + LXTerminal + emacs 23) –

+0

Esto solo funcionó para mí si salí de emacs, luego desconecté de la pantalla, volví a conectar a la pantalla y reinicié emacs. Si estás en emacs, al salir de la pantalla no funcionará (no lo hice) – juacala

3

Tenía mi ventana xterm a pantalla completa y estaba en pantalla y esto sucedió. Hice doble clic en el borde xterm para salir de la pantalla completa. Ctrl-z a fondo emacs. Luego fg para traerlo de vuelta y luego las teclas de flecha funcionaron. Podría entrar en pantalla completa sin ningún problema.

que debería aprender Proly todos los comandos emacs navegación, pero mis viejos hábitos de la migración a las teclas de flecha Die Hard:/

+0

tan raro ... funcionó para mí –

1
No

una respuesta, pero vale la pena destacar que el comportamiento descrito también se produce cuando se ejecuta GNU emacs en tmux en Ubuntu's Terminal o xterm

El trabajo rápido es no ejecutar emacs en tmux.

Versiones

Emacs: GNU Emacs 24.3.1 (x86_64-pc-linux-gnu) de 06.06.2014 en brownie, modificado por Debian)

tmux: 1,9

Ubuntu: 14.10

+1

No sé si podría ayudar a alguien, pero tengo el mismo problema (ubutu + tmux + emacs): completó el ciclo del estado de pantalla completa de la ventana, presionó Ctrl-z, y todo funcionó perfectamente otra vez ... – Rick77

+0

@ Rick77 eres un salvavidas, puedo decir que la solución funcionó bien con tmux en ubuntu 12.04. –

0

He aquí una solución que funcionó para mí unbreak que una vez roto (ubuntu 14.04, Emacs 24 .1). Sin desconectarse de la pantalla, intente lo siguiente:

1) Ctrl-z para detener emacs.

2) iniciar otro emacs: emacs -nw

3) Ctrl-Z en segundo emacs, y listo !, primeros emacs trabajará de nuevo. (Luego reabro los segundos emacs y lo cierro Ctrl-x Ctrl-c).

1

Estamos teniendo el mismo problema en este caso, una solución que encontramos, (pero todavía tenemos que encontrar el origen del problema) es establecer la "secuencia de aplicación" manualmente desde dentro de Emacs:

  • Vaya a su memoria intermedia *scratch*
  • Pegar: (send-string-to-terminal "\e[?1h")
  • M-x eval-buffer

y listo.

Además, un simple C-zfg puede ser suficiente, y es más rápido que escribir þ

+0

Agregué esto a mi .emacs: '(defun term-send-application-sequence() (interactive) (send-string-to-terminal" \ e [? 1h "))' Ahora después de un accidental 'Cz'' fg' Sigo con 'Mx term-send-application-sequence' y todo está bien. – mvanbem

0

En primer lugar, empujar emacs a fondo.

Ctrl+z 

y llevar de nuevo a primer plano.

fg 
Cuestiones relacionadas