2012-06-03 16 views
7

Właśnie przełączyłem się z używania Emacs.app na serwer emacs i emacsclient w trybie terminalowym, używając iterm2 jako emulatora terminala. Mam jednak problem z niektórymi kluczami. W szczególności M-strzałka w lewo drukuje znak D, M-strzałka w prawo drukuje C, M-strzałka w górę drukuje A i M-strzałka w dół drukuje B. M-ret wydaje się działać, przynajmniej w trybie org. Używam domyślnych wartości xterm dla kluczy w iterm2 i mają lewe i prawe klawisze opcji przypisane do + Esc. Mogę uzyskać funkcjonalność M-left w trybie org z Esc-left lub Esc-right Jest to szczególnie denerwujące w trybie org. Czy będę musiał ponownie zmienić klucze w moich .emacs? Jak mam to zrobić?emacs w terminalu meta arrow keybindings

Przyjrzałem się temu http://orgmode.org/manual/TTY-keys.html#TTY-keys, ale nie rozumiem, dlaczego klawisze strzałek powinny być niedostępne w terminalu.

edit:

Cat meta-up: ^[[1;9A Cat meta-down: ^[[1;9B Cat meta-right: ^[[1;9C Cat meta-left: ^[[1;9D

Główny problem rozwiązany, ale teraz mam kłopoty z shift-up. "<select> undefined". Próbowałem podobnego mapowania z sekwencją specjalną, którą otrzymałem od cat: ^[[1;2A. Niechętnie stworzył kolejne pytanie dotyczące podobnego problemu.

+0

Wpisz "cat" w wierszu polecenia i naciśnij klawisze mety-strzałki. To pokaże ci sekwencje esc, które wyprowadzają twoje klawisze strzałek. Dodaj je do swojego pytania. Na przykład na wyjściach M-up terminala: '^ [^ [[A'. – Casper

+0

ok, wydaje się to kompulsować z danymi wyjściowymi, które otrzymuję w emacs, gdy próbuję użyć meta – Zach

+1

Hmm..no, wpisz 'cat', naciśnij Enter, a następnie naciśnij klawisze strzałek. – Casper

Odpowiedz

10

Rozwiązanie 1

Na podstawie informacji dostarczonych tutaj ty jedna rzecz, można spróbować. Powiesz emacsowi map te sekwencje do odpowiednich sekwencji klawiszy:

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

Rozwiązanie 2

znalazłem także inne możliwe rozwiązanie trochę googling: przedefiniowania powiązań iTerm zamiast dopasować co Emacs szukam.

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

Cytat z powyższej strony:

Wróć do profilu kluczowych powiązań wynikających iTerm2 i dodać wiązania w następujących przypadkach:

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

Próbowałem wcześniej ponownie mapować to poprzez iterm, ale muszę robić coś złego. Haczyk działał jednak. Dzięki! – Zach

+0

Te wartości wyglądają źle; 4 to Shift + Alt, a nie tylko Alt. – LeoNerd

2

ja odpowiadając w odpowiedzi na "główną, rozwiązaną problem, ale nową".

znalazłem ten facet blogu na ten temat: - http://webframp.com/emacs/2013/02/22/fixing-emacs-bindings-on-the-in-iterm2/

Zasadniczo, można użyć „kota Uruchom” i przyciski sztuczki, aby zobaczyć, co ucieczka kody są coraz wysłana z systemu/terminalu, a następnie dodaj linie "zdefiniuj klucz", aby zdefiniować M- (góra, dół, prawo, lewo), a także MS- (góra, dół, prawo, lewo).

+1

DZIĘKUJĘ dokładnie to, czego potrzebowałem. Wygląda na to, że kody postaci wszystkich są nieco inne. Powyżej użyto [1; 4x]. Ten post na blogu pokazał [1; 3x]. Ale moje były [1; 9x]. Bardzo mylące. – Chris