क्या Emacs में किसी मौजूदा फ़ंक्शन की परिभाषा को प्रिंट करने का कोई तरीका है?


10

मैं Emacs में मौजूदा फ़ंक्शन की परिभाषा देखना चाहता हूं। क्या यह संभव है?

मैंने कोशिश की है C-h d function-name RET, लेकिन यह केवल फ़ंक्शन के लिए प्रलेखन स्ट्रिंग लौटाता है, न कि वास्तविक फ़ंक्शन।

मैं बैश के typeआदेश के समान कुछ सोच रहा हूं , जो एक फ़ंक्शन की पूरी परिभाषा वापस कर देगा।

(बैकस्टोरी को शर्मिंदा करने वाला: मैंने गलती से एक .emacsगैर-वर्किंग संस्करण के साथ अपनी फ़ाइल में एक कार्यशील फ़ंक्शन पर लिखा था । मूल फ़ंक्शन अभी भी स्मृति में है! और यह काम करता है! लेकिन मैं अपने जीवन के लिए याद नहीं कर सकता कि मैंने यह कैसे किया।)


1
यदि आपने .emacsएक बफर में खोला है, तो पागलों की तरह पूर्ववत कोशिश करें।
गिल्स एसओ- बुराई को रोकना '

जवाबों:


10

यदि आप लिखते हैं C-h f function-name RET, तो आपको फ़ंक्शन स्रोत के लिंक के साथ, यदि उपलब्ध हो, तो आपको फ़ंक्शन के दस्तावेज़ मिल जाएंगे।

मुझे नहीं लगता कि एक आसान लिस्प फ़ंक्शन है जिसे आप किसी फ़ंक्शन के स्रोत के स्थान को प्राप्त करने के लिए कॉल कर सकते हैं; लुकअप बाकी सिस्टम के साथ बहुत इंटरफिटेड है। find-lisp-object-file-nameमुख्य फ़ंक्शन है जो यह पता लगाने का प्रयास करता है कि फ़ंक्शन का स्रोत कहां है।

जब तक function-nameएक आदिम (Emacs के C स्रोत में परिभाषित) नहीं है, तो आप इसके कोड को (symbol-function 'function-name)या अधिक सामान्यतः (अप्रत्यक्ष-फ़ंक्शन 'फ़ंक्शन-नाम) के साथ देख सकते हैं । हालाँकि, यदि फ़ंक्शन बाइट-संकलित था, तो आप देखेंगे कि इसका बाइटकोड है।


1
धन्यवाद! (symbol-function 'function-name)वास्तव में मैं क्या देख रहा था! इसके अलावा, ऐसा लगता है कि यदि आपको वास्तव में सी कार्यों के लिए स्रोत की आवश्यकता है, तो आप ओलेग के जवाब से जानकारी का उपयोग करके प्राप्त कर सकते हैं।
मीका आर लेडबेटर

धन्यवाद! साथ ही, यदि फ़ंक्शन ऑटोलॉइड है, तो आपको स्रोत कोड प्राप्त करने से पहले एक बार कॉल करने की आवश्यकता है।
गेरहार्ड बर्गर

3

M-x find-function बिंदु के पास फ़ंक्शन की परिभाषा देता है।

प्रलेखन से:

स्रोत फ़ाइल को बिंदु के पास फ़ंक्शन की परिभाषा से युक्त करता है और परिभाषा से पहले एक बफर और स्थानों में बिंदु (`फ़ंक्शन-तथाकथित-बिंदु द्वारा चयनित) के पास होता है। आगे बढ़ने से पहले निशान सेट करें, अगर बफर पहले से मौजूद है।

यदि आप C में लागू किए गए कार्यों को भी शामिल करना चाहते हैं, तो आपको अपनी .emacs फ़ाइल में निम्न जोड़ना होगा:

(setq find-function-C-source-directory (concat (getenv "emacs_home") "/path/to/source-dir"))

हम्म। यह जानना अच्छा है, लेकिन मुझे लगता है कि यह केवल अंतर्निहित कार्यों के लिए काम करता है, जो कि मैं नहीं देख रहा था।
मीका आर लेडबेटर

1
यह यूज़र-डिफ़ाइंड फ़ंक्शंस के लिए भी काम करता है
ओलेग पावलिव 15'11 '
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.