summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Mendler <mail@daniel-mendler.de>2023-12-30 12:54:59 +0100
committerDaniel Mendler <mail@daniel-mendler.de>2023-12-30 12:54:59 +0100
commit63d1de2696adcb09a4ea01ba668635364e37a9c2 (patch)
treedcd5923435ad3a525558cc9ec33b2ab41597c636
parentf29735c1bbc7ee3a3df95ae2388c794243e8470c (diff)
Use global variables, store initial state separately
-rw-r--r--corfu.el56
-rw-r--r--extensions/corfu-echo.el8
-rw-r--r--extensions/corfu-popupinfo.el42
3 files changed, 54 insertions, 52 deletions
diff --git a/corfu.el b/corfu.el
index bad2066..6b53f80 100644
--- a/corfu.el
+++ b/corfu.el
@@ -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