मैं कमांड-लाइन से 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