Allow certain commands to receive key events in line-mode

* exwm-input.el (exwm-input-command-whitelist): New variable.
  (exwm-input--on-KeyPress-line-mode): Allow certain commands which receive
  inputs without using the minibuffer to work in line-mode.
This commit is contained in:
Chris Feng 2015-10-17 11:02:32 +08:00
parent 46461d994b
commit e70c6fad56

View file

@ -270,6 +270,13 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
(global-set-key key command) (global-set-key key command)
(cl-pushnew key exwm-input--global-keys)) (cl-pushnew key exwm-input--global-keys))
;; These commands usually call something like `read-char' without using the
;; minibuffer, so they will not get inputs after invoked. It'd be better if we
;; can determine whether there's a command waiting for input so that this
;; variable can be removed.
(defvar exwm-input-command-whitelist nil
"A list of commands that when active all keys should be forwarded to Emacs.")
;;;###autoload ;;;###autoload
(defun exwm-input--on-KeyPress-line-mode (key-press) (defun exwm-input--on-KeyPress-line-mode (key-press)
"Parse X KeyPress event to Emacs key event and then feed the command loop." "Parse X KeyPress event to Emacs key event and then feed the command loop."
@ -280,6 +287,7 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
(setq event (xcb:keysyms:keysym->event keysym state)) (setq event (xcb:keysyms:keysym->event keysym state))
(or exwm-input--during-key-sequence (or exwm-input--during-key-sequence
(setq minibuffer-window (active-minibuffer-window)) (setq minibuffer-window (active-minibuffer-window))
(memq real-this-command exwm-input-command-whitelist)
(memq event exwm-input--global-prefix-keys) (memq event exwm-input--global-prefix-keys)
(memq event exwm-input-prefix-keys) (memq event exwm-input-prefix-keys)
(memq event exwm-input--simulation-prefix-keys))) (memq event exwm-input--simulation-prefix-keys)))