2012-06-03 35 views
6

Gần đây tôi đã giúp sửa chữa M-left và vv ở đây: emacs in terminal meta arrow keybindings, nhưng không thể sửa chữa Shift-up bằng cách sử dụng một giải pháp tương tự. Khi tôi thử shift-up tôi gặp lỗi <select> is undefined. Tôi đã thử ánh xạ lại nó bằng cách sử dụng:shift-mũi tên không làm nổi bật văn bản emacs iterm2

(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;2A" [S-up])                                     
(define-key function-key-map "\e[1;9D" [M-left]))) 

Nhưng thay đổi vẫn không xác định. Tôi cũng đã thử khôi phục khóa bằng cách đặt nó bằng cách sử dụng trình tự thoát được trả lại từ cat^[[1;2A. Oddly đủ thay đổi xuống không hoạt động. shift-select-mode cũng được đánh dấu ở t.

+0

Bạn có thêm thông tin về câu hỏi này không? Hay bạn đã giải quyết nó trong năm qua? – beaslera

Trả lời

9

Điều này nghe có vẻ rắc rối khi tôi truy cập máy Ubuntu 12.04 qua Putty, khi END gây ra Emacs 23.3.1 để nói <select> is undefined. Điều đó hóa ra là một vấn đề với terminfo cho phép các chương trình sử dụng thiết bị đầu cuối theo cách độc lập của thiết bị.

Dựa trên 2008 bug report discussion này, tôi giải quyết vấn đề của tôi bằng cách thêm dòng sau vào phía trên cùng của tôi ~/.bashrc:

#so the END key will work correctly in Emacs over PuTTY 
TERM=xterm-vt220 

NB, với một trong hai xterm-vt220 hoặc xterm mặc định, emacs -Q -nw là nhận ESC [ 4 ~ khi tôi nhấn END, ESC O A cho Lên và ESC [ A cho Shift-Up. (Để xem mã khóa nào Emacs đang nhận được, hãy nhấn một số nút và sau đó C-h,l.) Đối với các khóa giống nhau theo cùng một thứ tự, cat nói [4~, [A[OA ... do đó Up và Shift-up được đảo ngược kỳ quặc.


Nếu bạn không muốn thay đổi terminfo bạn, hãy xem thảo luận này cho một workaround http://lists.gnu.org/archive/html/help-gnu-emacs/2011-05/msg00211.html

Bạn sẽ có thể làm việc xung quanh vấn đề này với một cái gì đó như:

(define-key input-decode-map "\e[1;2A" [S-up])

Và để điều này có hiệu lực vào đúng thời điểm, bạn sẽ phải sử dụng trong .emacs của bạn như sau:

(if (equal "xterm" (tty-type)) (define-key input-decode-map "\e[1;2A" [S-up]))

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