मैं एकता लॉन्चर से चल रहे इमैक्यूलर को मौजूदा एमएसीएस विंडो के पुन: उपयोग कैसे कर सकता हूं


12

यदि आप एक .desktop फ़ाइल (जैसे Emacs एक) की प्रतिलिपि बनाकर एक इमोशलिएंट लॉन्चर बनाते हैं, तो यह मानक यूनिटी लॉन्चर तरीके से व्यवहार नहीं करता है। यह हमेशा एक नई विंडो लॉन्च करता है; यह स्वीकार नहीं करता है कि मौजूदा Emacsclient विंडोज़ उनके पास कूदने के लिए मौजूद हैं। मैं इसे कैसे व्यवहार कर सकता हूं?

पृष्ठभूमि के रूप में, यह Emacs के लिए एक बहुत ही उपयोगी उपयोग मोड है, जहाँ आप इसे एक डेमॉन के रूप में चलाते हैं: emacs --daemonऔर फिर आप एक emacs विंडो को समन करते हैं emacsclient। आदतन एमएसीएस उपयोगकर्ताओं के लिए ऐसा करने का एक अच्छा तरीका है कि आप emacs --daemonअपने स्टार्टअप एप्लिकेशन में डाल दें ।

जवाबों:


16

इसका समाधान emacsclient.desktopयह है कि स्टार्टअप के लिए विंडो के वर्ग सहित एक निर्देश सहित एक फाइल बनाई जाए, जिसमें स्टार्टअप स्टार्टअप सेटिंग्स का उपयोग किया जाए। इसके बिना, एकता यह नहीं बता सकती कि वह खिड़की Emacsclient से आई थी। यह Emacs एक (/usr/share/applications/emacs23.desktop) की सामग्री के आधार पर एक बनाएगा:

mkdir -p ~/.local/share/applications
cat > !$/emacsclient.desktop <<EOF
[Desktop Entry]
Version=1.0
Name=Emacsclient
GenericName=Text Editor
Comment=View and edit files
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
Exec=/usr/bin/emacsclient -c %F
Icon=/usr/share/icons/hicolor/scalable/apps/emacs23.svg
Type=Application
Terminal=false
Categories=Utility;Development;TextEditor;
StartupWMClass=Emacs
EOF

लॉन्चर में इमैसेक्लाइंट रखें (जैसे टैप सुपर, टाइप करें "एमैक्शिएंट", इसे ड्रैग करें), और लॉग आउट / इन करें।


मेरे .bashrc में, मैं TMPDIR = $ {HOME} / tmp को परिभाषित करता हूं इसलिए अस्थायी फ़ाइलें मेरे एन्क्रिप्टेड $ HOME के ​​अंतर्गत हैं। emacs, लांचर से आक्रांत है, यह परिभाषा नहीं देखता है, लेकिन एक शेल से मंगाई गई emacsclient है। emacs (सर्वर-स्टार्ट के बाद) / tmp में एक सॉकेट खोलता है, emacsclient $ {HOME} / tmp में सॉकेट के ऊपर emacs के साथ संवाद करने की कोशिश करता है, और बहुत खराब करता है। क्या मैं TMPDIR के लिए सही मान पास करने के लिए emacsclient.desktop का उपयोग कर सकता हूं?
वाल्टिनेटर

मैंने अपने प्रश्न को स्वयं के एक धागे में बदल दिया, और उत्तर मिला। देखें askubuntu.com/questions/64005/launcher-doesnt-respect-tmpdir/...
waltinator

एकता ने emacsclient.desktopकिसी कारण से मेरी पूरी तरह से अनदेखी की । मैं अंत में alacarteइसके बजाय ("मुख्य मेनू" जीयूआई) में लॉन्चर बनाकर इसके आसपास पहुंच गया ।
ब्रायन जेड

2

James.ferguson द्वारा समाधान अच्छी तरह से काम करता है। मैं जो चाहता था, वह "पसंदीदा अनुप्रयोग" के रूप में कुछ फ़ाइल प्रकारों के लिए क्षीणता को जोड़ना था। इसके लिए, मुझे एक नई "एक्ज़ेक" लाइन के साथ जेम्स की स्क्रिप्ट मिली

Exec=/usr/bin/emacsclient --alternate-editor emacs24 --no-wait %F

मेरे लिए बेहतर काम करता है: यह एक नया emacs चलाता है अगर कोई नहीं चल रहा है, एक नई विंडो नहीं खोलता है और emacs ग्राहकों के बारे में शिकायत नहीं करता है अभी भी सामान होने की प्रतीक्षा कर रहा है।

अब मैं फ़ाइलों पर क्लिक कर सकता हूं और वे एक चालू ईएमएसी में खोले जाते हैं, यदि कोई मौजूद है, अन्यथा एमएसीएस शुरू होता है।


1

दूसरा तरीका स्क्रिप्ट का उपयोग करना है :

if [ "$(pidof emacs)" ] ; then
    emacsclient "$@" &
else
    emacs -mm "$@" &
fi

इसलिए आप हमेशा एक ही कमांड को लागू करते हैं।

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