"ओपन-ए" के साथ खोले जाने पर Emacs एक नए फ्रेम में फाइलें खोलता है


20

मैं कमांड-लाइन से 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बफर की तुलना में बहुत अधिक विस्तृत लॉग प्राप्त किया जाए ? ऊपर के सत्र के दौरान उस बफ़र के लिए कुछ भी दिलचस्प नहीं है, इसलिए मुझे नहीं पता कि मैं कुछ एमएसीएस लिस्प को कैसे हैक कर सकता हूं जो मैं करता हूं ...

धन्यवाद!


मैं OSX के बारे में एक बात नहीं जानता, इसलिए मैं कुछ भी ठोस प्रदान नहीं कर सकता। यदि मैं इसे डीबग करना था, हालांकि, मैं कुछ सिंटैक्स त्रुटि को फेंक दूंगा find-fileऔर फिर debug-on-errorकुछ सुराग के लिए स्टैक ट्रेस की जांच करने के लिए सेट कर दूंगा कि कैसे Emacs को आमंत्रित किया जा रहा है। find-fileलिस्प स्क्रैच बफर में फंक्शन डेफिनेशन को कॉपी करने errorऔर उसमें कॉल जोड़ने के लिए एक एरर जोड़ना उतना ही आसान हो सकता है (जैसे (error "cause stack trace")। कभी भी find-file
कवर

@ जो धन्यवाद! यह एक बहुत अच्छा विचार है, मैं इसे भविष्य के लिए ध्यान में रखूंगा। मैं वास्तव में उपयोग करने के लिए कोशिश कर रहा समाप्त हो गया emacsclientफिर से, और इसके साथ शुरू करने (server-start)में मेरी init.elतुलना में बेहतर काम कर रहा है emacs --daemonबूट अप, जो है क्या मैं पहली बार मैंने कोशिश की कोशिश कर रहा था पर emacsclient
मचिअकिग

जवाबों:


26

उत्तर यहां है: मूल फ्रेम में "ओपन टू" के साथ चर

यह emacs के नए संस्करणों में डिफ़ॉल्ट सेटिंग्स में बदलाव है। जोड़ें:

(setq ns-pop-up-frames nil)

.emacs फ़ाइल के लिए।

यह पाकर बहुत खुश हैं।


यह बहुत मददगार था! एक साथ अन्य open -a /Applications/Emacs.app $1चीजों के साथ ठीक काम करने लगता है! ध्यान दें कि मैं अपने init में सर्वर शुरू करता हूं, उदाहरण के लिए git के लिए emacs उपलब्ध हैं।
Dror
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.