Quando faccio C-h f
o C-h v
, la Guida mi dice in quale file è definito il simbolo o da dove verrà caricato automaticamente. Come posso trovare le stesse informazioni a livello di programmazione?In Emacs Lisp, come trovare dove è definito il simbolo
5
A
risposta
9
qualche scavo rivela che
(find-lisp-object-file-name object type)
dovrebbe fare il trucco. Per fare un esempio:
(find-lisp-object-file-name 'goto-line 'function)
;; => "/usr/local/Cellar/emacs/24.3/share/emacs/24.3/lisp/simple.el"
EDIT: Come ho scoperto questa informazione:
Prima ho fatto C-h k C-h f
di capire cosa C-h f
è destinato a. Il risultato è describe-function
, quindi facciamo C-h f describe-function
per vedere l'origine per quello. Ho notato che si trattava essenzialmente di un wrapper interattivo attorno allo describe-function-1
, quindi sono passato al sorgente per quello. C'è un sacco di roba lì, ma la linea è pertinente:
(file-name (find-lisp-object-file-name function def))
rivelando che find-lisp-object-file-name
è la funzione utilizzata per fare questo lavoro internamente.
2
Per aggiungere alla risposta di James Porter
;;; run from: emacs -q
(require 'cl) ; for incf
(print (list
;; goto-line is a function defined in simple.el
(find-lisp-object-file-name 'goto-line (symbol-function 'goto-line))
;; print is a function defined in C
(find-lisp-object-file-name 'print (symbol-function 'print))
;; rx is an autoload from rx.el
(find-lisp-object-file-name 'rx (symbol-function 'rx))
;; incf is an alias for cl-incf defined in cl.el
(find-lisp-object-file-name 'incf (symbol-function 'incf))
;; cl-incf is defined in cl-lib.el
(find-lisp-object-file-name 'cl-incf (symbol-function 'cl-incf))))
;; => ("c:/run/Emacs/lisp/simple.el" C-source
;; "c:/run/Emacs/lisp/emacs-lisp/rx.el" "c:/run/Emacs/lisp/emacs-lisp/cl.el"
;; "c:/run/Emacs/lisp/emacs-lisp/cl-lib.el")
(print (list
;; print-circle is a variable defined in C
(find-lisp-object-file-name 'print-circle 'defvar)
;; indent-line-function is a variable defined in indent.el
(find-lisp-object-file-name 'indent-line-function 'defvar)))
;; => (C-source "c:/run/Emacs/lisp/indent.el")
Problemi correlati
- 1. Dove è definito __dso_handle?
- 2. Vedere dove è definito un simbolo in irb
- 3. Differenza tra simbolo e nome della variabile in Emacs Lisp
- 4. vim/macvim: individuare dove è definito un metodo/simbolo
- 5. PPRINT in Emacs Lisp?
- 6. nm: "U" Il simbolo non è definito
- 7. getActivity() dove è definito?
- 8. Come copiare negli appunti in Emacs Lisp
- 9. dove è definito Enum.values ()?
- 10. Dove posso trovare un lettore Lisp in C?
- 11. Dove è definito std :: copy_exception?
- 12. Come aggiungo le date in Emacs usando Emacs Lisp?
- 13. Emacs senza Lisp
- 14. Dove è definito "id" letterale?
- 15. Evidenziazione sintassi Emacs Lisp
- 16. Dove è definito instance_eval in Ruby 1.9.2?
- 17. Come ottenere il testo selezionato in Emacs Lisp?
- 18. Dove C++ size_t è definito in linux
- 19. Che cosa è esattamente un simbolo in lisp/schema?
- 20. Controllare se è stato definito un simbolo
- 21. findViewById() restituisce impossibile trovare il simbolo, ma l'ID è definito nel layout?
- 22. Errore "impossibile trovare il simbolo"
- 23. ___sincos_stret simbolo non definito durante il collegamento
- 24. Dove è definito l'operatore == nella classe "oggetto"?
- 25. Converti simbolo in stringa in Elisp
- 26. Date e orari in Emacs Lisp
- 27. Come fare riferimento al file attualmente caricato in Emacs Lisp?
- 28. Emacs Lisp: valuta variabile in alist
- 29. Schema dialetto di Lisp in Emacs
- 30. Sovrascrittura di una funzione in Emacs Lisp
'(find-lisp-oggetto-file-name funzione 'goto-line')' restituisce 'quelle negative per me. '(find-lisp-object-file-name 'goto-line (funzione-simbolo' goto-line))' restituisce il nome del file, come descritto da @ jisang-yoo nella sua risposta. – mgalgs