[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Generating a listing of all symbols (16K+) and labeling subsets
From: |
Hans BKK |
Subject: |
Re: Generating a listing of all symbols (16K+) and labeling subsets |
Date: |
Tue, 22 Apr 2014 21:11:36 -0700 (PDT) |
User-agent: |
G2/1.0 |
On Friday, April 18, 2014 1:15:38 AM UTC-4, Hans BKK wrote:
> To that end I'd like to generate standardized-format text "symbols
> reports" on the relevant values of all functions, variables, key
> bindings etc, so that I can do A-B comparison via diff between stock
> vanilla emacs vs after installing these bundles, or in fact any
> packages in the future.
Updated code, now including docstrings and variable values (including for
functions)
Will likely kill the final "(t / leftovers / other (misc) symbol" bucket if
it's true changes in that category are unlikely to be of interest.
Exploring the code and resulting output has been a decent learning exercise in
its own right.
Any and all feedback welcome.
----------------------
(defun macrop (object)
"Non-nil if and only if OBJECT is a macro."
(let ((def (indirect-function object t)))
(when (consp def)
(or (eq 'macro (car def))
(and (autoloadp def) (memq (nth 4 def) '(macro t)))))))
(defun list-hh-symbols ()
"Display a list of Emacs symbols and their docstrings"
(interactive)
(message "Looking up all symbols...")
(with-output-to-temp-buffer "*List Symbols*"
(let (vars)
(mapatoms (function (lambda (sym)
(setq vars (cons sym vars)))))
(setq vars (sort vars 'string-lessp))
(while vars
(let ((sym (car vars)))
(cond
((fboundp sym) ; ALL functions
(cond
((commandp sym) ; interactive commands
(cond
((keymapp sym)
(princ "=================\n")
(unless (documentation sym)
(princ "\n"))
(princ "command - keymap: ")
(prin1 sym)
(princ "\n\n")
(when (documentation sym)
(princ (substitute-command-keys
(documentation sym)))
(princ "\n\n"))
(when (boundp sym)
(princ "-------\n")
(princ "as value: ")
(prin1 (symbol-value sym))
(princ "\n\n"))
(when (documentation-property sym
'variable-documentation)
(princ (substitute-command-keys
(documentation-property sym
'variable-documentation)))
(princ "\n\n"))
(when (documentation sym)
(princ "\n"))
)
((subrp (symbol-function sym))
(princ "=============================\n")
(unless (documentation sym)
(princ "\n"))
(princ "command - built-in primitive: ")
(prin1 sym)
(princ "\n\n")
(when (documentation sym)
(princ (substitute-command-keys
(documentation sym)))
(princ "\n\n"))
(when (boundp sym)
(princ "-------\n")
(princ "as value: ")
(prin1 (symbol-value sym))
(princ "\n\n"))
(when (documentation-property sym
'variable-documentation)
(princ (substitute-command-keys
(documentation-property sym
'variable-documentation)))
(princ "\n\n"))
(when (documentation sym)
(princ "\n"))
)
((byte-code-function-p (symbol-function sym))
(princ "====================\n")
(unless (documentation sym)
(princ "\n"))
(princ "command - byte-code: ")
(prin1 sym)
(princ "\n\n")
(when (documentation sym)
(princ (substitute-command-keys
(documentation sym)))
(princ "\n\n"))
(when (boundp sym)
(princ "-------\n")
(princ "as value: ")
(prin1 (symbol-value sym))
(princ "\n\n"))
(when (documentation-property sym
'variable-documentation)
(princ (substitute-command-keys
(documentation-property sym
'variable-documentation)))
(princ "\n\n"))
(when (documentation sym)
(princ "\n"))
)
((functionp sym)
(princ "================\n")
(unless (documentation sym)
(princ "\n"))
(princ "command - elisp: ")
(prin1 sym)
(princ "\n\n")
(when (documentation sym)
(princ (substitute-command-keys
(documentation sym)))
(princ "\n\n"))
(when (boundp sym)
(princ "-------\n")
(princ "as value: ")
(prin1 (symbol-value sym))
(princ "\n\n"))
(when (documentation-property sym
'variable-documentation)
(princ (substitute-command-keys
(documentation-property sym
'variable-documentation)))
(princ "\n\n"))
(when (documentation sym)
(princ "\n"))
)
(t
(princ "==============\n")
(unless (documentation sym)
(princ "\n"))
(princ "other command: ")
(prin1 sym)
(princ "\n\n")
(when (documentation sym)
(princ (substitute-command-keys
(documentation sym)))
(princ "\n\n"))
(when (boundp sym)
(princ "-------\n")
(princ "as value: ")
(prin1 (symbol-value sym))
(princ "\n\n"))
(when (documentation-property sym
'variable-documentation)
(princ (substitute-command-keys
(documentation-property sym
'variable-documentation)))
(princ "\n\n"))
(when (documentation sym)
(princ "\n"))
)
)
)
(t ; non-interactive functions
(cond
((macrop sym)
(princ "================\n")
(unless (documentation sym)
(princ "\n"))
(princ "function - macro: ")
(prin1 sym)
(princ "\n\n")
(when (documentation sym)
(princ (substitute-command-keys
(documentation sym)))
(princ "\n\n"))
(when (boundp sym)
(princ "-------\n")
(princ "as value: ")
(prin1 (symbol-value sym))
(princ "\n\n"))
(when (documentation-property sym
'variable-documentation)
(princ (substitute-command-keys
(documentation-property sym
'variable-documentation)))
(princ "\n\n"))
(when (documentation sym)
(princ "\n"))
)
((keymapp sym)
(princ "==================\n")
(unless (documentation sym)
(princ "\n"))
(princ "function - keymap: ")
(prin1 sym)
(princ "\n\n")
(when (documentation sym)
(princ (substitute-command-keys
(documentation sym)))
(princ "\n\n"))
(when (boundp sym)
(princ "-------\n")
(princ "as value: ")
(prin1 (symbol-value sym))
(princ "\n\n"))
(when (documentation-property sym
'variable-documentation)
(princ (substitute-command-keys
(documentation-property sym
'variable-documentation)))
(princ "\n\n"))
(when (documentation sym)
(princ "\n"))
)
((subrp (symbol-function sym))
(princ "==============================\n")
(unless (documentation sym)
(princ "\n"))
(princ "function - built-in primitive: ")
(prin1 sym)
(princ "\n\n")
(when (documentation sym)
(princ (substitute-command-keys
(documentation sym)))
(princ "\n\n"))
(when (boundp sym)
(princ "-------\n")
(princ "as value: ")
(prin1 (symbol-value sym))
(princ "\n\n"))
(when (documentation-property sym
'variable-documentation)
(princ (substitute-command-keys
(documentation-property sym
'variable-documentation)))
(princ "\n\n"))
(when (documentation sym)
(princ "\n"))
)
((byte-code-function-p (symbol-function sym))
(princ "=====================\n")
(unless (documentation sym)
(princ "\n"))
(princ "function - byte-code: ")
(prin1 sym)
(princ "\n\n")
(when (documentation sym)
(princ (substitute-command-keys
(documentation sym)))
(princ "\n\n"))
(when (boundp sym)
(princ "-------\n")
(princ "as value: ")
(prin1 (symbol-value sym))
(princ "\n\n"))
(when (documentation-property sym
'variable-documentation)
(princ (substitute-command-keys
(documentation-property sym
'variable-documentation)))
(princ "\n\n"))
(when (documentation sym)
(princ "\n"))
)
((functionp sym)
(princ "=================\n")
(unless (documentation sym)
(princ "\n"))
(princ "function - elisp: ")
(prin1 sym)
(princ "\n\n")
(when (documentation sym)
(princ (substitute-command-keys
(documentation sym)))
(princ "\n\n"))
(when (boundp sym)
(princ "-------\n")
(princ "as value: ")
(prin1 (symbol-value sym))
(princ "\n\n"))
(when (documentation-property sym
'variable-documentation)
(princ (substitute-command-keys
(documentation-property sym
'variable-documentation)))
(princ "\n\n"))
(when (documentation sym)
(princ "\n"))
)
(t
(princ "============================\n")
(unless (documentation sym)
(princ "\n"))
(princ "other ~function (aliases??): ")
(prin1 sym)
(princ "\n\n")
(when (documentation sym)
(princ (substitute-command-keys
(documentation sym)))
(princ "\n\n"))
(when (boundp sym)
(princ "-------\n")
(princ "as value: ")
(prin1 (symbol-value sym))
(princ "\n\n"))
(when (documentation-property sym
'variable-documentation)
(princ (substitute-command-keys
(documentation-property sym
'variable-documentation)))
(princ "\n\n"))
(when (documentation sym)
(princ "\n"))
)
)
)
)
)
((boundp sym) ; ALL variables
(cond
((custom-variable-p sym)
(princ "=====================\n")
(unless (documentation-property sym
'variable-documentation)
(princ "\n"))
(princ "user (custom) option: ")
(prin1 sym)
(princ "\n\n")
(princ "---------------------\n")
(princ "value: ")
(prin1 (symbol-value sym))
(princ "\n\n")
(when (documentation-property sym
'variable-documentation)
(princ (substitute-command-keys
(documentation-property sym
'variable-documentation)))
(princ "\n\n\n"))
)
((keywordp sym)
(princ "========\n")
(princ "\n")
(princ "keyword: ")
(prin1 sym)
(princ "\n\n")
)
(t
(princ "=========================\n")
(unless (documentation-property sym
'variable-documentation)
(princ "\n"))
(princ "non-user (setq) variable: ")
(prin1 sym)
(princ "\n\n")
(princ "-------------------------\n")
(princ "value: ")
(prin1 (symbol-value sym))
(princ "\n\n")
(when (documentation-property sym
'variable-documentation)
(princ (substitute-command-keys
(documentation-property sym
'variable-documentation)))
(princ "\n\n\n")))
)
)
((facep sym)
(princ "=====\n")
(princ "\n")
(princ "face: ")
(prin1 sym)
(princ "\n\n")
)
(t
(princ "====================\n")
(princ "\n")
(princ "other (misc) symbol: ")
(prin1 sym)
(princ "\n\n")
)
)
(setq vars (cdr vars))))
(message "Looking up all symbols...done")
(with-current-buffer "*List Symbols*"
(setq buffer-read-only t)))))
;;;;;;;;;;;;;;;;;;;;;;;
(provide 'list-hh-symbols)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; list-hh-symbols.el ends here
- Generating a listing of all symbols (16K+) and labeling subsets, (continued)