Sử dụng Super trong emacs -nw trong linux


15

Tôi đã phải vật lộn để tìm một câu hỏi đơn giản và trực tiếp cho câu trả lời và do đó tôi đã quyết định hỏi ở đây.

H: Có cách nào để sử dụng Super in Emacs được khởi chạy trong Terminal trong Linux không?

PS : Tôi đã đọc rất nhiều thông tin về xmodmapnhưng tôi nghĩ chìa khóa là trình giả lập thiết bị đầu cuối không thể đại diện cho Super key. Tuy nhiên, (kbd "s-SPC")trả lại một cái gì đó và tôi đã nghĩ đến việc sử dụng cơ sở dịch thuật của .Xdefaults/X. Tôi có đang đi đúng hướng không? Đưa ra kết quả kbd, tôi cần đặt cái gì là XTerm.VT100.translations?

Câu trả lời:


21

Bạn sẽ thấy thoải mái hơn trong X11 Emacs, có thể nhận đầu vào bàn phím và hiển thị văn bản mà không cần thông qua mã hóa và giải mã cho thiết bị đầu cuối . Lý do chính để sử dụng trình chỉnh sửa chế độ văn bản là để chạy nó trong màn hình hoặc tmux trên máy từ xa, nhưng nhờ Tramp, việc chỉnh sửa tệp từ xa trong Emacs cục bộ của bạn thường dễ dàng hơn. Điều đó đang được nói, bạn có thể làm những gì bạn muốn miễn là trình giả lập thiết bị đầu cuối của bạn hợp tác, đó là trường hợp với Xterm.

