2012-06-03 12 views
7

Acabo de cambiar de usar Emacs.app a emacs server y emacsclient en modo terminal usando iterm2 como mi emulador de terminal. Sin embargo, estoy teniendo algunos problemas con algunas combinaciones de teclas. Particularmente, la flecha izquierda M imprime el carácter D, M-la flecha derecha imprime C, la flecha M-up imprime A, y la flecha M-abajo imprime B. M-ret parece funcionar, al menos para el modo org. Estoy usando los valores predeterminados de xterm para las claves en iterm2 y tengo las teclas de opción izquierda y derecha unidas a + Esc. Puedo obtener la funcionalidad M-left en modo orgánico con Esc-left o Esc-right Esto es particularmente molesto en org-mode. ¿Tendré que volver a vincular las claves en mis .emacs? ¿Cómo voy a hacer eso?emacs en terminal metaflexión combinaciones de teclas

He visto esto http://orgmode.org/manual/TTY-keys.html#TTY-keys, pero no entiendo por qué las teclas de flecha no deberían estar disponibles en el terminal.

edición:

gato meta-up: ^[[1;9A gato meta-down: ^[[1;9B gato meta-derecha: ^[[1;9C gato meta-izquierda: ^[[1;9D

El principal problema resuelto, pero ahora estoy teniendo problemas con shift-up. "<select> undefined". Probé un mapeo similar con la secuencia de escape que obtuve del cat: ^[[1;2A. Reacio a crear otra pregunta para un problema similar.

+0

Escriba 'cat' en el símbolo del sistema y presione las teclas de la flecha meta. Esto le mostrará las secuencias de esc que arrojan las teclas de flecha. Por favor agréguelos a tu pregunta. Por ejemplo, en mi terminal M-up salidas: '^ [^ [[A'. – Casper

+0

bien hecho, esto parece coincidir con la salida que recibo en emacs cuando trato de usar meta – Zach

+1

Hmm..no, escriba 'cat', presione enter, y ENTONCES presione las teclas de flecha. – Casper

Respuesta

10

Solución 1

Con base en la información que ya ha proporcionado aquí es una cosa que puede probar. Usted le dice a Emacs para mapear las secuencias de escape a las secuencias de teclas adecuadas:

(add-hook 'term-setup-hook 
    '(lambda() 
    (define-key function-key-map "\e[1;9A" [M-up]) 
    (define-key function-key-map "\e[1;9B" [M-down]) 
    (define-key function-key-map "\e[1;9C" [M-right]) 
    (define-key function-key-map "\e[1;9D" [M-left]))) 

Solución 2

También encontré otra solución es posible con un poco de google: redefinir los enlaces iterm lugar para que coincida con lo que Emacs es buscando.

http://offbytwo.com/2012/01/15/emacs-plus-paredit-under-terminal.html

Presupuesto de la página anterior:

Volver a las asociaciones de teclas de perfil bajo iTerm2 y añadir enlaces para el siguiente:

M-up  : Esc-[1;4A 
M-down : Esc-[1;4B 
M-right : Esc-[1;4C 
M-left : Esc-[1;4D 
+0

He intentado volver a mapearlo a través de iterm, pero debo estar haciendo algo mal. El gancho funcionó sin embargo. ¡Gracias! – Zach

+0

Esos valores se ven mal; 4 es Shift + Alt, no solo Alt. – LeoNerd

2

Estoy respondiendo en respuesta a su 'problema principal resuelto, pero nuevo' editar.

me encontré con el blog de este tipo en este tema: - http://webframp.com/emacs/2013/02/22/fixing-emacs-bindings-on-the-in-iterm2/

Básicamente, se puede utilizar el 'gato correr' y pulsadores truco para ver qué códigos de escape están siendo enviado por su sistema/terminal, luego agrega las líneas 'define-key' para definir M- {arriba, abajo, derecha, izquierda} y también MS- {arriba, abajo, derecha, izquierda}.

+1

GRACIAS exactamente lo que necesitaba. Parece que los códigos de personaje de cada uno son ligeramente diferentes. Arriba usado [1; 4x]. Esa publicación en el blog mostró [1; 3x]. Pero los míos eran [1; 9x]. Muy confuso. – Chris

Cuestiones relacionadas