2013-08-10 9 views
5

जब मैं C-h f या या C-h v करता हूं, तो सहायता मुझे बताती है कि प्रतीक किस फ़ाइल को परिभाषित किया गया है या कहां से इसे स्वत: लोड किया जाएगा। मैं प्रोग्रामिंग के समान जानकारी कैसे प्राप्त कर सकता हूं?Emacs Lisp में, यह पता लगाने के लिए कि प्रतीक कहां परिभाषित किया गया है

उत्तर

9

कुछ खुदाई पता चलता है कि

(find-lisp-object-file-name object type) 

चाल करना चाहिए।

(find-lisp-object-file-name 'goto-line 'function) 
;; => "/usr/local/Cellar/emacs/24.3/share/emacs/24.3/lisp/simple.el" 

संपादित करें:: मैं इस जानकारी को कैसे पता चला: एक उदाहरण के रूप

सबसे पहले मैं C-h k C-h f किया यह पता लगाने की क्या C-h f के लिए बाध्य है। परिणाम describe-function है, तो इसके लिए स्रोत देखने के लिए C-h f describe-function करें। मैंने देखा कि यह अनिवार्य रूप से describe-function-1 के आसपास एक इंटरैक्टिव रैपर था, इसलिए मैं इसके लिए स्रोत पर कूद गया। वहाँ वहाँ में सामान का एक बहुत है, लेकिन उपयुक्त पंक्ति है:

(file-name (find-lisp-object-file-name function def)) 

खुलासा कि find-lisp-object-file-name आंतरिक रूप से यह काम करने के लिए इस्तेमाल किया कार्य है।

+1

'(लगता है-तुतलाना-वस्तु-फ़ाइल-नाम 'गोटो लाइन' समारोह) मेरे लिए' 'रिटर्न nil'। '(find-lisp-object-file-name 'गोटो-लाइन (प्रतीक-फ़ंक्शन' गोटो-लाइन)) 'फ़ाइल नाम लौटाता है, जैसा कि उनके उत्तर में @ jisang-yoo द्वारा वर्णित है। – mgalgs

2

जेम्स पोर्टर के जवाब देने के लिए जोड़ने के लिए

;;; 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") 
संबंधित मुद्दे