Added option to have a key that ends exwm-input-send-next-key

* exwm-input.el (exwm-input-send-next-key): Accept an optional end key.
This commit is contained in:
Sebastian Wålinder 2019-06-30 18:21:24 +02:00 committed by Chris Feng
parent fe8ee3c578
commit 0a3dde042a

View file

@ -845,11 +845,11 @@ button event."
(xcb:flush exwm--connection))) (xcb:flush exwm--connection)))
;;;###autoload ;;;###autoload
(cl-defun exwm-input-send-next-key (times) (cl-defun exwm-input-send-next-key (times &optional end-key)
"Send next key to client window. "Send next key to client window.
EXWM will prompt for the key to send. This command can be prefixed to send EXWM will prompt for the key to send. This command can be prefixed to send
multiple keys." multiple keys. If END-KEY is non-nil, stop sending keys if it's pressed."
(interactive "p") (interactive "p")
(exwm--log) (exwm--log)
(unless (derived-mode-p 'exwm-mode) (unless (derived-mode-p 'exwm-mode)
@ -861,11 +861,17 @@ multiple keys."
(let ((exwm-input-line-mode-passthrough t)) (let ((exwm-input-line-mode-passthrough t))
(catch 'break (catch 'break
(while t (while t
(setq key (read-key (format "Send key: %s (%d/%d)" (setq key (read-key (format "Send key: %s (%d/%d) %s"
(key-description keys) (key-description keys)
(1+ i) times))) (1+ i) times
(if end-key
(concat "To exit, press: "
(key-description
(list end-key)))
""))))
(unless (listp key) (throw 'break nil))))) (unless (listp key) (throw 'break nil)))))
(setq keys (vconcat keys (vector key))) (setq keys (vconcat keys (vector key)))
(when (eq key end-key) (cl-return-from exwm-input-send-next-key))
(exwm-input--fake-key key)))) (exwm-input--fake-key key))))
(defun exwm-input--set-simulation-keys (simulation-keys &optional no-refresh) (defun exwm-input--set-simulation-keys (simulation-keys &optional no-refresh)