[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/kind-icon b88e809 48/51: kind-formatter -> margin-forma
From: |
ELPA Syncer |
Subject: |
[elpa] externals/kind-icon b88e809 48/51: kind-formatter -> margin-formatters |
Date: |
Wed, 17 Nov 2021 15:57:48 -0500 (EST) |
branch: externals/kind-icon
commit b88e809f424e508304e3ac8f334f02daa9f6110b
Author: JD Smith <93749+jdtsmith@users.noreply.github.com>
Commit: JD Smith <93749+jdtsmith@users.noreply.github.com>
kind-formatter -> margin-formatters
---
README.md | 13 +++++++------
kind-icon.el | 38 ++++++++++++++++++++++++++------------
2 files changed, 33 insertions(+), 18 deletions(-)
diff --git a/README.md b/README.md
index 6f307f4..bd87d91 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
# kind-icon — colorful icons for completion in Emacs
-This emacs package adds icon or text-based completion prefixes based on the
`:company-kind` property many completion backends (such as lsp-mode) provide.
It works either as a "kind-formatter" function (for supporting UI's such as
corfu) or by wrapping the completion function for other completion UI's which
can handle the Emacs 28+ `affixation-function` completion property.
+This emacs package adds icon or text-based completion prefixes based on the
`:company-kind` property many completion backends (such as lsp-mode) provide.
It works either as a "margin-formatter" (for supporting UI's such as corfu) or
by wrapping the completion function for other completion UI's which can handle
the Emacs 28+ `affixation-function` completion property.
## Examples
@@ -20,9 +20,9 @@ A few examples of `kind-icon` in action with
[lsp-mode](https://github.com/emacs
Get it from your local package archive (TBD). Note that icons support
requires [svg-lib](https://github.com/rougier/svg-lib). At present `kind-icon`
has been tested extensively with the excellent
[corfu](https://github.com/minad/corfu) completion package (from the maker of
vertico, consult, marginalia, and more).
-### Using kind-formatter:
+### Using margin-formatters:
-To enable for the completion UI [corfu](https://github.com/minad/corfu), which
has a kind-formatter configuration:
+To enable for the completion UI [corfu](https://github.com/minad/corfu), which
has margin-formatters capability:
```elisp
(use-package kind-icon ;package availability TBD
@@ -30,7 +30,8 @@ To enable for the completion UI
[corfu](https://github.com/minad/corfu), which h
:after corfu
:custom
(kind-icon-default-face 'corfu-background)
- (corfu-kind-formatter #'kind-icon-formatted))
+ :config
+ (add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter))
```
### Wrapping completion-in-region
@@ -98,5 +99,5 @@ You can also use simple text-based prefixes instead of icons.
The icons are qui
## Thanks
-- to @rougier for the excellent [svg-lib](https://github.com/rougier/svg-lib).
-- to @minad, who developed [corfu](https://github.com/minad/corfu) (among many
others), came up with the `kind-formatter` concept, and contributed many great
ideas.
+- to @rougier for the excellent [svg-lib](https://github.com/rougier/svg-lib).
+- to @minad, who developed [corfu](https://github.com/minad/corfu) (among many
others) and contributed many great ideas to `kind-icon`.
diff --git a/kind-icon.el b/kind-icon.el
index 941d52b..517607a 100644
--- a/kind-icon.el
+++ b/kind-icon.el
@@ -15,19 +15,19 @@
;; typically used for differentiating completion candidates such as
;; variables, functions, etc. It works in one of 2 ways:
;;
-;; 1. For UI's with a "kind-formatter" option, simply set that
-;; function to `kind-icon-formatted'.
+;; 1. For UI's with "margin-formatters" capability, simply add
+;; `kind-icon-margin-formatter` to the margin formatter list.
;;
-;; 2. For UI's without a kind-formatter but which support "affixation
-;; functions" (an Emacs 28 and later completion property), use
-;; `kind-icon-enhance-completion' to wrap the normal
-;; completion-in-region-function. E.g. (in the completion mode's
-;; hook):
+;; 2. For UI's without a margin-formatters but which support
+;; "affixation functions" (an Emacs 28 and later completion
+;; property), use `kind-icon-enhance-completion' to wrap the
+;; normal completion-in-region-function. E.g. (in the completion
+;; mode's hook):
;;
;; (setq completion-in-region-function
;; (kind-icon-enhance-completion completion-in-region-function)
;;
-;; 3. If your UI supports neither a kind-formatter nor affixation
+;; 3. If your UI supports neither margin-formatters nor affixation
;; functions, ask them to do so!
;;
;; Note that icon support requires svg-lib to be installed.
@@ -209,8 +209,8 @@ float FRAC."
(defsubst kind-icon--metadata-get (metadata type-name)
(or
- (cdr (assq (intern type-name) metadata))
- (plist-get completion-extra-properties (intern (format ":%s" type-name)))))
+ (plist-get completion-extra-properties (intern (format ":%s" type-name)))
+ (cdr (assq (intern type-name) metadata))))
(defun kind-icon-formatted (kind)
"Return a formatted kind badge, either icon or text abbreviation.
@@ -273,6 +273,20 @@ background-color."
(setf (alist-get kind kind-icon--cache) disp)
(propertize (concat pad-left "??" pad-right) 'face
font-lock-warning-face))))))
+(defconst kind-icon--unknown
+ (propertize "???" 'face '(:weight bold :background "red")))
+
+(defun kind-icon-margin-formatter (metadata)
+ "Return a margin-formatter function which produces kind icons.
+METADATA is the completion metadata supplied by the caller (see
+info node `(elisp)Programmed Completion'). To use, add this
+function to the relevant margin-formatters list."
+ (if-let ((kind-func (kind-icon--metadata-get metadata "company-kind")))
+ (lambda (cand)
+ (if-let ((kind (funcall kind-func cand)))
+ (kind-icon-formatted kind)
+ kind-icon--unknown))))
+
(defun kind-icon--affixation-function (kind-func &optional ann-func)
"Create and return a custom kind-icon affixation function.
The company-kind function should be passed in as KIND-FUNC and
@@ -290,7 +304,7 @@ and its result used as the affixation suffix, first setting
the
(badge (kind-icon-formatted kind)))
(list cand badge suffix)
(list cand
- (propertize "??" 'face '(:weight bold :background
"red"))
+ kind-icon--unknown
suffix))))
candidates)))
@@ -301,7 +315,7 @@ icon in the prefix slot. Use it like:
(setq completion-in-region-function
(kind-icon-enhance-completion
- #'original-completion-in-region-function))"
+ completion-in-region-function))"
(lambda (start end table &optional pred)
(let* ((str (buffer-substring start (point)))
(metadata (completion-metadata str table pred))
- [elpa] externals/kind-icon 3b25b8d 27/51: Update README.md, (continued)
- [elpa] externals/kind-icon 3b25b8d 27/51: Update README.md, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon ffa75e7 21/51: Update README.md, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon 01d76af 07/51: Make kind-prefix-reset-cache a command, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon eaeea12 12/51: Doc, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon 3b0c9c3 11/51: Renamed kind-icon, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon 366232c 36/51: Quiet svg-lib-icon warning, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon 9a20879 30/51: Use widget-value in customize preview, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon 9098597 33/51: Update kinds to match LSP spec, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon fcfe9ea 14/51: kind-icon-formatted: 3 char-width icon/centered 1 or 2 char text, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon 8d6fa99 46/51: Update README.md, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon b88e809 48/51: kind-formatter -> margin-formatters,
ELPA Syncer <=
- [elpa] externals/kind-icon f6de892 37/51: Remove add-variable-watcher in favor of custom :set, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon 94ff0ac 13/51: customize interface for mappings, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon cfa3d73 38/51: Guard against network or other icon retrieval issues (text fallback), ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon ba0f94e 17/51: Re-enable mapping customization preview button, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon 0921fe2 35/51: Separate kind-icon--cache, and return ?? when kind missing, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon 0d92763 31/51: add kinds constructor, event, reference, typeparameter, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon c69da89 18/51: Updated docs, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon 962c209 20/51: Add custom variable watcher for instant updates, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon c0d50c6 40/51: minor reformat, ELPA Syncer, 2021/11/17
- [elpa] externals/kind-icon be77196 19/51: Update README.md, ELPA Syncer, 2021/11/17