[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/corfu 0203139e53 1/3: corfu-popupinfo: Improve toggles
From: |
ELPA Syncer |
Subject: |
[elpa] externals/corfu 0203139e53 1/3: corfu-popupinfo: Improve toggles |
Date: |
Sat, 19 Nov 2022 12:57:26 -0500 (EST) |
branch: externals/corfu
commit 0203139e5341c7203b88e8aa9b51c1ab0e1186d1
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>
corfu-popupinfo: Improve toggles
---
extensions/corfu-info.el | 2 +-
extensions/corfu-popupinfo.el | 54 ++++++++++++++++++++++++-------------------
2 files changed, 31 insertions(+), 25 deletions(-)
diff --git a/extensions/corfu-info.el b/extensions/corfu-info.el
index dfe9d58a97..c9bf1b96a3 100644
--- a/extensions/corfu-info.el
+++ b/extensions/corfu-info.el
@@ -87,7 +87,7 @@
(goto-char (point-min))
(forward-line (1- (cdr loc))))
(set-window-start nil (point)))))
- (user-error "No candidate location available")))
+ (user-error "Location is unknown")))
;; Emacs 28: Do not show Corfu commands with M-X
(put #'corfu-info-location 'completion-predicate #'ignore)
diff --git a/extensions/corfu-popupinfo.el b/extensions/corfu-popupinfo.el
index b4729530ad..77beac627d 100644
--- a/extensions/corfu-popupinfo.el
+++ b/extensions/corfu-popupinfo.el
@@ -112,7 +112,7 @@ popup can be requested manually via
`corfu-popupinfo-toggle',
(fringe-indicator-alist (continuation)))
"Buffer parameters.")
-(defvar-local corfu-popupinfo--toggle t
+(defvar-local corfu-popupinfo--toggle 'init
"Local toggle state.")
(defvar-local corfu-popupinfo--function
@@ -154,7 +154,8 @@ all values are in pixels relative to the origin. See
"Get source at location of CANDIDATE."
(save-excursion
(when-let* ((fun (plist-get corfu--extra :company-location))
- (loc (funcall fun candidate))
+ ;; BUG: company-location may throw errors if location is not
found
+ (loc (ignore-errors (funcall fun candidate)))
(res (or (and (bufferp (car loc)) (car loc))
(find-file-noselect (car loc) t))))
(with-current-buffer res
@@ -327,8 +328,14 @@ the candidate popup, its value is 'bottom, 'top, 'right or
'left."
(set (make-local-variable (car var)) (cdr var)))
(setf face-remapping-alist (copy-tree face-remapping-alist)
(alist-get 'default face-remapping-alist)
'corfu-popupinfo))
+ (unless (eq corfu-popupinfo--toggle 'init)
+ (message
+ ;; TODO support custom functions, don't hard code the error!
+ (if (eq corfu-popupinfo--function
#'corfu-popupinfo--get-documentation)
+ "No documentation available"
+ "Location is unknown")))
(corfu-popupinfo--hide)
- (setq doc-changed nil coords-changed nil)))
+ (setq doc-changed nil coords-changed nil corfu-popupinfo--toggle
nil)))
(when (or doc-changed coords-changed)
(pcase-let* ((border (alist-get 'child-frame-border-width
corfu--frame-parameters))
(`(,area-x ,area-y ,area-w ,area-h ,area-d)
@@ -369,25 +376,31 @@ If ARG is omitted or nil, scroll down by a near full
screen."
(interactive "p")
(corfu-popupinfo-scroll-up (- (or n 1))))
-(defun corfu-popupinfo--set-function (fun)
- "Set popup documentation getter FUN."
- (setq corfu-popupinfo--function fun
- corfu-popupinfo--candidate nil
- corfu-popupinfo--toggle nil)
- (when-let (candidate (and (>= corfu--index 0)
- (nth corfu--index corfu--candidates)))
- (setq corfu-popupinfo--toggle t)
- (corfu-popupinfo--show candidate)))
+(defun corfu-popupinfo--toggle (fun)
+ "Set documentation getter FUN and toggle popup."
+ (when (< corfu--index 0)
+ (corfu-popupinfo--hide)
+ (user-error "No candidate selected"))
+ (setq corfu-popupinfo--toggle
+ (not (and (corfu-popupinfo--visible-p)
+ (eq corfu-popupinfo--function fun))))
+ (if (not corfu-popupinfo--toggle)
+ (corfu-popupinfo--hide)
+ (setq corfu-popupinfo--function fun
+ corfu-popupinfo--candidate nil)
+ (corfu-popupinfo--show (nth corfu--index corfu--candidates))))
(defun corfu-popupinfo-documentation ()
- "Show documentation in popup."
+ "Show or hide documentation in popup.
+Behaves like `corfu-popupinfo-toggle'."
(interactive)
- (corfu-popupinfo--set-function #'corfu-popupinfo--get-documentation))
+ (corfu-popupinfo--toggle #'corfu-popupinfo--get-documentation))
(defun corfu-popupinfo-location ()
- "Show location in popup."
+ "Show or hide location in popup.
+Behaves like `corfu-popupinfo-toggle'."
(interactive)
- (corfu-popupinfo--set-function #'corfu-popupinfo--get-location))
+ (corfu-popupinfo--toggle #'corfu-popupinfo--get-location))
(defun corfu-popupinfo-toggle ()
"Toggle the info popup display or hide.
@@ -396,14 +409,7 @@ When using this command to manually hide the info popup,
it will
not be displayed until this command is called again, even if
`corfu-popupinfo-delay' is non-nil."
(interactive)
- (setq corfu-popupinfo--toggle nil)
- (if-let ((candidate (and (>= corfu--index 0)
- (nth corfu--index corfu--candidates)))
- ((not (corfu-popupinfo--visible-p))))
- (progn
- (setq corfu-popupinfo--toggle t)
- (corfu-popupinfo--show candidate))
- (corfu-popupinfo--hide)))
+ (corfu-popupinfo--toggle corfu-popupinfo--function))
(defun corfu-popupinfo--exhibit (&rest _)
"Update the info popup automatically."