Shift + Up không được Emacs nhận ra trong một thiết bị đầu cuối


15

Tôi thường sử dụng Shift+ Up/Downđể chọn một vùng trong Emacs. Nó hoạt động tốt trong chế độ GUI, nhưng khi emacsđược gọi với -nwtùy chọn tôi chỉ có thể chọn các dòng bằng Shift+ Down. Các Shift+ Upkhông làm việc, tôi nhận được thông báo lỗi này trong minibuffer:

<select> is undefined

Làm thế nào tôi có thể giải quyết vấn đề này?

Câu trả lời:


13

Một thiết bị đầu cuối văn bản chỉ truyền các ký tự (chính xác hơn là byte), không phải các khóa. Các phím và móc khóa (các phím có sửa đổi) được mã hóa dưới dạng các chuỗi ký tự. Các khóa chèn các ký tự có thể in được gửi như chính chúng; Các phím chức năng được gửi dưới dạng các chuỗi thoát. Hầu hết các chuỗi thoát bao gồm ký tự Escape ( ?\etheo cú pháp Emacs) theo sau là hai hoặc nhiều ký tự có thể in được. Xem Điều khiển và phím lên / xuống trong thiết bị đầu cuối để sử dụng bởi emacscách nhập văn bản và đầu ra văn bản hoạt động như thế nào? để biết thêm thông tin.

Emacs có một cơ chế để dịch các chuỗi thoát thành khái niệm khóa riêng. Bảng dịch input-decode-mapđược khởi tạo khi Emacs khởi động (hay chính xác hơn là khi khung mới được mở: biến này có giá trị khác nhau trên mỗi thiết bị đầu cuối). Đôi khi Emacs không biết tất cả các chuỗi thoát được gửi bởi thiết bị đầu cuối.

Trong trường hợp của bạn, có vẻ như Emacs có cách hiểu sai cho chuỗi thoát được gửi bởi Shift+ Up. Bạn cần phải nói với nó để giải thích nó S-uphơn là select. Đầu tiên, hãy tìm ra chuỗi thoát là gì. Trong *scratch*bộ đệm, nhấn Ctrl+ Qrồi Shift+ Up. Lệnh C-qlàm cho ký tự tiếp theo, là ký tự thoát, được chèn theo nghĩa đen, tiếp theo là phần còn lại của chuỗi thoát. Giả sử Shift+ Upgửi \e[1;2Atrên hệ thống của chúng tôi, sau đó bạn sẽ cần xác định lại mục tương ứng trong input-mode-map:

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

Về nguyên tắc, input-decode-mapnên được đặt trên mỗi thiết bị đầu cuối. Trong thực tế, rất hiếm khi có hai thiết bị đầu cuối trong đó cùng một chuỗi thoát mã hóa các khóa khác nhau, do đó, một thiết lập toàn cầu sẽ hoạt động tốt.


Câu trả lời của bạn dường như trả lời câu hỏi của tôi ở đây - emacs.stackexchange.com/questions/33988 . Are the (define-key ...)các lệnh được cho là đi vào init.el? Có một ví dụ chi tiết ở đâu đó tôi có thể nhìn vào?
vfclists

Các define-keylệnh @vfclists đi vào tệp init của bạn. Đó có thể là ~/.emacs.d/init.elhoặc một vài địa điểm khác. Bạn sẽ tìm thấy nhiều ví dụ về việc sử dụng define-keybằng cách tìm kiếm define-key, nhưng tìm bản đồ nào để liên kết là một vấn đề khác. Một số bản đồ là có liên quan: global-map, input-decode-map, function-key-map, keyboard-translate-map. Tôi không biết cách trả lời câu hỏi của bạn vì tôi không biết Spacemacs. Tôi không khuyên bạn nên sử dụng các gói như Spacemacs xác định lại giao diện chuẩn một cách lộn xộn.
Gilles 'SO- ngừng trở nên xấu xa'

Tôi đã chuyển sang sử dụng emacs thông thường để học chế độ org và tôi đã xoay sở để làm việc input-decode-mapsau khi tìm thấy một số ví dụ. Tôi có thể lấy nó input-decode-mapáp dụng khi người dùng nhập văn bản vào bộ đệm không?
vfclists

@vfclists input-decode-maplà một trong những keymap được áp dụng. Xem hướng dẫn để biết chi tiết.
Gilles 'SO- ngừng trở nên xấu xa'

5

Trong emacs, vùng được phân định bởi điểm (con trỏ) và dấu (một số vị trí trước đó của con trỏ, đã được "đánh dấu").

Do đó, để "chọn một vùng", bạn cần đặt dấu đó, sau đó di chuyển điểm của bạn xung quanh.

Cách dễ nhất để đặt dấu là nhấn C-SPC. Sau đó, chỉ cần di chuyển con trỏ xung quanh, bạn sẽ thấy "vùng" mở rộng như bạn làm.

Để "bỏ chọn vùng", bạn có thể nhấn C-SPClại.

Vì "shift + Movement" là một liên kết phím phổ biến trong phần mềm khác, theo mặc định, nó mô phỏng hành vi "chọn vùng" này. Tuy nhiên, nó không hoạt động trong thiết bị đầu cuối, bởi vì sự thay đổi không thể được gửi đến emacs như là một phím bổ trợ.

Lưu ý rằng nhìn chung, C-SPCphương thức này mạnh hơn nhiều so với các phương pháp khác để chọn một khu vực: bạn không bị giới hạn trong việc lên / xuống / trái / phải để di chuyển (ví dụ: bạn có thể sử dụng tìm kiếm ...) và không yêu cầu rằng bạn duy trì một tổ hợp phím không thoải mái trong một thời gian dài.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.