2013-12-08 17 views
9

Nếu tôi chạy emacs trong một thiết bị đầu cuối (tức là bắt đầu emacs trong iTerm2 với emacs -nw) sử dụng windmove và nó ràng buộc mặc định, tôi sẽ có thể di chuyển giữa các cửa sổ sử dụng kết hợp khác nhau của Shift + , Cũng paredit đã gán rằng liên quan đến Ctrl/Meta + , tất cả đều hoạt động tốt trong (nói) một bộ đệm chế độ elisp.Tại sao Shift + mũi tên không hoạt động trong chế độ clojure trong thiết bị đầu cuối emacs?

Hình như các chức năng phím mũi tên dựa vào emacs giải mã trình tự terminal thoát, qua (tôi nghĩ) các input-decode-map

Tuy nhiên, nếu tôi đặt chế độ lớn như clojure-mode thì giải mã chuỗi thoát dường như bị vô hiệu hóa (hoặc ghi đè). Khi tôi thực hiện những ràng buộc đó, tôi chỉ nhận được chuỗi thoát.

Điều gì đang xảy ra với các ràng buộc trong clojure-mode?

phiên bản:

  • emacs 24.3.1 (đã cố gắng phiên bản maxosxforemacs.com và homebrew)
  • clojure-mode 20131117,2306 (đã cố gắng phiên bản khác)
  • OSX 10.8.5
  • iTerm2 1.0.0.20131124

(từ chối trách nhiệm: I raised this as an issue on clojure-mode, but no solution is forthcoming)

CẬP NHẬT 2013/12/10: Để hoàn toàn rõ ràng: vấn đề này là cụ thể đối với clojure-mode. emacs -nw trong iTerm + phím mũi tên hoạt động tốt ở các chế độ chính khác. Tôi chắc chắn rằng tôi đang làm điều gì đó ngớ ngẩn đang gây ra điều này, tôi muốn biết những gì.

+0

Bạn có ý nghĩa gì với thiết bị đầu cuối emacs? emacs trong một thiết bị đầu cuối? mà giả lập nếu như vậy? M-x mô tả-key sẽ cho bạn biết những gì chức năng đang sử dụng một ràng buộc nhất định (và sẽ cho bạn biết những gì emacs nhấn phím là nhận được, trong trường hợp nó là một vấn đề mất mát chuyển đổi đầu vào). – noisesmith

+0

Nhìn vào bài viết khác của bạn ở trên, tôi tưởng tượng sự khác biệt có thể đi xuống đến không tương thích giữa iterm và xterm. Hãy thử chạy các emacs bên trong màn hình hoặc tmux, chúng chặn các sự kiện đầu vào và đôi khi tốt hơn khi tương thích với chính thiết bị đầu cuối. – noisesmith

+0

@noisesmith tất cả mọi thứ hoạt động tốt trong các chế độ khác '' chế độ clojure'', trong 'chế độ clojure'',' 'Mx mô tả-key'' chỉ mô tả ký tự đầu tiên có ý nghĩa trong chuỗi thoát (thường là [), do đó, vấn đề là một cái gì đó cụ thể để '' chế độ clojure'' – sw1nn

Trả lời

1

Kiểm tra cài đặt của bạn trong Iterm, cụ thể hơn là "Phím tắt chung". Những người sẽ được ưu tiên hơn những gì được gửi đến emacs. C-Shift-Arrow được sử dụng để chuyển đổi các tab trong Iterm mà tôi tin và có thể ảnh hưởng đến các emacs.

+0

@ sw1nn nói rằng nó chỉ là một vấn đề trong chế độ clojure. Nó hoạt động tốt trong các chế độ khác. – otfrom

2

Thiết lập gần như giống nhau ở đây, nhưng không có vấn đề tương tự. Đây là những gì tôi sẽ làm anyway. Đầu tiên, đánh giá mã emacs-lisp sau trong bộ đệm đầu.

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

Hãy thử kết buộc gió khi chế độ clojure được kích hoạt. Nếu đây sửa chữa vấn đề của bạn, và giả sử biến môi trường TERM của bạn được thiết lập để xterm-256color, đặt sau đây trong 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]))) 

Hope của bạn này sẽ giúp.

Các vấn đề liên quan