2011-04-06 16 views
37

मैं म्यूट में ईमेल संपादित करने के लिए emacsclient का उपयोग करना चाहता हूं।केवल emacs सर्वर को कैसे प्रारंभ करें यदि यह प्रारंभ नहीं हुआ है?

मैं .emacs

(server-start)

में यह जोड़ा और .muttrc में मैं जोड़ा

set editor="emacsclient -nw %s"

ऐसा लगता है कि वे काम करते हैं। जब मैं एक दूसरा Emacs शुरू करता हूं, तो यह शिकायत करता है कि पहले से ही एक सर्वर चल रहा है, इसलिए यह त्रुटियों को हल करता है। (server-start) केवल तभी करना है जब सर्वर पहले से शुरू नहीं हुआ है?

धन्यवाद

उत्तर

42

Emacs डेमॉन एक बहुत ही सरल तरीके से स्वचालित रूप से शुरू किया जा सकता:

+0

यह एक अच्छा समाधान है। 'emacsclient -c' भी काम करता है, और ग्राफिकल क्लाइंट का समर्थन करता है। हालांकि, आप मौजूदा emacs फ्रेम में एक फ़ाइल खोलने के बारे में कैसे जाएंगे (कहें, दूसरे टर्मिनल में)। वर्तमान में, मेरे पास 'e' नामक एक बैश स्क्रिप्ट है जो यह देखने के लिए जांचती है कि पहला तर्क '-o' है (अन्य के लिए) और' emcsclient' को बिना' -c' के चलाता है। उपनाम का उपयोग करके कोई बेहतर तरीका है, कि आप '-t' को ओवरराइड कर सकते हैं और मौजूदा फ्रेम को फ़ाइल खोलने का कारण बन सकते हैं? – edam

+0

महान उत्तर के लिए धन्यवाद :) – nXqd

+0

@edam यह सुनिश्चित नहीं है कि आपको अपना जवाब मिल गया है, लेकिन ऐसा लगता है कि आप emacsclient पर स्विच नहीं करना चाहते हैं।यह बताने में थोड़ा मुश्किल है क्योंकि आपकी टिप्पणी एक खिड़की वाले ग्राफिकल उदाहरण के साथ टर्मिनल में एक गैर ग्राफिकल emacs उदाहरण के बीच भेद को धुंधला लगती है। पूर्व के लिए है, -सी बाद के लिए है। – Daniel

6

समस्या तो यह है कि Emacs पृष्ठभूमि में चलता है किसी भी खोल या टर्मिनल में के माध्यम से

emacs --daemon 

alltogether से बचें। इस तरह emacsclient हमेशा खुश रहता है क्योंकि कनेक्ट करने के लिए हमेशा एक Emacs सर्वर होता है।

यह एमाक्स है, वहां एक ऐसा फ़ंक्शन भी है जो सर्वर की आवश्यकता होने पर ही शुरू होता है लेकिन मुझे अभी इसका नाम याद नहीं है। मैं --daemon विकल्प खुशी से अपने आप को खुशी से उपयोग करता हूं।

(load "server") 
(unless (server-running-p) (server-start)) 
51

इस कोड को सर्वर केवल अगर यह नहीं चल रहा है शुरू होता है। बस/.zshrc/जो कुछ भी

export ALTERNATE_EDITOR="" 

अब जब आप emacsclient -t/-c सर्वर प्रारंभ होगा आह्वान (emacs --daemon के साथ) यह पहले से ही नहीं चल रहा है, तो अपने .bashrc में जोड़ना।

मैं भी इस खोल काम उर्फ ​​

alias e='emacsclient -t' 

ध्यान दें कि Emacs 23 के बाद से इस डेमॉन मोड में Emacs उपयोग करने के लिए पसंदीदा तरीका है पाते हैं। (start-server) अब ज्यादातर बहिष्कृत है।

+2

यह एकमात्र विकल्प है जो वर्तमान में विंडोज़ पर काम करता है क्योंकि 'emacs --daemon' कहता है कि यह प्लेटफ़ॉर्म -डामन ध्वज का समर्थन नहीं करता है। – legends2k

+0

@ legends2k, विंडोज़ पर आप' emacs --funcall सर्वर-प्रारंभ भी कर सकते हैं ', लेकिन मैं मानता हूं कि यह बेहतर है और क्रॉस-प्लेटफार्म काम करता है। – harpo

9

देर से उत्तर देने वाला थोड़ा सा, लेकिन यहां समाधान है जो मेरे लिए काम करता है। जब भी मैं emacsclient शुरू करता हूं, मैं emacsclient -a '' -c का उपयोग करता हूं -a '' किसी मौजूदा सर्वर से कनेक्ट करने का प्रयास करने के लिए emacsclient को बताता है, और यदि कोई सर्वर मौजूद नहीं है, तो एक प्रारंभ करें और उससे कनेक्ट करें।

+0

'-a' 'विकल्प बहुत अच्छा है। ध्यान दें कि '-c' हमेशा एक नया फ्रेम बनाते हैं। यदि आम तौर पर मौजूदा emacs फ्रेम में फ़ाइल को संपादित करना चाहते हैं, तो मैं इस विकल्प को छोड़ देता हूं –