mirror of
https://github.com/emacs-exwm/exwm.git
synced 2024-11-23 21:17:59 +01:00
Allow buffer-local simulation keys
* exwm-input.el (exwm-input-set-local-simulation-keys): New function for setting buffer-local simulation keys. (exwm-input--local-simulation-keys): New internal variable. (exwm-input--update-simulation-prefix-keys): Modify either `exwm-mode-map' or the local keymap accordingly.
This commit is contained in:
parent
38332925d0
commit
4a1b177bce
1 changed files with 16 additions and 1 deletions
|
@ -453,11 +453,16 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
|
||||||
;; (unless (listp last-input-event) ;not a key event
|
;; (unless (listp last-input-event) ;not a key event
|
||||||
;; (exwm-input--fake-key last-input-event)))
|
;; (exwm-input--fake-key last-input-event)))
|
||||||
|
|
||||||
|
(defvar exwm-input--local-simulation-keys nil
|
||||||
|
"Whether simulation keys are local.")
|
||||||
|
|
||||||
(defun exwm-input--update-simulation-prefix-keys ()
|
(defun exwm-input--update-simulation-prefix-keys ()
|
||||||
"Update the list of prefix keys of simulation keys."
|
"Update the list of prefix keys of simulation keys."
|
||||||
(setq exwm-input--simulation-prefix-keys nil)
|
(setq exwm-input--simulation-prefix-keys nil)
|
||||||
(dolist (i exwm-input--simulation-keys)
|
(dolist (i exwm-input--simulation-keys)
|
||||||
(define-key exwm-mode-map (car i) #'exwm-input-send-simulation-key)
|
(if exwm-input--local-simulation-keys
|
||||||
|
(local-set-key (car i) #'exwm-input-send-simulation-key)
|
||||||
|
(define-key exwm-mode-map (car i) #'exwm-input-send-simulation-key))
|
||||||
(cl-pushnew (elt (car i) 0) exwm-input--simulation-prefix-keys)))
|
(cl-pushnew (elt (car i) 0) exwm-input--simulation-prefix-keys)))
|
||||||
|
|
||||||
(defun exwm-input-set-simulation-keys (simulation-keys)
|
(defun exwm-input-set-simulation-keys (simulation-keys)
|
||||||
|
@ -469,6 +474,16 @@ SIMULATION-KEYS is an alist of the form (original-key . simulated-key)."
|
||||||
(cl-pushnew `(,(vconcat (car i)) . ,(cdr i)) exwm-input--simulation-keys))
|
(cl-pushnew `(,(vconcat (car i)) . ,(cdr i)) exwm-input--simulation-keys))
|
||||||
(exwm-input--update-simulation-prefix-keys))
|
(exwm-input--update-simulation-prefix-keys))
|
||||||
|
|
||||||
|
(defun exwm-input-set-local-simulation-keys (simulation-keys)
|
||||||
|
"Set buffer-local simulation keys.
|
||||||
|
|
||||||
|
Its usage is the same with `exwm-input-set-simulation-keys'."
|
||||||
|
(make-local-variable 'exwm-input--simulation-keys)
|
||||||
|
(make-local-variable 'exwm-input--simulation-prefix-keys)
|
||||||
|
(use-local-map (copy-keymap exwm-mode-map))
|
||||||
|
(let ((exwm-input--local-simulation-keys t))
|
||||||
|
(exwm-input-set-simulation-keys simulation-keys)))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun exwm-input-send-simulation-key (times)
|
(defun exwm-input-send-simulation-key (times)
|
||||||
"Fake a key event according to last input key sequence."
|
"Fake a key event according to last input key sequence."
|
||||||
|
|
Loading…
Reference in a new issue