From 6b4bfad87bdf8b4cf13cdfb211ae6c8c24c415ff Mon Sep 17 00:00:00 2001 From: Chris Feng Date: Sun, 14 Jan 2018 23:48:29 +0800 Subject: [PATCH] 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. --- exwm-input.el | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/exwm-input.el b/exwm-input.el index 38fd751af..54d0540e4 100644 --- a/exwm-input.el +++ b/exwm-input.el @@ -471,10 +471,25 @@ This value should always be overwritten.") (defvar exwm-input--temp-line-mode nil "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) "Cache EVENT." (setq exwm-input--line-mode-cache (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. (unless (keymapp (key-binding exwm-input--line-mode-cache)) (setq exwm-input--line-mode-cache nil)