Има ли функция в elisp, която изброява всички налични в emacs функции?
Под наличната функция имам предвид всички символи, които могат да се използват като аргументи за (require "some-symbol)
без да получавате грешка (дори ако още не са били заредени).
Отговори:
1 за отговор № 1Интересен въпрос. Е, нека кажем, че просто пресечете load-path
и grep на нещо подобно provide
- Това ли е списъкът с „характеристики“, които търсите?
(dolist (dirname load-path)
(shell-command (concat "grep "(provide" " dirname "/*.el") "tmp")
(switch-to-buffer "tmp")
(append-to-buffer "provided" (point-min) (point-max))
(switch-to-buffer "provided"))
/Users/keith/.emacs.d/slime//hyperspec.el:(provide "hyperspec)
/Users/keith/.emacs.d/slime//slime-autoloads.el: (provide "slime-autoloads))
/Users/keith/.emacs.d/slime//slime.el:(provide "slime)
/Users/keith/.emacs.d/geiser-0.4/elisp//geiser-autodoc.el:(provide "geiser-autodoc)
/Users/keith/.emacs.d/geiser-0.4/elisp//geiser-base.el:(provide "geiser-base)
/Users/keith/.emacs.d/geiser-0.4/elisp//geiser-company.el:(provide "geiser-company)
/Users/keith/.emacs.d/geiser-0.4/elisp//geiser-compile.el:(provide "geiser-compile)
/Users/keith/.emacs.d/geiser-0.4/elisp//geiser-completion.el:(provide "geiser-completion)
/Users/keith/.emacs.d/geiser-0.4/elisp//geiser-connection.el:(provide "geiser-connection)
...
(Изпълняването на това предостави бонуса да ми показва някои остарели директории в моя собствен път на зареждане).
EDIT: Тук е малка версия, включваща предложенията на Bruce и tripleee:
(defun list-features ()
(dolist (dirname load-path)
(shell-command (concat "grep --no-filename --text "(provide\|(autoload" " dirname "/*.(el|elc)") "tmp")
(switch-to-buffer "tmp")
(append-to-buffer "features" (point-min) (point-max)))
;; Remove duplicates from finding provided functions in both .el and .elc files
(switch-to-buffer "features")
(shell-command-on-region (point-min) (point-max) "sort -u" nil t nil nil))
1 за отговор № 2
Има променлива features
това прави точно това.
require
проверява го на повикване. Това е всичко в документа.
1 за отговор № 3
Изпробвайте търсещия: интерактивно,
C-h p изпълнява командата finder-by-keyword, която е интерактивна autoloaded компилира Lisp функция в `finder.el '.
Той е свързан с C-h p, <f1> p, <help> p, <menu-bar> <help-menu> <Намерят-Emacs опаковки>.
(Търсач по дума)
Намерете пакети, отговарящи на дадена ключова дума.
или в код, достъп finder-keywords-hash
след а (load-library "finder-inf")
.