diff options
author | Steven Allen <steven@stebalien.com> | 2019-10-05T23·28+0900 |
---|---|---|
committer | Steven Allen <steven@stebalien.com> | 2019-10-05T23·28+0900 |
commit | f14bd2a110af927293c23e8ff7aa1e2287120b0d (patch) | |
tree | a54feeeb561b898e4b83a4451b266c8ba1b1fac7 /exwm-input.el | |
parent | 1e9be0de384d0750277b350c77e5e4a5d8a8ae10 (diff) |
Set the current buffer before handling key events
There's no guarantee that the global current buffer matches the selected window's buffer. For example, the following will output "*Messages*" regardless of the actual current buffer: (progn (run-at "1 sec" nil (lambda () (with-current-buffer (get-buffer "*Messages*") (sit-for 5)))) (run-at "2 sec" nil (lambda () (message (buffer-name))))) * exwm-input.el (exwm-input--on-KeyPress): Set the current buffer to selected window's current buffer.
Diffstat (limited to 'exwm-input.el')
-rw-r--r-- | exwm-input.el | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/exwm-input.el b/exwm-input.el index 2d3b48189826..8cd54c69b848 100644 --- a/exwm-input.el +++ b/exwm-input.el @@ -441,18 +441,19 @@ ARGS are additional arguments to CALLBACK." (defun exwm-input--on-KeyPress (data _synthetic) "Handle KeyPress event." - (let ((obj (make-instance 'xcb:KeyPress))) - (xcb:unmarshal obj data) - (exwm--log "major-mode=%s buffer=%s" - major-mode (buffer-name (current-buffer))) - (if (derived-mode-p 'exwm-mode) - (cl-case exwm--input-mode - (line-mode - (exwm-input--on-KeyPress-line-mode obj data)) - (char-mode - (exwm-input--on-KeyPress-char-mode obj data))) - (exwm-input--on-KeyPress-char-mode obj))) - (run-hooks 'exwm-input--event-hook)) + (with-current-buffer (window-buffer (selected-window)) + (let ((obj (make-instance 'xcb:KeyPress))) + (xcb:unmarshal obj data) + (exwm--log "major-mode=%s buffer=%s" + major-mode (buffer-name (current-buffer))) + (if (derived-mode-p 'exwm-mode) + (cl-case exwm--input-mode + (line-mode + (exwm-input--on-KeyPress-line-mode obj data)) + (char-mode + (exwm-input--on-KeyPress-char-mode obj data))) + (exwm-input--on-KeyPress-char-mode obj))) + (run-hooks 'exwm-input--event-hook))) (defun exwm-input--on-CreateNotify (data _synthetic) "Handle CreateNotify events." |