Fix a `unread-command-events' issue for Emacs 24

* exwm-input.el (exwm-input--unread-event)
(exwm-input--on-KeyPress-line-mode): Use `unread-command-events'
differently on Emacs 24 and 25.
This commit is contained in:
Chris Feng 2016-07-15 08:11:33 +08:00
parent 39dc328157
commit 0b8a373e4f

View file

@ -287,6 +287,19 @@ 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))
;; FIXME: Putting (t . EVENT) into `unread-command-events' does not really work
;; as documented in Emacs 24. Since inserting a conventional EVENT does
;; add it into (this-command-keys) there, we use `unread-command-events'
;; differently on Emacs 24 and 25.
(eval-and-compile
(if (< emacs-major-version 25)
(defsubst exwm-input--unread-event (event)
(setq unread-command-events
(append unread-command-events (list event))))
(defsubst exwm-input--unread-event (event)
(setq unread-command-events
(append unread-command-events `((t . ,event)))))))
(defvar exwm-input-command-whitelist nil (defvar exwm-input-command-whitelist nil
"A list of commands that when active all keys should be forwarded to Emacs.") "A list of commands that when active all keys should be forwarded to Emacs.")
(make-obsolete-variable 'exwm-input-command-whitelist (make-obsolete-variable 'exwm-input-command-whitelist
@ -313,8 +326,7 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
(unless minibuffer-window (setq exwm-input--during-key-sequence t)) (unless minibuffer-window (setq exwm-input--during-key-sequence t))
;; Feed this event to command loop. Also force it to be added to ;; Feed this event to command loop. Also force it to be added to
;; `this-command-keys'. ;; `this-command-keys'.
(setq unread-command-events (exwm-input--unread-event event))
(append unread-command-events `((t . ,event)))))
(xcb:+request exwm--connection (xcb:+request exwm--connection
(make-instance 'xcb:AllowEvents (make-instance 'xcb:AllowEvents
:mode (or mode xcb:Allow:ReplayKeyboard) :mode (or mode xcb:Allow:ReplayKeyboard)