Merge branch 'Stebalien.github.com/steb/passthrough-input' into externals/exwm

This commit is contained in:
Adrián Medraño Calvo 2024-01-08 00:00:00 +00:00
commit 01ae286e49

View file

@ -102,6 +102,13 @@ defined in `exwm-mode-map' here."
(defconst exwm-input--update-focus-interval 0.01 (defconst exwm-input--update-focus-interval 0.01
"Time interval (in seconds) for accumulating input focus update requests.") "Time interval (in seconds) for accumulating input focus update requests.")
(defconst exwm-input--passthrough-functions '(read-char
read-char-exclusive
read-key-sequence-vector
read-key-sequence
read-event)
"Low-level functions that read events and need to be exempted from EXWM's input handling.")
(defvar exwm-input--during-command nil (defvar exwm-input--during-command nil
"Indicate whether between `pre-command-hook' and `post-command-hook'.") "Indicate whether between `pre-command-hook' and `post-command-hook'.")
@ -1158,6 +1165,11 @@ One use is to access the keymap bound to KEYS (as prefix keys) in `char-mode'."
(exwm--log) (exwm--log)
(exwm-input--on-minibuffer-exit))) (exwm-input--on-minibuffer-exit)))
(defun exwm-input--call-with-passthrough (function &rest args)
"Bind `exwm-input-line-mode-passthrough' and call the specified FUNCTION with ARGS."
(let ((exwm-input-line-mode-passthrough t))
(apply function args)))
(defun exwm-input--init () (defun exwm-input--init ()
"Initialize the keyboard module." "Initialize the keyboard module."
(exwm--log) (exwm--log)
@ -1213,7 +1225,10 @@ One use is to access the keymap bound to KEYS (as prefix keys) in `char-mode'."
(run-with-idle-timer 0 t #'exwm-input--on-echo-area-dirty)) (run-with-idle-timer 0 t #'exwm-input--on-echo-area-dirty))
(add-hook 'echo-area-clear-hook #'exwm-input--on-echo-area-clear) (add-hook 'echo-area-clear-hook #'exwm-input--on-echo-area-clear)
;; Update focus when buffer list updates ;; Update focus when buffer list updates
(add-hook 'buffer-list-update-hook #'exwm-input--on-buffer-list-update)) (add-hook 'buffer-list-update-hook #'exwm-input--on-buffer-list-update)
(dolist (fun exwm-input--passthrough-functions)
(advice-add fun :around #'exwm-input--call-with-passthrough)))
(defun exwm-input--post-init () (defun exwm-input--post-init ()
"The second stage in the initialization of the input module." "The second stage in the initialization of the input module."
@ -1223,6 +1238,8 @@ One use is to access the keymap bound to KEYS (as prefix keys) in `char-mode'."
(defun exwm-input--exit () (defun exwm-input--exit ()
"Exit the input module." "Exit the input module."
(exwm--log) (exwm--log)
(dolist (fun exwm-input--passthrough-functions)
(advice-remove fun #'exwm-input--call-with-passthrough))
(exwm-input--unset-simulation-keys) (exwm-input--unset-simulation-keys)
(remove-hook 'pre-command-hook #'exwm-input--on-pre-command) (remove-hook 'pre-command-hook #'exwm-input--on-pre-command)
(remove-hook 'post-command-hook #'exwm-input--on-post-command) (remove-hook 'post-command-hook #'exwm-input--on-post-command)