Support key translation in line-mode

* exwm-input.el (exwm-input--translate): New function for translating
keys according to `input-decode-map', `local-function-key-map' and
`key-translation-map'.
(exwm-input--cache-event): Use it.
This commit is contained in:
Chris Feng 2018-01-14 23:48:29 +08:00
parent 895633fe61
commit 6b4bfad87b

View file

@ -471,10 +471,25 @@ This value should always be overwritten.")
(defvar exwm-input--temp-line-mode nil (defvar exwm-input--temp-line-mode nil
"Non-nil indicates it's in temporary line-mode for char-mode.") "Non-nil indicates it's in temporary line-mode for char-mode.")
(cl-defun exwm-input--translate (key)
(let (translation)
(dolist (map (list input-decode-map
local-function-key-map
key-translation-map))
(setq translation (lookup-key map key))
(if (functionp translation)
(cl-return-from exwm-input--translate (funcall translation nil))
(when (vectorp translation)
(cl-return-from exwm-input--translate translation)))))
key)
(defun exwm-input--cache-event (event) (defun exwm-input--cache-event (event)
"Cache EVENT." "Cache EVENT."
(setq exwm-input--line-mode-cache (setq exwm-input--line-mode-cache
(vconcat exwm-input--line-mode-cache (vector event))) (vconcat exwm-input--line-mode-cache (vector event)))
;; Attempt to translate this key sequence.
(setq exwm-input--line-mode-cache
(exwm-input--translate exwm-input--line-mode-cache))
;; When the key sequence is complete. ;; When the key sequence is complete.
(unless (keymapp (key-binding exwm-input--line-mode-cache)) (unless (keymapp (key-binding exwm-input--line-mode-cache))
(setq exwm-input--line-mode-cache nil) (setq exwm-input--line-mode-cache nil)