Emacsclient: एक एकल emacs स्टार्ट अप से हर समय प्रक्रिया करता है और GUI को कभी भी बंद या बेहतर नहीं करता है


9

चूँकि Emacsclient लंबे पैकेज लोडिंग समय को तेजी से संभाल सकता है, मैं वास्तव में कम से कम एक एमएसीएस प्रक्रिया रखना चाहता हूं , और अधिकांश समय केवल एक एमएसीएस प्रक्रिया , एक पृष्ठभूमि प्रक्रिया के रूप में खुली रहती है और जीयूआई को बेहतर तरीके से छिपाती है।

अभी मैंने निम्न फ़ंक्शन को .bashrc में परिभाषित किया है:

emc () 
{ 
    if [[ $# -eq 0 ]]; then
        emacs --eval "(suspend-frame)" &
        return
    fi
    args=($*);
    setsid emacsclient -c -e "(find-file \"${args[*]}\")"
}

और भी .bashrc में निम्न पंक्ति है:

emc

तो हर बार जब मैं एक खोल को खोलता हूं, तो मैं एक नई emacs प्रक्रिया समाप्त करूंगा।

समस्या यह है कि कई खोलों को खोलने के बाद मेरे पास कई अतिरिक्त अनावश्यक एमएसीएस प्रक्रिया होगी। हालाँकि, मैं केवल एक ही emacs प्रक्रिया को बनाए रखना चाहता हूं जो स्टार्टअप से हर समय GUI को बेहतर तरीके से छिपाती है


5
मैं इसके emacs --eval "(suspend-frame)"बजाय अभ्यास से परिचित नहीं हूं emacs --daemon( emacswiki.org/emacs/EmacsAsDaemon )। वहाँ एक कारण है कि आप एक डेमन के रूप में emacs आह्वान नहीं है? आप pgrep -U `whoami` emacs || emacs --daemon &यह सुनिश्चित करने के लिए कुछ का उपयोग कर सकते हैं कि यह चल रहा है।
इबपा

की जाँच करें एमजे दीवार की पटकथा Emacs ग्राहक का उपयोग करने के लिए।
तियानजियांग जिओनग

जवाबों:


13

जब मैं लॉगिन करता हूं तो मैं एक एमएसीएस डेमॉन शुरू करता हूं। जहाँ आप यह कमांड डालते हैं वह आपके डेस्कटॉप मैनेजर पर निर्भर करता है। मैं उपयोग करता हूं i3, जो लॉगिन पर स्क्रिप्ट चलाने के लिए कॉन्फ़िगर किया गया है जिसमें निम्नलिखित शामिल हैं:

emacs --daemon &

उस के साथ, पृष्ठभूमि में emacs हमेशा चल रहा होता है, और मैं emacsclient -c -nविंडो मैनेजर में सुविधाजनक कीबाइंडिंग के साथ एक नया क्लाइंट खोलता हूं । यदि आप एक टर्मिनल में काम कर रहे हैं, तो आपको केवल एक साधारण उपनाम की आवश्यकता है alias emc='emacsclient', जैसे संभवतः -n, -cया -tतर्कों के आधार पर कि आप इसका उपयोग कैसे करते हैं।

मैनुअल में इमैसेक्लाइंट के विकल्पों की जाँच करें: ( एमएसीएस ) एमएसीएस द्वारा, एमाक्स से सुलभ विकल्पC-h r m emacsclient options <enter> । यदि आप -aपहले से ही नहीं चल रहे हैं, और -cया -tकिसी मौजूदा फ्रेम को फिर से उपयोग करने के बजाय एक नया फ्रेम या टर्मिनल क्लाइंट खोलने के लिए , आप स्वचालित रूप से एक emacs डेमन शुरू करने के लिए ध्वज का उपयोग कर सकते हैं :

'-आदेश'
'--Alternate संपादक = कमांड'
     यदि 'Emacsclient' Emacs से संपर्क करने में विफल रहता है तो चलाने के लिए एक कमांड निर्दिष्ट करें।
     यह एक स्क्रिप्ट में 'इमैसक्लिएंट' चलाते समय उपयोगी है।

     एक विशेष अपवाद के रूप में, यदि COMMAND खाली स्ट्रिंग है, तो
     'emacsclient' Emacs को डेमॉन मोड ('emacs --daemon') और के रूप में शुरू करता है
     फिर से कनेक्ट करने का प्रयास करता है।

'-सी'
'--Create फ्रेम'
     एक मौजूदा का उपयोग करने के बजाय एक नया ग्राफिकल "क्लाइंट फ़्रेम" बनाएं
     Emacs फ्रेम। 'Cx C-c' के विशेष व्यवहार के लिए नीचे देखें a
     ग्राहक फ्रेम। यदि Emacs एक नया ग्राफिकल फ्रेम नहीं बना सकते हैं (जैसे,
     यदि यह X सर्वर से कनेक्ट नहीं हो सकता है), यह एक पाठ बनाने की कोशिश करता है
     टर्मिनल क्लाइंट फ़्रेम, जैसे कि आपने '-t' विकल्प की आपूर्ति की थी
     बजाय।

'आयकर'
'--Tty'
'-Nw'
     के बजाय वर्तमान पाठ टर्मिनल पर एक नया क्लाइंट फ़्रेम बनाएं
     मौजूदा Emacs फ्रेम का उपयोग करना। यह '-c' की तरह ही व्यवहार करता है
     विकल्प, ऊपर वर्णित, सिवाय इसके कि यह एक पाठ टर्मिनल बनाता है
     फ्रेम (* नोट नॉन-विंडो टर्मिनल: :)।

4

यदि आप एक ऑपरेटिंग सिस्टम का उपयोग कर रहे हैं जो systemd सेवा प्रबंधक का उपयोग करता है (जिसमें आजकल अधिकांश GNU / लिनक्स वितरण शामिल हैं), तो बूट पर अपने Emacs डेमन को शुरू करने के लिए systemd का उपयोग करना सबसे अच्छा उपाय हो सकता है। आप $HOME/.config/systemd/user/emacs.serviceनिम्न सामग्री के साथ एक फ़ाइल बनाकर ऐसा कर सकते हैं:

[Unit]
Description=Emacs text editor
Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/

[Service]
Type=simple
ExecStart=/usr/bin/emacs --fg-daemon
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
Environment=SSH_AUTH_SOCK=%t/keyring/ssh
Restart=on-failure

[Install]
WantedBy=default.target

फिर आपको सेवा शुरू करनी चाहिए और इसे भविष्य के सभी बूटों के लिए स्वचालित रूप से शुरू करने के लिए सेट करना चाहिए:

$ systemctl enable --user emacs
$ systemctl start --user emacs

अब आप emacsclientहमेशा की तरह उपयोग कर सकते हैं । आप सामान्य रूप से साथ में चलाते हैं तो -n, -cया -tविकल्पों में, आप अपने खोल में एक उपनाम सेट कर सकते हैं। आप जिस तरह से इसे पसंद करते हैं उसे चलाने के लिए EDITORऔर / या VISUALपर्यावरण चर सेट करना चाह सकते हैं emacsclient। उदाहरण के लिए, बैश में, आप अपनी .bashrcफ़ाइल में निम्नलिखित जोड़ सकते हैं :

alias emc="emacsclient -c"
export VISUAL="emacsclient -c"
export EDITOR="emacsclient -t"

यदि आपको कभी Emacs डेमॉन को रोकने की आवश्यकता है, तो आप इस प्रकार कर सकते हैं:

$ systemctl stop --user emacs

और अगर आप इसे स्थायी रूप से बूट पर चलने से रोकना चाहते हैं:

$ systemctl disable --user emacs

1
शायद EmacsWiki के इस लिंक को स्वीकार किया जाना चाहिए: EmacsAsDaemon
HongboZhu

0

जिस तरह से मैं करता हूं वह एक पिछले उत्तर के समान सुंदर है, मेरे लिए .bashrc में परिभाषित एक उपनाम है emacs --daemon

alias ds="emacs --daemon"

इसके अलावा, मेरे पास एक की-बोर्ड शॉर्टकट ctrl-alt-Eसेट है emacsclient -c। जब मैं dsएमएसीएस पर काम करना शुरू करना चाहता हूं तो मैं एक टर्मिनल खोलता हूं और टाइप करता हूं और प्रत्येक शॉर्टकट को अपने शॉर्टकट के साथ उदाहरण देता हूं।

आशा है कि यह किसी की मदद करता है।

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