From 3fc0cb2bf7e97a525862e95052aaffca70b2089e Mon Sep 17 00:00:00 2001 From: Chris Feng Date: Wed, 5 Aug 2015 14:10:44 +0800 Subject: [PATCH] Various fixes * Prevent marking the end of a key sequence with a single `C-u'. * Enable `C-u' prefix for key simulation since it's not possible for users to define simulation keys starting with `C-u'. * Make Emacs idle only after the visual parts are updated to prevent from disturbing users. * Should use '?\s' instead of '? '. --- exwm-input.el | 21 ++++++++++++--------- exwm-workspace.el | 4 ++-- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/exwm-input.el b/exwm-input.el index e185b1a..6d72cc2 100644 --- a/exwm-input.el +++ b/exwm-input.el @@ -108,10 +108,12 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.") (defun exwm-input--finish-key-sequence () "Mark the end of a key sequence (with the aid of `pre-command-hook')." - (setq exwm-input--during-key-sequence nil) - (when exwm-input--temp-line-mode - (setq exwm-input--temp-line-mode nil) - (exwm-input--release-keyboard))) + (when (and exwm-input--during-key-sequence + (not (equal [?\C-u] (this-single-command-keys)))) + (setq exwm-input--during-key-sequence nil) + (when exwm-input--temp-line-mode + (setq exwm-input--temp-line-mode nil) + (exwm-input--release-keyboard)))) (defun exwm-input--on-MappingNotify (data synthetic) "Handle MappingNotify event." @@ -403,18 +405,19 @@ SIMULATION-KEYS is a list of alist (key-sequence1 . key-sequence2)." (cl-pushnew `(,(vconcat (car i)) . ,(cdr i)) exwm-input--simulation-keys)) (exwm-input--update-simulation-prefix-keys)) -(defun exwm-input-send-simulation-key () +(defun exwm-input-send-simulation-key (times) "Fake a key event according to last input key sequence." - (interactive) - (let ((pair (assoc (this-command-keys-vector) ;FIXME: pefix + (interactive "p") + (let ((pair (assoc (this-single-command-keys) exwm-input--simulation-keys)) key) (when pair (setq pair (cdr pair)) (unless (listp pair) (setq pair (list pair))) - (dolist (i pair) - (exwm-input--fake-key i))))) + (dotimes (i times) + (dolist (j pair) + (exwm-input--fake-key j)))))) (defun exwm-input--init () "Initialize the keyboard module." diff --git a/exwm-workspace.el b/exwm-workspace.el index 160055f..3add212 100644 --- a/exwm-workspace.el +++ b/exwm-workspace.el @@ -115,7 +115,6 @@ The optional FORCE option is for internal use only." (setq exwm-workspace--current frame exwm-workspace-current-index index) (select-frame-set-input-focus frame) - (exwm--make-emacs-idle-for 0.1) ;FIXME ;; Move mouse when necessary (let ((position (mouse-pixel-position)) x y w h) @@ -140,6 +139,7 @@ The optional FORCE option is for internal use only." (set-frame-parameter frame 'exwm--urgency nil) ;; Update switch workspace history (exwm-workspace--update-switch-history) + (exwm--make-emacs-idle-for 0.1) ;FIXME ;; Update _NET_CURRENT_DESKTOP (xcb:+request exwm--connection (make-instance 'xcb:ewmh:set-_NET_CURRENT_DESKTOP @@ -196,7 +196,7 @@ The optional FORCE option is for internal use only." (defun exwm-workspace-rename-buffer (newname) "Rename a buffer." - (if (/= ? (aref newname 0)) + (if (/= ?\s (aref newname 0)) (rename-buffer newname t) ;; If a buffer name is prefixed with a space, Emacs append a random ;; number before renaming it. This is not desired behavior.