summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.org2
-rw-r--r--corfu.el23
2 files changed, 19 insertions, 6 deletions
diff --git a/README.org b/README.org
index 6eef653..89a99e7 100644
--- a/README.org
+++ b/README.org
@@ -49,6 +49,7 @@
- Show candidate documentation/signature string in the echo area.
- Deprecated candidates are crossed out in the display.
- Support for annotations (~annotation-function~, ~affixation-function~).
+ - Icons can be provided by an external package via ~corfu-kind-formatter~.
* Configuration
@@ -158,7 +159,6 @@
- Corfu falls back to the default Completion buffer on non-graphical displays,
since Corfu requires child frames.
- The abort handling could be improved, for example the input could be undone.
- - Some Company metadata extensions are not supported (~company-kind~, ~company-match~).
- No sorting by history, since ~completion-at-point~ does not
maintain a history (See branch =history= for a possible solution).
diff --git a/corfu.el b/corfu.el
index 0352957..3b9a34e 100644
--- a/corfu.el
+++ b/corfu.el
@@ -102,6 +102,13 @@ completion began less than that number of seconds ago."
"Show documentation string in the echo area after that number of seconds."
:type '(choice boolean float))
+(defcustom corfu-kind-formatter nil
+ "Formatting function for candidate kind.
+The function takes a symbol corresponding to the kind of the candidate
+and must return a string. This function can be used to display icons in
+front of the candidates."
+ :type '(choice function (const nil)))
+
(defcustom corfu-auto-prefix 3
"Minimum length of prefix for auto completion."
:type 'integer)
@@ -588,12 +595,15 @@ A scroll bar is displayed from LO to LO+BAR."
suffix
(propertize suffix 'face 'corfu-annotations)))))
(cl-loop for cand in cands collect (list cand "" "")))))
- (when-let (dep (plist-get corfu--extra :company-deprecated))
+ (let ((dep (plist-get corfu--extra :company-deprecated))
+ (kind (and corfu-kind-formatter (plist-get corfu--extra :company-kind))))
(cl-loop for x in cands for (c . _) = x do
- (when (funcall dep c)
+ (when kind
+ (setf (cadr x) (funcall corfu-kind-formatter (funcall kind c))))
+ (when (and dep (funcall dep c))
(setcar x (setq c (substring c)))
- (add-face-text-property 0 (length c) 'corfu-deprecated 'append c))))
- cands)
+ (add-face-text-property 0 (length c) 'corfu-deprecated 'append c)))
+ (cons kind cands)))
(defun corfu--metadata-get (prop)
"Return PROP from completion metadata."
@@ -637,7 +647,10 @@ A scroll bar is displayed from LO to LO+BAR."
(bar (ceiling (* corfu-count corfu-count) corfu--total))
(lo (min (- corfu-count bar 1) (floor (* corfu-count start) corfu--total)))
(cands (funcall corfu--highlight (seq-subseq corfu--candidates start last)))
- (`(,pw ,width ,fcands) (corfu--format-candidates (corfu--affixate cands))))
+ (`(,kind . ,acands) (corfu--affixate cands))
+ (`(,pw ,width ,fcands) (corfu--format-candidates acands))
+ ;; Disable the left margin if a kind function is specified.
+ (corfu-left-margin-width (if kind 0 corfu-left-margin-width)))
;; Nonlinearity at the end and the beginning
(when (/= start 0)
(setq lo (max 1 lo)))