diff options
| author | Daniel Mendler <mail@daniel-mendler.de> | 2023-12-30 12:54:59 +0100 |
|---|---|---|
| committer | Daniel Mendler <mail@daniel-mendler.de> | 2023-12-30 12:54:59 +0100 |
| commit | 63d1de2696adcb09a4ea01ba668635364e37a9c2 (patch) | |
| tree | dcd5923435ad3a525558cc9ec33b2ab41597c636 | |
| parent | f29735c1bbc7ee3a3df95ae2388c794243e8470c (diff) | |
Use global variables, store initial state separately
| -rw-r--r-- | corfu.el | 56 | ||||
| -rw-r--r-- | extensions/corfu-echo.el | 8 | ||||
| -rw-r--r-- | extensions/corfu-popupinfo.el | 42 |
3 files changed, 54 insertions, 52 deletions
@@ -265,59 +265,61 @@ See also the settings `corfu-auto-delay', `corfu-auto-prefix' and (defvar corfu--auto-timer (timer-create) "Auto completion timer.") -(defvar-local corfu--candidates nil +(defvar corfu--candidates nil "List of candidates.") -(defvar-local corfu--metadata nil +(defvar corfu--metadata nil "Completion metadata.") -(defvar-local corfu--base "" +(defvar corfu--base "" "Base string, which is concatenated with the candidate.") -(defvar-local corfu--total 0 +(defvar corfu--total 0 "Length of the candidate list `corfu--candidates'.") -(defvar-local corfu--hilit #'identity +(defvar corfu--hilit #'identity "Lazy candidate highlighting function.") -(defvar-local corfu--index -1 +(defvar corfu--index -1 "Index of current candidate or negative for prompt selection.") -(defvar-local corfu--preselect -1 +(defvar corfu--preselect -1 "Index of preselected candidate, negative for prompt selection.") -(defvar-local corfu--scroll 0 +(defvar corfu--scroll 0 "Scroll position.") -(defvar-local corfu--input nil +(defvar corfu--input nil "Cons of last prompt contents and point.") -(defvar-local corfu--preview-ov nil +(defvar corfu--preview-ov nil "Current candidate overlay.") -(defvar-local corfu--extra nil +(defvar corfu--extra nil "Extra completion properties.") -(defvar-local corfu--change-group nil +(defvar corfu--change-group nil "Undo change group.") (defvar corfu--frame nil "Popup frame.") -(defconst corfu--state-vars - '(corfu--base - corfu--candidates - corfu--hilit - corfu--index - corfu--preselect - corfu--scroll - corfu--input - corfu--total - corfu--preview-ov - corfu--extra - corfu--change-group - corfu--metadata) - "Buffer-local state variables used by Corfu.") +(defconst corfu--initial-state + (mapcar + (lambda (k) (cons k (symbol-value k))) + '(corfu--base + corfu--candidates + corfu--hilit + corfu--index + corfu--preselect + corfu--scroll + corfu--input + corfu--total + corfu--preview-ov + corfu--extra + corfu--change-group + corfu--metadata)) + "Initial Corfu state.") (defvar corfu--frame-parameters '((no-accept-focus . t) @@ -1171,7 +1173,7 @@ AUTO is non-nil when initializing auto completion." (remove-hook 'post-command-hook #'corfu--post-command) (when corfu--preview-ov (delete-overlay corfu--preview-ov)) (accept-change-group corfu--change-group) - (mapc #'kill-local-variable corfu--state-vars)) + (cl-loop for (k . v) in corfu--initial-state do (set k v))) (defun corfu-sort-length-alpha (list) "Sort LIST by length and alphabetically." diff --git a/extensions/corfu-echo.el b/extensions/corfu-echo.el index dd6342f..761322a 100644 --- a/extensions/corfu-echo.el +++ b/extensions/corfu-echo.el @@ -50,10 +50,10 @@ subsequent delay." (choice :tag "Subsequent" number))) :group 'corfu) -(defvar-local corfu-echo--timer nil +(defvar corfu-echo--timer nil "Echo area message timer.") -(defvar-local corfu-echo--message nil +(defvar corfu-echo--message nil "Last echo message.") (defun corfu-echo--cancel (&optional msg) @@ -63,8 +63,8 @@ subsequent delay." (setq corfu-echo--timer nil)) (corfu-echo--show msg) (unless corfu-echo--message - (kill-local-variable 'corfu-echo--timer) - (kill-local-variable 'corfu-echo--message))) + (setq corfu-echo--timer nil + corfu-echo--message nil))) (defun corfu-echo--show (msg) "Show MSG in echo area." diff --git a/extensions/corfu-popupinfo.el b/extensions/corfu-popupinfo.el index 8ec30d8..cd297bc 100644 --- a/extensions/corfu-popupinfo.el +++ b/extensions/corfu-popupinfo.el @@ -133,38 +133,40 @@ documentation from the backend is usually expensive." (fringe-indicator-alist (continuation))) "Buffer parameters.") -(defvar-local corfu-popupinfo--toggle 'init - "Local toggle state.") - -(defvar-local corfu-popupinfo--function - #'corfu-popupinfo--get-documentation - "Function called to obtain documentation string.") - (defvar corfu-popupinfo--frame nil "Info popup child frame.") (defvar corfu-popupinfo--timer nil "Corfu info popup auto display timer.") -(defvar-local corfu-popupinfo--candidate nil +(defvar corfu-popupinfo--toggle 'init + "Toggle state.") + +(defvar corfu-popupinfo--function + #'corfu-popupinfo--get-documentation + "Function called to obtain documentation string.") + +(defvar corfu-popupinfo--candidate nil "Completion candidate for the info popup.") -(defvar-local corfu-popupinfo--coordinates nil +(defvar corfu-popupinfo--coordinates nil "Coordinates of the candidate popup. The coordinates list has the form (LEFT TOP RIGHT BOTTOM) where all values are in pixels relative to the origin. See `frame-edges' for details.") -(defvar-local corfu-popupinfo--lock-dir nil +(defvar corfu-popupinfo--lock-dir nil "Locked position direction of the info popup.") -(defconst corfu-popupinfo--state-vars - '(corfu-popupinfo--candidate - corfu-popupinfo--coordinates - corfu-popupinfo--lock-dir - corfu-popupinfo--toggle - corfu-popupinfo--function) - "Buffer-local state variables used by corfu-popupinfo.") +(defconst corfu-popupinfo--initial-state + (mapcar + (lambda (k) (cons k (symbol-value k))) + '(corfu-popupinfo--candidate + corfu-popupinfo--coordinates + corfu-popupinfo--lock-dir + corfu-popupinfo--toggle + corfu-popupinfo--function)) + "Initial state of `corfu-popupinfo-mode'.") (defun corfu-popupinfo--visible-p (&optional frame) "Return non-nil if FRAME is visible." @@ -505,10 +507,8 @@ not be displayed until this command is called again, even if (cl-defmethod corfu--teardown :before (&context (corfu-popupinfo-mode (eql t))) (corfu-popupinfo--hide) - (mapc #'kill-local-variable corfu-popupinfo--state-vars) - (setq minor-mode-overriding-map-alist - (assq-delete-all #'corfu-popupinfo-mode - minor-mode-overriding-map-alist))) + (cl-loop for (k . v) in corfu-popupinfo--initial-state do (set k v)) + (cl-callf2 assq-delete-all #'corfu-popupinfo-mode minor-mode-overriding-map-alist)) ;; Emacs 28: Do not show Corfu commands with M-X (dolist (sym '(corfu-popupinfo-scroll-down corfu-popupinfo-scroll-up |
