[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/marginalia 9f1b63b 086/241: add symbol class characters
From: |
Stefan Monnier |
Subject: |
[elpa] externals/marginalia 9f1b63b 086/241: add symbol class characters from Emacs 28 |
Date: |
Fri, 28 May 2021 20:49:02 -0400 (EDT) |
branch: externals/marginalia
commit 9f1b63b96b421974f5fad4df206338d8c916f3c4
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>
add symbol class characters from Emacs 28
---
marginalia.el | 73 ++++++++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 52 insertions(+), 21 deletions(-)
diff --git a/marginalia.el b/marginalia.el
index 8347565..8386480 100644
--- a/marginalia.el
+++ b/marginalia.el
@@ -329,24 +329,58 @@ This hash table is needed to speed up
`marginalia-annotate-command'.")
"\n")
"Regexp to match lines about advice in function documentation strings.")
+;; Taken from advice--make-docstring, is this robust?
+(defun marginalia--advised (fun)
+ "Return t if function FUN is advised."
+ (let ((flist (indirect-function fun)))
+ (advice--p (if (eq 'macro (car-safe flist)) (cdr flist) flist))))
+
+;; Symbol class characters from Emacs 28
`help--symbol-completion-table-affixation'
+;; ! and * are our additions
+(defun marginalia--symbol-class (s)
+ "Return symbol class characters for symbol S.
+f function
+c command
+! advised
+m macro
+u custom
+v variable
+* modified
+a face"
+ (format
+ "%-6s"
+ (concat
+ (when (fboundp s)
+ (concat
+ (cond
+ ((commandp s) "c")
+ ((eq (car-safe (symbol-function s)) 'macro) "m")
+ (t "f"))
+ (when (marginalia--advised s) "!")))
+ (when (boundp s)
+ (concat
+ (if (custom-variable-p s) "u" "v")
+ (when (and (boundp s) (not (equal (symbol-value s) (default-value s))))
"*")))
+ (when (facep s) "a")
+ (when (and (fboundp 'cl-find-class) (cl-find-class s)) "t"))))
+
+(defun marginalia--function-doc (sym)
+ "Documentation string of function SYM."
+ (when-let (doc (ignore-errors (documentation sym)))
+ (replace-regexp-in-string marginalia--advice-regexp "" doc)))
+
(defun marginalia-annotate-symbol (cand)
"Annotate symbol CAND with its documentation string."
(when-let (sym (intern-soft cand))
- (let ((doc (or (cond
- ((fboundp sym) (ignore-errors (documentation sym)))
- ((facep sym) (documentation-property sym
'face-documentation))
- (t (documentation-property sym 'variable-documentation)))
- "")))
- (concat
- (marginalia-annotate-command cand)
- (marginalia--fields
- ((if (and (fboundp sym) (string-match-p marginalia--advice-regexp doc))
- "*" " ")
- :face 'marginalia-modified)
- ((if (fboundp sym)
- (replace-regexp-in-string marginalia--advice-regexp "" doc)
- doc)
- :truncate marginalia-truncate-width :face
'marginalia-documentation))))))
+ (concat
+ (marginalia-annotate-command cand)
+ (marginalia--fields
+ ((marginalia--symbol-class sym) :face 'marginalia-modified)
+ ((cond
+ ((fboundp sym) (marginalia--function-doc sym))
+ ((facep sym) (documentation-property sym 'face-documentation))
+ (t (documentation-property sym 'variable-documentation)))
+ :truncate marginalia-truncate-width :face 'marginalia-documentation)))))
(defun marginalia-annotate-imenu (cand)
"Annotate imenu CAND with its documentation string."
@@ -359,9 +393,7 @@ This hash table is needed to speed up
`marginalia-annotate-command'.")
"Annotate variable CAND with its documentation string."
(when-let (sym (intern-soft cand))
(marginalia--fields
- ((if (and (boundp sym) (not (equal (symbol-value sym) (default-value
sym))))
- "*" " ")
- :face 'marginalia-modified)
+ ((marginalia--symbol-class sym) :face 'marginalia-modified)
((if (boundp sym) (symbol-value sym) 'unbound)
:truncate (/ marginalia-truncate-width 3) :format "%S" :face
'marginalia-variable)
((documentation-property sym 'variable-documentation)
@@ -397,9 +429,8 @@ This hash table is needed to speed up
`marginalia-annotate-command'.")
(propertize "On" 'face 'marginalia-on)
(propertize "Off" 'face 'marginalia-off)) :width 3)
(lighter-str :width 14 :face 'marginalia-lighter)
- ((ignore-errors (documentation mode))
- :truncate marginalia-truncate-width
- :face 'marginalia-documentation)))))
+ ((marginalia--function-doc mode)
+ :truncate marginalia-truncate-width :face 'marginalia-documentation)))))
(defun marginalia-annotate-package (cand)
"Annotate package CAND with its description summary."
- [elpa] externals/marginalia c8c3f87 045/241: Rename toggle -> cycle, improve documenation, (continued)
- [elpa] externals/marginalia c8c3f87 045/241: Rename toggle -> cycle, improve documenation, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 1269445 049/241: marginalia-annotate-command-binding: cache key binding, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 376ccc5 048/241: Revert "fix marginalia--full-candidate for selectrum", Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia ccefc57 052/241: marginalia-annotate-command-binding: add comment, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 597186d 065/241: add marginalia-annotate-minor-mode, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 14dce57 062/241: scale field widths such that annotations look better on smaller windows, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 7d3719d 074/241: Fix advice skipping regexp for older Emacsen, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 5373a26 076/241: add marginalia-modified face, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia c0460b6 085/241: classify environment variable, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 9d2f319 080/241: marginalia-annotate-variable: add modification indicator, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 9f1b63b 086/241: add symbol class characters from Emacs 28,
Stefan Monnier <=
- [elpa] externals/marginalia 74603c0 091/241: use mapatoms to fix the harmless unused variable warning, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 88ba686 090/241: remove unnecessary :group specification, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 6cd9768 098/241: minor optimization to marginalia--function-doc, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 4ac0f1f 096/241: rename variable, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia ed02f22 099/241: marginalia--align: only align text if non-empty, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 88faa59 089/241: marginalia-annotate-variable: ensure that control characters are escaped, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 333ff80 104/241: fix #32, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 531fb6e 107/241: fix #27, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia ef4fabf 106/241: add preliminary support for affixation-function, Stefan Monnier, 2021/05/28
- [elpa] externals/marginalia 69332ba 110/241: fix hex code formatting, Stefan Monnier, 2021/05/28