emacs gnu-screen key-bindings emacs23

Enlazando M-<arriba>/M-<abajo> en Emacs 23.1.1



gnu-screen key-bindings (6)

Intento poner una característica que echo de menos en Eclipse, donde Alt + [ Arriba / Abajo ] transpone las líneas hacia arriba o hacia abajo, pero no puedo imaginar cómo asignarlas correctamente. Lo estoy usando en modo -nw (tan solo en una ventana de shell), y normalmente lo ejecuto en una sesión de pantalla.

Utilizando un enlace de clave global, puedo hacer que funcione con combinaciones de letras, como (kbd "Mm") , pero cada combinación que he probado para las teclas de flecha solo me da un mensaje que no tiene sentido, siempre obtengo:

"ESC <up> is undefined"

Lo que he intentado:

(global-set-key (kbd "M-<up>") ''transpose-line-up) (global-set-key (kbd "<escape>-<up>") ''transpose-line-up) (global-set-key [M-up] ''transpose-line-up) (global-set-key [/e /M-O A] ''transpose-line-up)

Y Ch c solo regresa:

ESC <up> (translated from ESC M-O A) is undefined

Ninguno de estos funciona, ya sea usando ESC o Alt .

¿Alguna idea de cómo puedo hacer que esto funcione? Preferiría tener estos como Alt + [ Arriba / Abajo ] solo porque eso es a lo que estoy acostumbrado.

Editar

De los comentarios:

  • Cq Up prints ^[OA .

  • Cq M-Up imprime ^[ y mueve el cursor hacia arriba en una línea.

  • Ch k ( Alt + Arriba ) imprime ESC <up> (translated from ESC MO A) is undefined .

Gracias por las sugerencias, pero todas resultaron lo mismo.


fea solución:

He escrito Cq <M-up> que produjo ^[[1;3A en la screen dentro de la terminal dentro de emacs .

(global-set-key (kbd "<M-up>") ''transpose-line-up) (global-set-key (kbd "^[[1;3A") ''transpose-line-up)

Tengo un Lisp error: (void-function transpose-line-up) para que funcionen las asociaciones de teclas.

Nota: Cq ejecuta el comando quoted-insert .


Asumiendo que tiene las funciones transpose-line-up y transpose-line-down ya definidas (como parece ser del código de ejemplo en su pregunta original):

(global-set-key [(meta up)] ''transpose-line-up) (global-set-key [(meta down)] ''transpose-line-down)


Emacs tiene un mecanismo complejo para manejar las vicisitudes de la clave de función y las codificaciones de modificador en varios tipos de terminales. No funciona de la caja en todos los casos. La siguiente configuración debería funcionar en su terminal:

(define-key input-decode-map "/e/eOA" [(meta up)]) (define-key input-decode-map "/e/eOB" [(meta down)]) (global-set-key [(meta up)] ''transpose-line-up) (global-set-key [(meta down)] ''transpose-line-down)

Debería poder usar (kbd "<M-up>") y (kbd "<M-down>") en lugar de [(meta up)] y [(meta down)] , siempre y cuando haya hizo el paso de decirle a Emacs (a través de input-decode-map ) sobre las secuencias de escape que usa su terminal para codificar estas combinaciones de teclas.


Las siguientes líneas me funcionan en macOS 10.11.6 y GNU Emacs 25.2.1 :

(global-set-key (kbd "ESC <down>") ''end-of-buffer) (global-set-key (kbd "ESC <up>") ''beginning-of-buffer)


Siempre utilizo Chk (clave) (es decir, describe-key ) para descubrir cómo se refiere Emacs (clave), y luego uso (kbd) con esa misma cadena para utilizarla.

En este caso, describe-key devuelve <M-up> , así que usaría (global-set-key (kbd "<M-up>") ''transpose-line-up) (exactamente como lo hizo JF Sebastian).

Editar:

Ejecutando emacs -nw (pero no a través de la pantalla), describe los informes clave ESC <up> (translated from ESC M-[ A) , y (kbd "ESC <up>") es exitoso para enlazarlo.

Ejecutando la screen emacs -nw , describe-key reports ESC <up> (translated from ESC MO A) , que parece coincidir con lo que ves, y el enlace para (kbd "ESC <up>") aún funciona para mí.

(nb Probado en Cygwin con la pantalla 4.00.03 y Emacs 23.2.1.)


(global-set-key [M-up] ''beginning-of-buffer) (global-set-key [M-down] ''end-of-buffer)

En mi OSX, tengo esta definición para realizar Alt-up / down para saltar a la parte superior / inferior del buffer.