2012-06-03 10 views
7

Sono appena passato dall'utilizzo di Emacs.app al server emacs ed emacsclient in modalità terminale usando iterm2 come emulatore di terminale. Comunque sto avendo qualche problema con alcune combinazioni di tasti. In particolare M-freccia sinistra stampa il carattere D, M-freccia destra stampa C, freccia M-su stampa A e freccia M-giù stampa B. M-ret sembra funzionare comunque, almeno per la modalità org. Sto usando i valori di default di xterm per le chiavi in ​​iterm2 e ho i tasti di opzione sinistro e destro associati a + Esc. Posso ottenere la funzionalità M-left in org-mode con Esc-left o Esc-right Questo è particolarmente fastidioso in org-mode. Dovrò semplicemente ricollegare i tasti del mio .emacs? Come potrei fare per farlo?emacs in terminal meta arrow keybindings

Ho visto questo http://orgmode.org/manual/TTY-keys.html#TTY-keys, ma non capisco perché i tasti freccia non dovrebbero essere disponibili nel terminale.

edit:

Cat meta-up: ^[[1;9A Cat meta-down: ^[[1;9B Cat meta-destra: ^[[1;9C Cat meta-sinistra: ^[[1;9D

problema principale risolto, ma ora sto avendo problemi con shift-up. "<select> undefined". Ho provato una mappatura simile con la sequenza di escape ottenuta da cat: ^[[1;2A. Riluttante a creare un'altra domanda per un problema simile.

+0

Digitare 'cat' sul prompt dei comandi e premere i tasti della meta-freccia. Questo ti mostrerà le sequenze esc che i tuoi tasti freccia emettono. Si prega di aggiungere questi alla tua domanda. Per esempio sulle mie uscite M-up del terminale: '^ [^ [[A'. – Casper

+0

ok fatto, questo sembra comportarsi con l'output che sto ottenendo in emacs quando provo ad usare meta – Zach

+1

Hmm..no, digitare 'cat', premere invio, e quindi premere i tasti freccia. – Casper

risposta

10

Soluzione 1

Sulla base di informazioni che hai fornito qui è una cosa che si può provare. Di 'emacs per mappare quelle sequenze di escape per le sequenze di tasti corretti:

(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]))) 

Soluzione 2

ho trovato anche un'altra possibile soluzione con un po' googling: ridefinire le associazioni iTerm invece corrispondere a ciò che Emacs è cercando.

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

Dalla pagina del manuale di cui sopra:

Torna alle combinazioni di tasti profilo sotto iTerm2 e aggiungere associazioni per la seguente:

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

Avevo già provato a ri-mapparlo attraverso iterm, ma devo fare qualcos'altro sbagliato. Il gancio ha funzionato però. Grazie! – Zach

+0

Questi valori sembrano errati; 4 è Maiusc + Alt, non solo Alt. – LeoNerd

2

sto rispondendo in risposta al tuo 'problema principale risolto, ma nuovo' modifica.

ho trovato post del blog di questo tipo su questo tema: - http://webframp.com/emacs/2013/02/22/fixing-emacs-bindings-on-the-in-iterm2/

In sostanza, è possibile utilizzare il 'Cat Run' e pulsanti trucco per vedere ciò che i codici di fuga sono sempre inviati dal sistema/terminale, quindi aggiungi le linee 'define-key' per definire M- {su, giù, destra, sinistra} e anche MS- {su, giù, destra, sinistra}.

+1

GRAZIE esattamente quello di cui avevo bisogno. Sembra che i codici dei caratteri di tutti siano leggermente diversi. Sopra usato [1; 4x]. Quel post sul blog mostrava [1; 3x]. Ma i miei erano [1; 9x]. Molto confuso. – Chris