Khi bạn nhấn một phím hoặc tổ hợp phím trong một thiết bị đầu cuối, nó được truyền đến ứng dụng đang chạy trong thiết bị đầu cuối dưới dạng một chuỗi gồm một hoặc nhiều ký tự. Ví dụ, khi bạn nhấn a, ứng dụng sẽ nhận được a. Khi bạn nhấn Enter, ứng dụng sẽ nhận được ký tự CR(còn gọi là ^M(phát âm là control control-emmiêu), hay còn gọi là ký tự số 13, aka \rhay \015). Các tổ hợp phím liên quan Altthường được truyền dưới dạng ký tự ESC(a.ka. ^[aka \ehoặc \033) theo sau là chuỗi cho tổ hợp phím hoặc khóa không có Alt. Các phím chức năng và các tổ hợp phím khác được truyền dưới dạng các chuỗi thoát bắt đầu bằng \e[hoặc \eO.

Các chuỗi thoát không được chuẩn hóa hoàn toàn và các thiết bị đầu cuối thường bỏ qua các thuộc tính nhất định cho các khóa nhất định. Ví dụ, siêu sửa đổi và siêu sửa đổi thường bị bỏ qua. Bạn có thể thấy những gì thiết bị đầu cuối của bạn gửi cho một tổ hợp phím bằng cách nhấn Ctrl+ Vtheo sau là tổ hợp phím đó trong dấu nhắc shell hoặc C-qhoặc C-h ctheo sau là tổ hợp phím trong Emacs.

Xterm phép bạn cấu hình các trình tự thoát cho mỗi phím thông qua các nguồn tài nguyên X . Hầu hết các thiết lập đọc tài nguyên từ ~/.Xresourceskhi X bắt đầu và bạn có thể tải tệp theo cách thủ công xrdb -merge ~/.Xresources.

XTerm.VT100.translations:       #override \n\
    Ctrl ~Shift ~Meta <Key> Return: string("\033[73;5~") \n\
    Ctrl Shift ~Meta <Key> percent: string("\033[37;6~")

Một quy ước chung sử dụng các chuỗi thoát của biểu mẫu ESC [ number1 ; number2 ~cho các phím chức năng với các sửa đổi. number1chỉ ra phím chức năng ( 15để 24cho F5tới F12- vì những lý do lịch sử, F1 qua F4có trình tự thoát khác nhau) và number2chỉ ra các sửa đổi ( 2cho Shift, 5cho Ctrl, 3cho Meta, 8cho Ctrl+ Meta, và thêm 1 + Shift- không có, nó không phải là rất phù hợp).

Bạn sẽ phải chỉ định các sửa đổi Hyper và Super thông qua số lượng của chúng, như Mod1thông qua Mod5. Chạy xmodmap -pmđể xem ánh xạ của keyyms đến modifier. Ví dụ: nếu Super_Lbị ràng buộc với Mod5, thì dòng sau (sử dụng trường hợp chính xác này) xác định ràng buộc cho Super+ Space:

    ~Ctrl ~Meta Mod5 <Key> space: string("\033[32;16~") \n\

Emacs chuyển các chuỗi thoát thành biểu diễn khóa bên trong của nó thông qua input-decode-maphoặclocal-function-key-map (hoặc function-key-maptrước Emacs 23).

(define-key local-function-key-map "\033[32;16~" [(super ?\ )])

Bài đăng này được làm bằng 80% vật liệu tái chế từ Có thiết bị đầu cuối linux nào có thể xử lý tất cả các kết hợp chính không?


Đây là một câu trả lời tuyệt vời, bao gồm tất cả các kiến ​​thức tôi tìm thấy một chút rải rác xung quanh. Chỉ một câu hỏi: bạn đã tìm thấy ở đâu / làm thế nào bạn chọn 32; 16 ~ và tại sao nó không phù hợp với ràng buộc emacs dưới đây? Tôi hiểu nguồn gốc của những con số nhưng tôi muốn hỏi bạn xem bạn có thể liên kết đến một nơi nào đó bảng vẽ bản đồ cho number1number2 .
Andrea Richiardi

@AndreaRichiardi Tôi đã chọn 32 vì đó là giá trị ASCII / Unicode cho ký tự khoảng trắng và 16 vì các ràng buộc tiêu chuẩn sử dụng các giá trị lên tới 8 cho Ctrl, Meta và Shift. 33 dưới đây là một lỗi đánh máy. Bạn có thể chọn bất cứ thứ gì miễn là nó không xung đột với các phím khác.
Gilles 'SO- ngừng trở nên xấu xa'

Tôi đã phải liên kết chuỗi với một chức năng để tôi giải quyết trong giây lát (global-set-key "\033[32;16~" 'set-rectangular-region-anchor). Nhưng để hoàn thành, tôi đã thử define-keyở trên, nhưng sau đó tôi không thể kích hoạt (global-set-key (kbd "s-SPC") 'set-rectangular-region-anchor). Nó chỉ in, 16 ~ trong bộ đệm. Sẽ rất tốt nếu liên kết chuỗi đó với (kbd "s-SPC") để tôi có chuỗi khóa bị ràng buộc và tôi có thể gán lại nó cho các lệnh khác.
Andrea Richiardi

C-h ltrả lại những điều sau khi nhấn s-SPC ngay bây giờ: ESC [ 3 2 ; 1 6 ~nhưng emacs vẫn phàn nàn rằngM-[ 32 is undefined
Andrea Richiardi

@AndreaRichiardi Sau khi sửa nhiều lỗi chính tả hơn trong phần xterm (mà bạn dường như đã sửa từ khi Emacs nhận được chuỗi ký tự dự định), nó hoạt động với tôi. Nó có hoạt động nếu bạn sử dụng function-key-mapthay vì local-function-key-map? Nó có thể là vấn đề khi bạn đặt local-function-key-map, vì nó phụ thuộc vào thiết bị đầu cuối.
Gilles 'SO- ngừng trở nên xấu xa'

0

Nếu bạn sẵn sàng cài đặt gói Emacs và định cấu hình thiết bị đầu cuối của mình, tôi đã viết gói Emacs có thể dạy Emacs và thiết bị đầu cuối cách nhận biết chính xác tất cả các phím bàn phím PC và tổ hợp phím bổ trợ:

https://github.com/CyberShadow/term-keys

Mã hóa siêu sửa đổi không được bật theo mặc định, nhưng gói có thể tùy chỉnh và cho phép định cấu hình tổ hợp phím sửa đổi nào được mã hóa. Để bật các tổ hợp khóa mã hóa bao gồm Siêu sửa đổi, hãy đặt term-keys/want-key-p-functhành một hàm trả về tkhi (elt mods 3)không phải là số không (xem phần triển khai mặc định để được giải thích).


0

Tôi có những điều sau đây trong tập tin init của mình:

(global-set-key [f7] nil)
(global-set-key [f8] nil)
(define-key function-key-map [(f7)] 'event-apply-super-modifier)
(define-key function-key-map [(f8)] 'event-apply-hyper-modifier)

Điều này cho phép tôi gửi các phím siêu và siêu bằng các phím chức năng.


-1

Câu trả lời ngắn gọn: sử dụng Konsole.

Giải trình:

  • Emacs' local-function-key-mapcó một bản đồ nhập C-x @ sđể event-apply-super-modifier.
  • Konsoleánh xạ Super(phím logo Windows) theo trình tự thoát ^X@s(dường như không được ghi lại ở bất cứ đâu, tôi tình cờ phát hiện ra nó). Bạn có thể thử điều này bằng cách mở Konsolevà nhấn ví dụ Ctrl-v Win-o.

Cảm ơn câu trả lời nhưng thay đổi thuật ngữ không phải là giải pháp tôi đang tìm kiếm.
Andrea Richiardi
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.