subtree(3p/exwm): bump exwm to upstream commit '56db521a'
This bumps us past EXWM 0.28, which has several major fixes. Change-Id: Ie89997cc5d60f4e5aaedfe60368571420b7e4b9d
This commit is contained in:
commit
5f53841a34
13 changed files with 453 additions and 307 deletions
74
third_party/exwm/exwm-input.el
vendored
74
third_party/exwm/exwm-input.el
vendored
|
|
@ -1,6 +1,6 @@
|
|||
;;; exwm-input.el --- Input Module for EXWM -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2015-2021 Free Software Foundation, Inc.
|
||||
;; Copyright (C) 2015-2023 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Chris Feng <chris.w.feng@gmail.com>
|
||||
|
||||
|
|
@ -45,9 +45,9 @@
|
|||
|
||||
(defcustom exwm-input-prefix-keys
|
||||
'(?\C-x ?\C-u ?\C-h ?\M-x ?\M-` ?\M-& ?\M-:)
|
||||
"List of prefix keys EXWM should forward to Emacs when in line-mode.
|
||||
"List of prefix keys EXWM should forward to Emacs when in `line-mode'.
|
||||
|
||||
The point is to make keys like 'C-x C-f' forwarded to Emacs in line-mode.
|
||||
The point is to make keys like 'C-x C-f' forwarded to Emacs in `line-mode'.
|
||||
There is no need to add prefix keys for global/simulation keys or those
|
||||
defined in `exwm-mode-map' here."
|
||||
:type '(repeat key-sequence)
|
||||
|
|
@ -87,7 +87,7 @@ defined in `exwm-mode-map' here."
|
|||
value))))
|
||||
|
||||
(defcustom exwm-input-line-mode-passthrough nil
|
||||
"Non-nil makes 'line-mode' forward all events to Emacs."
|
||||
"Non-nil makes `line-mode' forward all events to Emacs."
|
||||
:type 'boolean)
|
||||
|
||||
;; Input focus update requests should be accumulated for a short time
|
||||
|
|
@ -115,13 +115,13 @@ defined in `exwm-mode-map' here."
|
|||
(defvar exwm-input--local-simulation-keys nil
|
||||
"Whether simulation keys are local.")
|
||||
|
||||
(defvar exwm-input--simulation-keys nil "Simulation keys in line-mode.")
|
||||
(defvar exwm-input--simulation-keys nil "Simulation keys in `line-mode'.")
|
||||
|
||||
(defvar exwm-input--skip-buffer-list-update nil
|
||||
"Skip the upcoming 'buffer-list-update'.")
|
||||
"Skip the upcoming `buffer-list-update'.")
|
||||
|
||||
(defvar exwm-input--temp-line-mode nil
|
||||
"Non-nil indicates it's in temporary line-mode for char-mode.")
|
||||
"Non-nil indicates it's in temporary line-mode for `char-mode'.")
|
||||
|
||||
(defvar exwm-input--timestamp-atom nil)
|
||||
|
||||
|
|
@ -452,9 +452,12 @@ ARGS are additional arguments to CALLBACK."
|
|||
(t
|
||||
;; Replay this event by default.
|
||||
(setq fake-last-command t)
|
||||
(setq mode xcb:Allow:ReplayPointer))))
|
||||
(when fake-last-command
|
||||
(exwm-input--fake-last-command))
|
||||
(setq mode xcb:Allow:ReplayPointer)))
|
||||
(when fake-last-command
|
||||
(if buffer
|
||||
(with-current-buffer buffer
|
||||
(exwm-input--fake-last-command))
|
||||
(exwm-input--fake-last-command))))
|
||||
(xcb:+request exwm--connection
|
||||
(make-instance 'xcb:AllowEvents :mode mode :time xcb:Time:CurrentTime))
|
||||
(xcb:flush exwm--connection))
|
||||
|
|
@ -584,9 +587,11 @@ instead."
|
|||
(and (= emacs-major-version 26)
|
||||
(< emacs-minor-version 2)))
|
||||
(defsubst exwm-input--unread-event (event)
|
||||
(declare (indent defun))
|
||||
(setq unread-command-events
|
||||
(append unread-command-events (list event))))
|
||||
(defsubst exwm-input--unread-event (event)
|
||||
(declare (indent defun))
|
||||
(setq unread-command-events
|
||||
(append unread-command-events `((t . ,event)))))))
|
||||
|
||||
|
|
@ -663,8 +668,26 @@ Current buffer must be an `exwm-mode' buffer."
|
|||
(defun exwm-input--fake-last-command ()
|
||||
"Fool some packages into thinking there is a change in the buffer."
|
||||
(setq last-command #'exwm-input--noop)
|
||||
(run-hooks 'pre-command-hook)
|
||||
(run-hooks 'post-command-hook))
|
||||
;; The Emacs manual says:
|
||||
;; > Quitting is suppressed while running pre-command-hook and
|
||||
;; > post-command-hook. If an error happens while executing one of these
|
||||
;; > hooks, it does not terminate execution of the hook; instead the error is
|
||||
;; > silenced and the function in which the error occurred is removed from the
|
||||
;; > hook.
|
||||
;; We supress errors but neither continue execution nor we remove from the
|
||||
;; hook.
|
||||
(condition-case err
|
||||
(run-hooks 'pre-command-hook)
|
||||
((error)
|
||||
(exwm--log "Error occurred while running pre-command-hook: %s"
|
||||
(error-message-string err))
|
||||
(xcb-debug:backtrace)))
|
||||
(condition-case err
|
||||
(run-hooks 'post-command-hook)
|
||||
((error)
|
||||
(exwm--log "Error occurred while running post-command-hook: %s"
|
||||
(error-message-string err))
|
||||
(xcb-debug:backtrace))))
|
||||
|
||||
(defun exwm-input--on-KeyPress-line-mode (key-press raw-data)
|
||||
"Parse X KeyPress event to Emacs key event and then feed the command loop."
|
||||
|
|
@ -708,7 +731,7 @@ Current buffer must be an `exwm-mode' buffer."
|
|||
(xcb:flush exwm--connection))))
|
||||
|
||||
(defun exwm-input--on-KeyPress-char-mode (key-press &optional _raw-data)
|
||||
"Handle KeyPress event in char-mode."
|
||||
"Handle KeyPress event in `char-mode'."
|
||||
(with-slots (detail state) key-press
|
||||
(let ((keysym (xcb:keysyms:keycode->keysym exwm--connection detail state))
|
||||
event raw-event)
|
||||
|
|
@ -749,7 +772,7 @@ button event."
|
|||
xcb:Allow:ReplayPointer))))
|
||||
|
||||
(defun exwm-input--on-ButtonPress-char-mode ()
|
||||
"Handle button events in char-mode.
|
||||
"Handle button events in `char-mode'.
|
||||
The return value is used as event_mode to release the original
|
||||
button event."
|
||||
(exwm--log)
|
||||
|
|
@ -825,7 +848,7 @@ button event."
|
|||
|
||||
;;;###autoload
|
||||
(defun exwm-input-grab-keyboard (&optional id)
|
||||
"Switch to line-mode."
|
||||
"Switch to `line-mode'."
|
||||
(interactive (list (when (derived-mode-p 'exwm-mode)
|
||||
(exwm--buffer->id (window-buffer)))))
|
||||
(when id
|
||||
|
|
@ -836,7 +859,7 @@ button event."
|
|||
|
||||
;;;###autoload
|
||||
(defun exwm-input-release-keyboard (&optional id)
|
||||
"Switch to char-mode."
|
||||
"Switch to `char-mode`."
|
||||
(interactive (list (when (derived-mode-p 'exwm-mode)
|
||||
(exwm--buffer->id (window-buffer)))))
|
||||
(when id
|
||||
|
|
@ -847,7 +870,7 @@ button event."
|
|||
|
||||
;;;###autoload
|
||||
(defun exwm-input-toggle-keyboard (&optional id)
|
||||
"Toggle between 'line-mode' and 'char-mode'."
|
||||
"Toggle between `line-mode' and `char-mode'."
|
||||
(interactive (list (when (derived-mode-p 'exwm-mode)
|
||||
(exwm--buffer->id (window-buffer)))))
|
||||
(when id
|
||||
|
|
@ -964,7 +987,7 @@ multiple keys. If END-KEY is non-nil, stop sending keys if it's pressed."
|
|||
|
||||
It is an alist of the form (original-key . simulated-key), where both
|
||||
original-key and simulated-key are key sequences. Original-key is what you
|
||||
type to an X window in line-mode which then gets translated to simulated-key
|
||||
type to an X window in `line-mode' which then gets translated to simulated-key
|
||||
by EXWM and forwarded to the X window.
|
||||
|
||||
Notes:
|
||||
|
|
@ -1075,7 +1098,7 @@ where both ORIGINAL-KEY and SIMULATED-KEY are key sequences."
|
|||
(defmacro exwm-input-invoke-factory (keys)
|
||||
"Make a command that invokes KEYS when called.
|
||||
|
||||
One use is to access the keymap bound to KEYS (as prefix keys) in char-mode."
|
||||
One use is to access the keymap bound to KEYS (as prefix keys) in `char-mode'."
|
||||
(let* ((keys (kbd keys))
|
||||
(description (key-description keys)))
|
||||
`(defun ,(intern (concat "exwm-input--invoke--" description)) ()
|
||||
|
|
@ -1215,12 +1238,13 @@ One use is to access the keymap bound to KEYS (as prefix keys) in char-mode."
|
|||
(when exwm-input--update-focus-timer
|
||||
(cancel-timer exwm-input--update-focus-timer))
|
||||
;; Make input focus working even without a WM.
|
||||
(xcb:+request exwm--connection
|
||||
(make-instance 'xcb:SetInputFocus
|
||||
:revert-to xcb:InputFocus:PointerRoot
|
||||
:focus exwm--root
|
||||
:time xcb:Time:CurrentTime))
|
||||
(xcb:flush exwm--connection))
|
||||
(when (slot-value exwm--connection 'connected)
|
||||
(xcb:+request exwm--connection
|
||||
(make-instance 'xcb:SetInputFocus
|
||||
:revert-to xcb:InputFocus:PointerRoot
|
||||
:focus exwm--root
|
||||
:time xcb:Time:CurrentTime))
|
||||
(xcb:flush exwm--connection)))
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue