[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: |
Fri, 18 Apr 2014 19:50:27 -0700 (PDT) |
User-agent: |
G2/1.0 |
> > The currently-in-development Emacs 24.4 includes `macrop'[1]. I can't
> > vouch for what (if any) other versions it's appropriate for, but it did
> > succeed in a couple very basic experiments on 24.3.1.
> > [1]
> > http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/subr.el?h=emacs-24#n2664
OK, just dropped that snippet at the top of my listing.el file and macrop works
a treat, thanks!
Here's a shortened listing of the cond-tree for each symbol type and my
taxonomy if anyone cares to comment further on my terminology:
((fboundp sym) ; ALL functions
((commandp sym)
((keymapp sym)
(princ "command - keymap:\t\t\t\t\t")
((subrp (symbol-function sym))
(princ "command - built-in primitive:\t\t")
((byte-code-function-p (symbol-function sym))
(princ "command - byte-code:\t\t\t")
((functionp sym)
(princ "command - elisp:\t\t\t")
(t ; (non-command) functions
((macrop sym)
(princ "function - macro:\t\t\t")
((keymapp sym)
(princ "function - keymap:\t\t\t\t")
((subrp (symbol-function sym))
(princ "function - built-in primitive:\t\t")
((byte-code-function-p (symbol-function sym))
(princ "function - byte-code:\t\t\t")
((functionp sym)
(princ "function - elisp:\t\t\t")
(t
(princ "other ~function (aliases??):\t")))
)
((boundp sym) ; ALL variables
((custom-variable-p sym)
(princ "user (custom) option:\t\t\t")
((keywordp sym)
(princ "keyword:\t\t\t\t\t")
(t
(princ "non-user (setq) variable:\t\t"))
)
((facep sym)
(princ "face:\t\t\t\t\t")
(t
(princ "other (misc) symbol:\t\t\t")
)
----------------------
And current counts - note will probably drop outputting the first category to
the list unless someone suggests another meaningful symbol type to track
other (misc): 8734
keyword: 323
faces: 50
variables: 2542
user (custom) option: 659
non-user (setq) variable: 1183
functions
(non-command): 4277
keymap: 34
built-in primitive: 1022
byte-code: 2342
other (bound?) function: 335
command: 2373
keymap:3
built-in primitive: 88
byte-code: 762
other command: 1561
macro:298
===================
and finally the code itself if anyone wants to suggest other improvements or to
give it a whirl on their setup.
-------------------
(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 - names only"
(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)
(cond
((keymapp sym)
(princ "=======\n")
(princ "\n")
(princ "command - keymap:\t\t\t\t\t")
(prin1 sym)
(princ "\n\n"))
((subrp (symbol-function sym))
(princ "=============================\n")
(princ "command - built-in primitive:\t\t")
(prin1 sym)
(princ "\n\n"))
((byte-code-function-p (symbol-function sym))
(princ "====================\n")
(princ "command - byte-code:\t\t\t")
(prin1 sym)
(princ "\n\n"))
((functionp sym)
(princ "================\n")
(princ "command - elisp:\t\t\t")
(prin1 sym)
(princ "\n\n"))
(t
(princ "===============\n")
(princ "other command:\t\t\t\t")
(prin1 sym)
(princ "\n\n"))
)
)
(t ; (non-command) functions
(cond
((macrop sym)
(princ "================\n")
(princ "function - macro:\t\t\t")
(prin1 sym)
(princ "\n\n"))
((keymapp sym)
(princ "==================\n")
(princ "\n")
(princ "function - keymap:\t\t\t\t")
(prin1 sym)
(princ "\n\n"))
((subrp (symbol-function sym))
(princ "==============================\n")
(princ "function - built-in primitive:\t\t")
(prin1 sym)
(princ "\n\n"))
((byte-code-function-p (symbol-function sym))
(princ "=====================\n")
(princ "function - byte-code:\t\t\t")
(prin1 sym)
(princ "\n\n"))
((functionp sym)
(princ "=================\n")
(princ "function - elisp:\t\t\t")
(prin1 sym)
(princ "\n\n"))
(t
(princ "============================\n")
(princ "other ~function (aliases??):\t")
(prin1 sym)
(princ "\n\n"))
)
)
)
)
((boundp sym) ; ALL variables
(cond
((custom-variable-p sym)
(princ "=====================\n")
(princ "user (custom) option:\t\t\t")
(prin1 sym)
(princ "\n\n"))
((keywordp sym)
(princ "========\n")
(princ "\n")
(princ "keyword:\t\t\t\t\t")
(prin1 sym)
(princ "\n\n"))
(t
(princ "=========================\n")
(princ "non-user (setq) variable:\t\t")
(prin1 sym)
(princ "\n\n"))
)
)
((facep sym)
(princ "=====\n")
(princ "\n")
(princ "face:\t\t\t\t\t")
(prin1 sym)
(princ "\n\n"))
(t
(princ "====================\n")
(princ "other (misc) symbol:\t\t\t")
(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 'hh-list-symbols)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; hh-list-symbols.el ends here
- Re: Generating a listing of all symbols (16K+) and labeling subsets, (continued)
Re: Generating a listing of all symbols (16K+) and labeling subsets, Robert Thorpe, 2014/04/19
Generating a listing of all symbols (16K+) and labeling subsets, hansbkk, 2014/04/18
Generating a listing of all symbols (16K+) and labeling subsets, Hans BKK, 2014/04/18
- Re: Generating a listing of all symbols (16K+) and labeling subsets, Hans BKK, 2014/04/18
- Re: Generating a listing of all symbols (16K+) and labeling subsets, Hans BKK, 2014/04/18
- Re: Generating a listing of all symbols (16K+) and labeling subsets, Hans BKK, 2014/04/18
- Re: Generating a listing of all symbols (16K+) and labeling subsets, Hans BKK, 2014/04/19
- Re: Generating a listing of all symbols (16K+) and labeling subsets, Hans BKK, 2014/04/23
Re: Generating a listing of all symbols (16K+) and labeling subsets, Hans BKK, 2014/04/23
Re: Generating a listing of all symbols (16K+) and labeling subsets, Hans BKK, 2014/04/23