[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/vcomplete b831752c4c 50/91: Refactor auto updating of the
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/vcomplete b831752c4c 50/91: Refactor auto updating of the completion list buffer |
Date: |
Tue, 24 May 2022 15:59:08 -0400 (EDT) |
branch: elpa/vcomplete
commit b831752c4cca074ad0d7614d48d79148fb9b2bba
Author: Daniel Semyonov <daniel@dsemy.com>
Commit: Daniel Semyonov <daniel@dsemy.com>
Refactor auto updating of the completion list buffer
* vcomplete.el (vcomplete--move-n-completions)
(vcomplete-choose-completion): Set 'this-command' to 'vcomplete-noop'.
(vcomplete--last-string, vcomplete--set-last-string-in-minibuffer)
(vcomplete--string-in-region, vcomplete--set-last-string-in-region):
Remove.
(vcomplete--update-in-minibuffer, vcomplete--update-in-region): Remove
tests for changes in the completion string, setup for use with
'after-change-functions'.
(vcomplete--disable-completion-in-region): New function.
(vcomplete--reset-vars): Change to only reset currently used variables.
(vcomplete--setup-minibuffer, vcomplete--setup-in-region): Use
'after-change-functions' to update the completion list buffer.
---
vcomplete.el | 67 +++++++++++++++++++++++-------------------------------------
1 file changed, 25 insertions(+), 42 deletions(-)
diff --git a/vcomplete.el b/vcomplete.el
index 6fcb133190..b51ed75df9 100644
--- a/vcomplete.el
+++ b/vcomplete.el
@@ -148,6 +148,7 @@ If no completion is found, return nil."
(defun vcomplete--move-n-completions (n)
"Move N completions in the `*Completions*' buffer."
+ (setq this-command 'vcomplete-noop)
(vcomplete-with-completions-buffer
(next-completion n)
(set-window-point window (point))
@@ -168,6 +169,7 @@ With prefix argument N, move N items (negative N means move
forward)."
(defun vcomplete-choose-completion ()
"Choose the completion at point in the `*Completions*' buffer."
(interactive)
+ (setq this-command 'vcomplete-noop)
(when-let ((buf (get-buffer "*Completions*")))
(switch-to-completions)
(choose-completion)))
@@ -182,53 +184,35 @@ With prefix argument N, move N items (negative N means
move forward)."
;;;; Visual completion mode:
-(defvar vcomplete--last-string nil
- "Last pending completion string.")
-(put 'vcomplete--last-string 'risky-local-variable t)
-
-(defun vcomplete--set-last-string-in-minibuffer ()
- "Set `vcomplete--last-string' in a minibuffer."
- (while-no-input
- (redisplay)
- (setq vcomplete--last-string (minibuffer-contents))))
-
-(defun vcomplete--string-in-region ()
- "Return a substring according to the markers in
`completion-in-region--data'."
- (when completion-in-region--data
- (buffer-substring (car completion-in-region--data)
- (cadr completion-in-region--data))))
-
-(defun vcomplete--set-last-string-in-region ()
- "Set `vcomplete--last-string' in-region."
- (while-no-input
- (redisplay)
- (setq vcomplete--last-string
- (vcomplete--string-in-region))))
-
-(defun vcomplete--update-in-minibuffer ()
+(defun vcomplete--update-in-minibuffer (&rest _args)
"Update the completion list when completing in a minibuffer."
(while-no-input
(redisplay)
- (unless (string= (minibuffer-contents) vcomplete--last-string)
+ (unless (eq this-command 'vcomplete-noop)
(minibuffer-completion-help))))
-(defun vcomplete--update-in-region ()
+(defun vcomplete--update-in-region (&rest _args)
"Update the completion list when completing in-region."
(while-no-input
(redisplay)
- (if (get-buffer-window "*Completions*")
- (unless (string= (vcomplete--string-in-region)
- vcomplete--last-string)
- (completion-help-at-point))
- (completion-in-region-mode -1))))
+ (unless (or (eq this-command 'vcomplete-noop)
+ (eq this-command 'completion-at-point))
+ (completion-help-at-point))))
+
+;; This function is required (in the local `post-command-hook') since
+;; `after-change-functions' runs before the `*Completions*' buffer is
+;; closed, so `completion-in-region-mode' can't be immediately
+;; disabled through `vcomplete--update-in-region'.
+(defun vcomplete--disable-completion-in-region ()
+ "Disable `completion-in-region-mode' when there is no `*Completions*'
buffer."
+ (unless (get-buffer-window "*Completions*")
+ (completion-in-region-mode -1)))
(defun vcomplete--reset-vars ()
"Reset variables used by Vcomplete to their default values."
- (setq vcomplete--last-string nil)
- (remove-hook 'pre-command-hook #'vcomplete--set-last-string-in-minibuffer t)
- (remove-hook 'pre-command-hook #'vcomplete--set-last-string-in-region t)
- (remove-hook 'post-command-hook #'vcomplete--update-in-region t)
- (remove-hook 'post-command-hook #'vcomplete--update-in-minibuffer t))
+ (remove-hook 'after-change-functions #'vcomplete--update-in-region t)
+ (remove-hook 'post-command-hook #'vcomplete--disable-completion-in-region t)
+ (remove-hook 'after-change-functions #'vcomplete--update-in-minibuffer t))
(defun vcomplete--setup-completions ()
"Setup visual completions for the `*Completions*' buffer."
@@ -240,9 +224,8 @@ With prefix argument N, move N items (negative N means move
forward)."
(when minibuffer-completion-table
(setq vcomplete--last-completion-overlay nil)
(when vcomplete-auto-update
- (add-hook 'pre-command-hook
- #'vcomplete--set-last-string-in-minibuffer nil t)
- (add-hook 'post-command-hook
+ (vcomplete--update-in-minibuffer)
+ (add-hook 'after-change-functions
#'vcomplete--update-in-minibuffer nil t))
(use-local-map (make-composed-keymap vcomplete-command-map
(current-local-map)))))
@@ -256,10 +239,10 @@ With prefix argument N, move N items (negative N means
move forward)."
minor-mode-overriding-map-alist)))
(setq vcomplete--last-completion-overlay nil)
(when vcomplete-auto-update
- (add-hook 'pre-command-hook
- #'vcomplete--set-last-string-in-region nil t)
+ (add-hook 'after-change-functions
+ #'vcomplete--update-in-region nil t)
(add-hook 'post-command-hook
- #'vcomplete--update-in-region nil t))
+ #'vcomplete--disable-completion-in-region nil t))
(setcdr map vcomplete-command-map)))
;;;###autoload
- [nongnu] elpa/vcomplete b30cedbf26 65/91: ; Fix small style issue in info file, (continued)
- [nongnu] elpa/vcomplete b30cedbf26 65/91: ; Fix small style issue in info file, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete 8450b1befd 91/91: ; Bump to version 1.2.1, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete 4019e76a3d 78/91: New internal function for getting the '*Completions*' window, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete 3ac64b6241 87/91: ; Fix info node hyperlink in the commentary of vcomplete.el, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete 6dbdbf1a4b 82/91: ; Add build manifest, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete 739fee1af0 21/91: Cleanup automatic update code, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete 56a95cc1df 24/91: ; Fix indentation, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete 0170c083a3 26/91: Eliminate delay after Embark action from minibuffer when auto updates are on, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete b658642c23 12/91: * vcomplete.el (vcomplete-auto-help): Reset vars when setting, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete b53c3d8caa 35/91: ; Fix case in license part of vcomplete.el, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete b831752c4c 50/91: Refactor auto updating of the completion list buffer,
ELPA Syncer <=
- [nongnu] elpa/vcomplete 336cfaad33 68/91: Remove unnecessary (while-no-input (redisplay) ...) block, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete 31b7cfbb45 70/91: ; Small change to 'vcomplete-mode's docstring, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete 5a7d90596b 72/91: ; Move local mode declaration to the top of NEWS, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete 9df472e302 85/91: ; Indicate the mailing list is the "maintainer" of the package, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete 8ca95b2c81 80/91: Rename `vcomplete--update-in-minibuffer', ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete cd8411949c 77/91: ; Update package URL to https://dsemy.com/projects/vcomplete, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete ed98c1b50d 90/91: ; Change to NEWS, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete 84c888747e 81/91: Reset the '*Completions*' buffer when 'vcomplete-mode' is disabled, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete a5763edf35 83/91: ; Bump to version 1.2, ELPA Syncer, 2022/05/24
- [nongnu] elpa/vcomplete 2a5c215033 86/91: ; Prepare for NonGNU ELPA inclusion, ELPA Syncer, 2022/05/24