2012-04-01 17 views
5

मानते हैं कि एक Emacs सर्वर चल रहा है, मैं emacsclient <file> या तो एक नया फ्रेम (जैसे -c) बनाना चाहता हूं, जब कोई मौजूदा फ्रेम न हो या मौजूदा फ्रेम का पुन: उपयोग न हो। दूसरे शब्दों में, मैं केवल -c चाहता हूं जब कोई मौजूदा फ्रेम न हो। क्या यह संभव है?मौजूदा Emacs GUI फ्रेम बनाएं या पुन: उपयोग करें

+0

कि नहीं है क्या बाहर छोड़ने '-c' वैसे भी करता है? मतलब है कि एक सरल 'emacsclient yourfile.ext' को मौजूदा फ्रेम में खोलना चाहिए यदि कोई है, और यदि ऐसा नहीं है तो इसे एक बनाना चाहिए। –

उत्तर

1

मैं शेल स्क्रिप्ट का एक सेट के साथ मेरी समस्या हल।

my_emacs

#!/bin/sh 
emacs24-x [email protected] 1> /dev/null 2> /dev/null & 

आप कुछ है कि आपके X11 Emacs के लिए अंक के लिए emacs24-x बदलना पड़ सकता है।

my_emacsclient

#!/bin/sh 
emacsclient [email protected] 1> /dev/null 2> /dev/null || my_emacs 

दोनों फाइलें आपको ~/bin या like के माध्यम से पाथ में जोड़ें।

मेरी .emacs में मैं भी निम्नलिखित लाइनों

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

जोड़ा इसके अलावा कुछ वातावरण चर बदल सकते हैं और जब आप अपने खोल यह बनाना चाहिए या resuse में e चलाने वैकल्पिक रूप से एक उपनाम

export ALTERNATE_EDITOR="my_emacs" 
export EDITOR="my_emacsclient -n" 
export SUDO_EDITOR="my_emacsclient" 
... 
alias e="$EDITOR" 

जोड़ने एक मौजूदा जीयूआई फ्रेम। साथ ही, चल रहे e <filename> उस फ़ाइल को फ्रेम में खुलता है; आप -n से e जैसे अन्य झंडे भी पास कर सकते हैं।

अन्य अनुप्रयोगों (आपके फ़ाइल प्रबंधक कहें) में एक ही व्यवहार के लिए, आपको my_emacs चलाने के लिए Emacs .desktop फ़ाइल (मेरे लिए /usr/share/applications/emacs24.desktop) भी बदलना चाहिए।

डेबियन-आधारित (?) वितरण में विकल्प प्रणाली के माध्यम से emacs से my_emacsclient को बदलने का भी एक अच्छा विचार हो सकता है।

अपने Emacs में स्टार्टअप फ़ाइल:

+0

जो भी मेरे सेटअप का उपयोग कर सकता है। यह सही नहीं है और कुछ में त्रुटिपूर्ण त्रुटियां हैं। उदाहरण के लिए, यदि आप 'sudo -e ' करने का प्रयास करते हैं, जब कोई Emacs प्रारंभ नहीं होता है तो यह असफल हो जाएगा। जब भी Emacs पहले से ही मौजूदा फ्रेम को बढ़ाने के बजाय एक नया फ्रेम बनाया गया है तो 'e' का आह्वान भी कर रहा है। मैं इसे ठीक करने की कोशिश करूंगा और आपको बता दूंगा। –

0

emacsclient <file> जो आप चाहते हैं वह करता है।

यदि आप फ़ाइल निर्दिष्ट किए बिना फ्रेम खोलना चाहते हैं, तो आपको -c का उपयोग करने की आवश्यकता है।

+2

बिल्कुल नहीं। जब कोई जीयूआई फ्रेम मौजूद नहीं होता है, तो टर्मिनल फ्रेम में 'emacsclient ' खुलता है। –

0

अगर वहाँ एक अभी तक नहीं है आप एक जीयूआई फ्रेम के निर्माण के लिए मजबूर करने के `emacsclient --display" $ प्रदर्शन "कोशिश" कर सकते हैं।

+1

एमएच, अभी भी मेरे लिए काम नहीं करता है। यह मेरे लिए एक टर्मिनल फ्रेम खोलता है। –

+0

@ रेन्के: DISPLAY = $ DISPLAY "echo" क्या करता है आपको बताता है? – Stefan

+0

'DISPLAY =: 0.0' जैसा कि मुझे लगता है। –

0

यहाँ मेरी समाधान है, तो फिर

;; start emacs server, if it's not already running: 
(require 'server) 
(unless (server-running-p) (server-start)) 

निम्नलिखित जोड़ें: (उदाहरण के लिए: ~/.emacs/init.el), सुनिश्चित करें कि आप निम्नलिखित लाइनों है अपने ~/.bashrc फाइल करने के लिए:

function e() 
{ 
    emacsclient "[email protected]" -a "emacs" 
} 

एक आधार रेखा की स्थापना करने के लिए, सुनिश्चित करें कि आप सभी Emacs उदाहरणों से बाहर निकलें और यदि आप वर्तमान में यह चल रहा है Emacs डेमॉन को मार सकते हैं।

फिर, कमांड लाइन से, 'स्रोत' ~ /।bashrc फ़ाइल:

source ~/.bashrc 

अंत में, का उपयोग 'ई' फ़ाइल को संपादित:

e Foobar.java & 
e notes.txt & 
संबंधित मुद्दे