अंतर्निहित कार्यों और चर के स्रोत कोड पर नेविगेट करें


9

दिन भर मैं लगातार उपयोग कर रहा हूँ C-h fया C-h v( describe-functionऔर describe-variable) कार्य करता है और चर के लिए प्रलेखन को देखने के लिए। अधिक बार नहीं, अगर मुझे मेरी ज़रूरत की सभी जानकारी नहीं मिलती है, तो मैं अंत में फ़ाइल लिंक पर क्लिक करूंगा:

some-random-command is an interactive compiled Lisp function in `some-mode.el'.

और स्रोत कोड पर नेविगेट करें। यह स्थापित पैकेज के लिए काम करता है, लेकिन बिल्ट-इन के लिए काम नहीं करता है। उदाहरण के लिए, describe-functionमेरे द्वारा प्राप्त की जाने वाली कमांड के लिए सहायता पृष्ठ के शीर्ष पर :

describe-function is an interactive compiled Lisp function.

स्रोत कोड के लिए कोई लिंक के साथ। क्या निर्मित पैकेज के स्रोत कोड को जल्दी से नेविगेट करने का कोई तरीका है?

मुझे पता है कि मैं उदाहरण के लिए स्रोत कोड पा सकता हूं /usr/share/emacs/24.5/lisp, और उस निर्देशिका को जल्दी से एक्सेस करने के लिए किसी भी तरीके के साथ आ सकता हूं, लेकिन मैं उत्सुक हूं अगर किसी अंतर्निहित फ़ंक्शन / चर परिभाषा में नेविगेट करने का एक त्वरित और आसान तरीका है सोर्स कोड। धन्यवाद!


5
M-x find-function; M-x find-variable; M-x find-face; M-x find-library। मैं हमेशा Emacs की एक पूरी स्थापना का उपयोग करता हूं, ताकि मुझे हर चीज तक पहुंच प्राप्त हो, और बस अपने खुद के Emacs के निर्माण के बाद मैं C-source कोड पर कॉपी करता हूं और उसका स्थान निर्धारित करता हूं ताकि मुझे C-Source कोड परिभाषाएं भी मिल सकें। find-function-C-source-directoryआपके द्वारा कॉपी किए जाने के बाद C- स्रोत कोड का स्थान सेट करने के लिए चर देखें ।
कानून सूची

1
Emacs की मास्टर शाखा का उपयोग करते हुए, मुझे निम्नलिखित मिलते हैं M-x describe-function: वर्णन-फ़ंक्शन एक इंटरैक्टिव ऑटोलॉइड संकलित लिस्प फ़ंक्शन 'हेल्प-फ़न्स.एलएल' है। और वहां से मैं (या एंटर दबाकर) क्लिक कर सकता हूं help-fns.elऔर फिर कोड के लागू अनुभाग में पहुंचाया जाता हूं। शायद आपके पास कई Emacs संस्करण हैं, और इस समय आपके द्वारा उपयोग किए जा रहे सभी स्रोत कोड स्थापित नहीं हैं?
कानून सूची

यदि आप उस व्यवहार को प्राप्त करते हैं जब आप Emacs का उपयोग करना शुरू करते हैं emacs -Q(कोई init फ़ाइल नहीं), या यदि आप इसे एक ऐसी रेसिपी के साथ फिर से शुरू कर सकते हैं, जो इसके साथ शुरू होती है emacs -Q(जैसे यह कहना कि आपके द्वारा लोड किए गए पुस्तकालयों और उन्हें कैसे लोड करते हैं आदि), तो कृपया बग दर्ज करने पर विचार करें। रिपोर्ट: M-x report-emacs-bug
ड्रयू

4
नायब IIRC, डेबियन के लिए Emacs संकुल (शायद अन्य OSs के रूप में) .elफ़ाइलों को अलग कर देता है (वैकल्पिक के रूप में माना जाता है) .elcफ़ाइलों से (अनिवार्य), जैसे कि आपको उन्हें प्राप्त करने के लिए एक या अधिक अतिरिक्त पैकेज स्थापित करने की आवश्यकता है। यदि आपने अपने OS पैकेज मैनेजर से Emacs प्राप्त किए हैं, तो शायद यह इसे समझाता है।
फिल्स

1
आप बायनेरिज़ (निष्पादन योग्य अनुमतियों के साथ) - emacs या emacsclient के नाम के लिए एक grep (या अन्य खोज उपयोगिता) कर सकते हैं - और देखें कि वे आपकी हार्ड ड्राइव पर कहाँ हैं। मैं खुद को पूरी तरह से अपने स्वयं के समर्पित फ़ोल्डर में संग्रहीत करता हूं। उदाहरण के लिए, मेरे पास वह संस्करण है जो मेरे ऑपरेटिंग सिस्टम के साथ भेज दिया गया है - /usr/bin/emacsऔर /usr/bin/emacsclient, और मेरे पास एक संस्करण है जो अच्छी तरह से OSX अनुप्रयोग फ़ोल्डर में समाप्त हो रहा है ।app में समाप्त हो रहा है - यानी, /Applications/Emacs.app(उस Emacs.app के अंदर, बायनेरिज़ और सभी हैं। source-code files)।
कानून व्यवस्था

जवाबों:


7

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

कई वितरण एक अलग पैकेज में लिस्प स्रोत फ़ाइलों को शिप करते हैं, क्योंकि हर उपयोगकर्ता उन्हें नहीं चाहता है और वे भारी हैं। उदाहरण के लिए, डेबियन और डेरिवेटिव पर, इंस्टॉल करें emacs24-el। यदि आप स्रोत से Emacs बनाते हैं, make installतो Elisp स्रोतों की प्रतिलिपि बनाते हैं।

यदि आप आदिम (सबरूटीन और विशेष रूपों) के स्रोत कोड को देखना चाहते हैं, तो Emacs को C स्रोत खोजने में सक्षम होने की आवश्यकता है। जब तक आप स्रोत से स्थापित नहीं हो जाते, वे सामान्य रूप से उपलब्ध नहीं होते हैं।

Emacs निर्देशिका में लिस्प स्रोतों के लिए दिखता है load-path। किसी फ़ंक्शन या चर के foo.elc,लिए फ़ाइल से लोड किया जा सकता है foo.elया foo.el.gz। Emacs C स्रोतों के अंतर्गत दिखता है source-directory, और अगर यह स्रोत फ़ाइल नहीं ढूँढता है तो आपको एक अलग निर्देशिका के लिए संकेत देता है।


हालाँकि मैं शपथ ले सकता था कि मैंने Emacs के इस संस्करण को स्रोत से बनाया था, जब मैं M-x emacs-versionकहता हूं कि इसे "Debian द्वारा संशोधित" अंत में कहा गया है, जो यह संकेत देगा कि मैं अपने OS के (Ubuntu के) पैकेज मैनेजर से एक संस्करण का उपयोग कर रहा हूँ, है ना?
इलेथन

@ एलेटन यदि यह कहता है कि "डेबियन द्वारा संशोधित" तो आपने उबंटू पैकेज को स्थापित या कम से कम बनाया है। आपने इसे स्रोत से बनाया होगा (हो सकता है कि आप अपने उबंटू रिलीज में एक से एक नया संस्करण चाहते थे)। आप चल रहे हैं /usr/bin/emacsया /usr/local/bin/emacs?
गिलेस एसओ- बुराई को रोकना '

1

यदि आप स्रोत कोड में जल्दी से कूदने के तरीकों की तलाश कर रहे हैं, तो वहाँ भी हैं find-function-at-pointऔर find-variable-at-pointजो कर्सर के नीचे प्रतीक की परिभाषा पर कूदेंगे - आप उन्हें उदाहरण के लिए, Ch Cf और Ch Cv से बाँध सकते हैं।

या आप elisp-slime-nav की कोशिश कर सकते हैं , जो M- का उपयोग करता है। एक प्रतीक की परिभाषा में कूदने के लिए, और एम-, लौटने के लिए - यह चर, कार्यों, पुस्तकालयों और चेहरों पर नेविगेट करता है - https://github.com/purcell/elisp-slime-nav/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.