2013-12-08 10 views
9

Gdybym biegnie emacsowi w terminalu (czyli rozpocząć emacs w iTerm2 z emacs -nw) użyciu windmove i to domyślne powiązania, powinienem być w stanie poruszać się pomiędzy oknami z wykorzystaniem różnych kombinacji Shift + , także paredit ma powiązania, które angażują Ctrl/Meta + , wszystkie te działają dobrze w (powiedzmy) buforze trybu eliz.Dlaczego Shift + wiązanie strzałek nie działa w trybie clojure w terminalu emacs?

Wygląda funkcjonalność klawiszy strzałek opiera się na emacs dekodujących sekwencje końcowe ewakuacyjnych, przez (chyba) input-decode-map

Jednakże, jeśli mogę ustawić tryb główną jak clojure-mode pojawi dekodowanie sekwencji ucieczki jest wyłączony (lub nadpisane). Kiedy wykonuję te wiązania, otrzymuję zamiast tego sekwencję ucieczki.

Co się dzieje z powiązaniami w clojure-mode?

Wersje:

  • Emacsa 24.3.1 (próbowałem wersję maxosxforemacs.com i homebrew)
  • clojure-mode 20.131.117,2306 (próbowałem inne wersje)
  • OSX 10.8.5
  • iTerm2 1.0.0.20131124

(Uwaga: I raised this as an issue on clojure-mode, but no solution is forthcoming)

UPDATE 2013/12/10: Aby było absolutnie jasne: ten problem dotyczy tylko modelu clojure-mode. emacs -nw w iTerm + klawisze strzałek działają dobrze w innych głównych trybach. Jestem pewien, że robię coś głupiego, co to powoduje, chciałbym wiedzieć co.

+0

Co masz na myśli przez terminal emacs? emacs w terminalu? który emulator, jeśli tak? M-x description-key powie Ci, która funkcja używa danego wiązania (i powie ci, jakie emacs klawisza dostaje, w przypadku, gdy jest to problem z konwersją sygnału wejściowego). – noisesmith

+0

Patrząc na twój drugi post powyżej, wyobrażam sobie, że różnica może sprowadzać się do niezgodności między iterm a xterm. Spróbuj uruchomić emacs na ekranie lub tmux, przechwytują zdarzenia wejściowe i czasami są lepiej kompatybilne niż sam terminal. – noisesmith

+0

@ Wszystkie fajerwerki działają poprawnie w trybach innych niż '' clojure-mode'', '' clojure-mode'', '' Mx describe-key'' po prostu opisują pierwszy znaczący znak w sekwencji escape (zwykle [), więc problem jest specyficzny dla '' clojure-mode'' – sw1nn

Odpowiedz

1

Sprawdź swoje ustawienia w Iterm, dokładniej "Globalne klawisze skrótów". Te będą miały pierwszeństwo przed tym, co jest wysyłane do emacs. C-Shift-Arrow służy do przełączania zakładek w Iterm, jak sądzę, i może ingerować w emacs.

+0

@ sw1nn mówi, że jest to problem tylko w trybie clojure. Działa dobrze w innych trybach. – otfrom

2

Prawie identyczna konfiguracja tutaj, ale nie ma podobnego problemu. Oto co bym zrobił. Najpierw oceń następujący kod emacs-selp w buforze scratch.

(progn 
(define-key input-decode-map "\e[1;2D" [S-left]) 
(define-key input-decode-map (kbd "M-[ 1 ; 2 C") [S-right]) 
(define-key input-decode-map (kbd "M-[ 1 ; 2 B")[S-down]) 
(define-key input-decode-map "\e[1;2A" [S-up]) 
(define-key input-decode-map "\e[1;6A" [S-C-up]) 
(define-key input-decode-map "\e[1;6B" [S-C-down])) 

Spróbuj powiązania windmove, gdy tryb clojure jest włączony. Jeśli to rozwiązuje problem, a zakładając, że zmienna środowiskowa TERM jest ustawione na xterm-256color, umieścić następujące w init.el

(if (equal "xterm-256color" (tty-type)) 
(progn 
(define-key input-decode-map "\e[1;2D" [S-left]) 
(define-key input-decode-map (kbd "M-[ 1 ; 2 C") [S-right]) 
(define-key input-decode-map (kbd "M-[ 1 ; 2 B")[S-down]) 
(define-key input-decode-map "\e[1;2A" [S-up]) 
(define-key input-decode-map "\e[1;6A" [S-C-up]) 
(define-key input-decode-map "\e[1;6B" [S-C-down]))) 

nadzieję, że to pomaga.

Powiązane problemy