From 7bc31ae92cc788a0b342a45a61d72605c04f6708 Mon Sep 17 00:00:00 2001 From: Daniel Mendler Date: Tue, 26 Nov 2024 10:45:52 +0100 Subject: Add corfu--preview-delete Safeguard against double preview overlay creation. See #532. --- corfu.el | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/corfu.el b/corfu.el index 3081cd1..41ecb04 100644 --- a/corfu.el +++ b/corfu.el @@ -829,6 +829,7 @@ the last command must be listed in `corfu-continue-commands'." (defun corfu--preview-current (beg end) "Show current candidate as overlay given BEG and END." (when (corfu--preview-current-p) + (corfu--preview-delete) (setq beg (+ beg (length corfu--base)) corfu--preview-ov (make-overlay beg end nil)) (overlay-put corfu--preview-ov 'priority 1000) @@ -836,6 +837,12 @@ the last command must be listed in `corfu-continue-commands'." (overlay-put corfu--preview-ov (if (= beg end) 'after-string 'display) (nth corfu--index corfu--candidates)))) +(defun corfu--preview-delete () + "Delete the preview overlay." + (when corfu--preview-ov + (delete-overlay corfu--preview-ov) + (setq corfu--preview-ov nil))) + (defun corfu--window-change (_) "Window and buffer change hook which quits Corfu." (unless (corfu--range-valid-p) @@ -1141,9 +1148,7 @@ A scroll bar is displayed from LO to LO+BAR." (cl-defgeneric corfu--prepare () "Insert selected candidate unless command is marked to continue completion." - (when corfu--preview-ov - (delete-overlay corfu--preview-ov) - (setq corfu--preview-ov nil)) + (corfu--preview-delete) ;; Ensure that state is initialized before next Corfu command (when (and (symbolp this-command) (string-prefix-p "corfu-" (symbol-name this-command))) (corfu--update)) @@ -1190,7 +1195,7 @@ AUTO is non-nil when initializing auto completion." (cl-defgeneric corfu--teardown (buffer) "Tear-down Corfu in BUFFER, which might be dead at this point." (corfu--popup-hide) - (when corfu--preview-ov (delete-overlay corfu--preview-ov)) + (corfu--preview-delete) (remove-hook 'post-command-hook #'corfu--post-command) (when (buffer-live-p buffer) (with-current-buffer buffer -- cgit v1.0