mirror of
https://github.com/emacs-exwm/exwm.git
synced 2024-11-23 21:17:59 +01:00
Passthrough input when explicitly reading events and keys
When any of these functions are called, Emacs expects to receive all input events until they return. Unfortunately, there doesn't appear to be a reliable way to detect that these functions are currently running other than advising them. * exwm-input.el (exwm-input--init): Advise low-level input reading functions to bind 'exwm-input-line-mode-passthrough' to t when called. (exwm-input--exit): Unadvise. (exwm-input--call-with-passthrough): The advice. (exwm-input--passthrough-functions): The functions we now advise.
This commit is contained in:
parent
56db521a3e
commit
8ea607ba85
1 changed files with 18 additions and 1 deletions
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue