branch: externals/corfu commit 4f426ab92665cdc622dd6bd7a45549c93362fae7 Author: Daniel Mendler <m...@daniel-mendler.de> Commit: Daniel Mendler <m...@daniel-mendler.de>
corfu--popup-hide-on-click: Redirect focus --- corfu.el | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/corfu.el b/corfu.el index 2bf47af..9ab3592 100644 --- a/corfu.el +++ b/corfu.el @@ -243,19 +243,30 @@ filter string with spaces is allowed." (buffer-read-only . t)) "Default child frame buffer parameters.") -(defun corfu--popup-hide-on-click () - "Close if mouse events land in the popup." - (when (mouse-event-p last-input-event) - (select-frame (frame-parent corfu--frame) 'norecord) - (corfu--popup-hide) - (setq this-command #'ignore))) +(defvar corfu--mouse-ignore-map + (let ((map (make-sparse-keymap))) + (dolist (k '(mouse-1 down-mouse-1 drag-mouse-1 double-mouse-1 triple-mouse-1 + mouse-2 down-mouse-2 drag-mouse-2 double-mouse-2 triple-mouse-2 + mouse-3 down-mouse-3 drag-mouse-3 double-mouse-3 triple-mouse-3 + mouse-4 down-mouse-4 drag-mouse-4 double-mouse-4 triple-mouse-4 + mouse-5 down-mouse-5 drag-mouse-5 double-mouse-5 triple-mouse-5 + mouse-6 down-mouse-6 drag-mouse-6 double-mouse-6 triple-mouse-6 + mouse-7 down-mouse-7 drag-mouse-7 double-mouse-7 triple-mouse-7)) + (define-key map (vector k) #'ignore)) + map) + "Ignore all mouse clicks.") + +(defun corfu--popup-redirect-focus () + "Redirect focus from popup." + (redirect-frame-focus corfu--frame (frame-parent corfu--frame))) (defun corfu--make-buffer (content) "Create corfu buffer with CONTENT." (let ((fr face-remapping-alist) (buffer (get-buffer-create " *corfu*"))) (with-current-buffer buffer - (add-hook 'pre-command-hook #'corfu--popup-hide-on-click nil 'local) + (add-hook 'pre-command-hook #'corfu--popup-redirect-focus nil 'local) + (use-local-map corfu--mouse-ignore-map) (dolist (var corfu--buffer-parameters) (set (make-local-variable (car var)) (cdr var))) (setq-local face-remapping-alist fr)