मैं कमांड-लाइन से Emacs को आमंत्रित करने में सक्षम होना चाहता हूं, और या तो ग्राफिकल Emacs शुरू करना चाहता हूं अगर यह नहीं चल रहा है या पहले से चल रहे Emacs में किसी फ़ाइल पर जाएँ। मैंने ऐसा करने की कोशिश की emacsclientजिसके साथ मुझे पता है कि ऐसा करने का "सही" तरीका है, लेकिन मुझे ओएस एक्स पर इसके साथ बहुत सारी समस्याएं थीं, यह बेतरतीब ढंग से दुर्घटनाग्रस्त हो जाएगा, या emacs --daemonमशीन को बंद करने या मशीन को रिबूट करने के दौरान प्रक्रिया लटकाएगी, और सामान्य चंचलता। हालांकि मैं उस काम को करना चाहता हूं, इस समय open -aवास्तव में बहुत बेहतर काम करता है, इस एक समस्या को छोड़कर मैं नीचे बताऊंगा:
open -aइस तरह का उपयोग करना :
$ open -a Emacs file.txt
अगर यह नहीं चल रहा है, तो Emacs शुरू करेंगे और फ़ाइल पर जाएँ। लेकिन अगर मैं ऐसा करता हूं जब वर्तमान बफर नहीं है *scratch*तो फ़ाइल एक नए फ्रेम (यानी एक नई प्रणाली विंडो) में खोली जाती है।
यहाँ एक उदाहरण सत्र है:
$ open -a Emacs file.txt
यह Emacs को शुरू करता है और file.txt को खोलता है, इसलिए इसमें इस बफर के साथ एक सिंगल फ्रेम है। यदि मैं *scratch*बफ़र पर जाऊँ, और यह करूँ:
$ open -a Emacs file1.txt
यह एक ही फ्रेम में इस फाइल को खोलता है। अब इस फ़ाइल के साथ एक ही फ्रेम खुला है, और अगर मैं ऐसा करूँ:
$ open -a Emacs file2.txt
यह एक नया फ्रेम खोलता है, जिसके परिणामस्वरूप दो फ्रेम एक साथ खुलते हैं।
मैंने --argsस्विच करने के लिए Emacs को कमांड-लाइन आर्ग्स के साथ फ़िडलिंग की कोशिश की है open, लेकिन यह बाद की कॉल के लिए काम नहीं करता है, उदाहरण के लिए:
$ open -a Emacs --args --eval='(print "foo")'
$ open -a Emacs --args --eval='(print "bar")'
यह केवल संदेश बफर में "फू" प्रिंट करता है ... दूसरी बार Emacs को केवल अग्रभूमि में लाया जाता है, लेकिन कोई संदेश मुद्रित नहीं होता है।
मुझे यकीन नहीं है कि कैसे openउन अनुप्रयोगों के साथ संचार होता है जो पहले से चल रहे हैं, क्या किसी को पता है कि मैं कैसे पता लगा सकता हूं? या क्या कोई तरीका है कि Messagesबफर की तुलना में बहुत अधिक विस्तृत लॉग प्राप्त किया जाए ? ऊपर के सत्र के दौरान उस बफ़र के लिए कुछ भी दिलचस्प नहीं है, इसलिए मुझे नहीं पता कि मैं कुछ एमएसीएस लिस्प को कैसे हैक कर सकता हूं जो मैं करता हूं ...
धन्यवाद!
emacsclientफिर से, और इसके साथ शुरू करने (server-start)में मेरी init.elतुलना में बेहतर काम कर रहा है emacs --daemonबूट अप, जो है क्या मैं पहली बार मैंने कोशिश की कोशिश कर रहा था पर emacsclient।
find-fileऔर फिरdebug-on-errorकुछ सुराग के लिए स्टैक ट्रेस की जांच करने के लिए सेट कर दूंगा कि कैसे Emacs को आमंत्रित किया जा रहा है।find-fileलिस्प स्क्रैच बफर में फंक्शन डेफिनेशन को कॉपी करनेerrorऔर उसमें कॉल जोड़ने के लिए एक एरर जोड़ना उतना ही आसान हो सकता है (जैसे(error "cause stack trace")। कभी भीfind-file