help-gnu-emacs
[Top][All Lists]
Advanced

[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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]