Przyjęta odpowiedź w połączeniu z link in the first comment to it wystarczy, aby rozpocząć kompletne rozwiązanie. Kroki są:
- dokonać terminali kodów wyjścia ewakuacyjne na klucz
- zrobić Emacs rozpoznaje kody ucieczki jako standardowy naciśnięciem klawisza
- wiążą naciśnięcia klawisza w trybie mapy
Pierwszy jest bardzo terminalny i/lub zależy od systemu operacyjnego.
Łącze w pierwszym komentarzu pokazuje kilka przykładów dla X Window System. Kluczowe nazwy są dostępne w /usr/X11R6/include/X11/keysymdef.h
(lub spróbuj locate keysymdef.h
), z prefiksem XK_
(które powinny zostać usunięte do naszych celów).Czytałem, że symboliczne nazwy są preferowane w stosunku do literałów.
Nie mam aktualnie prowadzony X, ale myślę, że powinno to wyglądać w przypadku:
XTerm.VT100.Translations: #override \
Ctrl ~Meta ~Shift <Key> equal: string(0x1b) string("[emacs-C-=")\n
Pierwszy ciąg jest ucieczka, drugi jest od wybranego przez użytkownika.
W iTerm można użyć Preferences->Keys
i wybrać Send Escape Sequence
jako Action
. Na przykład mam:
Emacs Wiki lists some configuration methods dla innych terminali.
Teraz możesz nauczyć Emacsa rozpoznawania go jako C- =. Najpierw define-key
w input-decode-map
. Mam kilka funkcji pomocniczych:
(defun my/global-map-and-set-key (key command &optional prefix suffix)
"`my/map-key' KEY then `global-set-key' KEY with COMMAND.
PREFIX or SUFFIX can wrap the key when passing to `global-set-key'."
(my/map-key key)
(global-set-key (kbd (concat prefix key suffix)) command))
(defun my/map-key (key)
"Map KEY from escape sequence \"\e[emacs-KEY\."
(define-key function-key-map (concat "\e[emacs-" key) (kbd key)))
Więc:
(my/global-map-and-set-key "C-=" 'some-function-to-bind-to)
niektóre klawisze (aktualnie: ()\|;'`"#.,
) będzie potrzeba ucieczki w ciągu, jak C-\.
.
C-i jest zwykle tłumaczone jako 'TAB' w emacs. Więc nie dziwię się, że 'C-M-i' jest tłumaczone jako' M-TAB' – kindahero