2011-04-06 74 views
37

我想使用emacsclient編輯Mutt中的電子郵件。如何僅在未啓動的情況下啓動emacs服務器?

我說這的.emacs

(server-start)

而在.muttrc裏我加了

set editor="emacsclient -nw %s"

看來他們的工作。 當我啓動第二個Emacs時,它抱怨已經有一臺服務器在運行,所以它會發出錯誤。只有在服務器尚未啓動的情況下,如何確保(server-start)

由於

回答

42

Emacs的進程可以自動在一個非常簡單的方式來啓動。只需添加到您的.bashrc/.zshrc /不管

export ALTERNATE_EDITOR="" 

現在,當你調用emacsclient -t/-c服務器將啓動(與emacs --daemon),如果它尚未運行。

我也覺得這個shell別名方便

alias e='emacsclient -t' 

注意,因爲Emacs的23,這是在守護進程模式使用Emacs的首選方式。現在大多已棄用(start-server)

+0

這是一個不錯的解決方案。 'emacsclient -c'也可以工作,並支持圖形客戶端。但是,如何在現有的emacs框架中打開文件(例如,在另一個終端中)。目前,我有一個名爲'e'的bash腳本,用於檢查第一個參數是否爲'-o'(對於其他參數),如果存在,則運行'emacsclient'而不帶'-c'。有沒有更好的方法,使用別名,你可以覆蓋'-t'並導致現有的框架打開文件? – edam 2012-10-23 14:18:05

+0

感謝您的好回答:) – nXqd 2014-10-28 18:09:35

+0

@edam不確定您是否找到了答案,但聽起來好像您希望-t切換到emacsclient。這有點難以分辨,因爲您的評論似乎模糊了終端中的非圖形化emacs實例與窗口化圖形實例之間的區別。 -t代表前者,-c代表後者。 – Daniel 2015-03-09 17:02:59

6

經由

emacs --daemon 

在任何殼或終端產品總數避免此問題,以便Emacs的在後臺運行。這樣emacsclient總是很開心,因爲總是有一個Emacs服務器連接到。

這是Emacs,還有一個功能,只在需要時啓動服務器,但我現在還不能完全記得它的名字。我自己很高興地愉快地使用​​選項。

51

代碼啓動只有當它沒有運行服務器:

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

這是自從'emacs --daemon'說'_這個平臺不支持-daemon標誌的Windows目前唯一可用的選項._ – legends2k 2015-01-06 09:59:18

+0

@ legends2k,在Windows上,您還可以執行'emacs --funcall server-start ',但我同意這樣更好,並且可以跨平臺工作。 – harpo 2016-09-01 16:13:12

9

有點遲到的答案,但這裏是適合我的解決方案。每當我啓動emacsclient時,我都會使用emacsclient -a '' -c-a ''告訴emacsclient嘗試連接到現有服務器,如果沒有服務器存在,請啓動它並連接到它。

+0

'-a'''選項很棒。請注意'-c'總是創建一個新的框架。如果通常要在現有的emacs框架中編輯文件,那麼我省略此選項 – 2017-10-22 21:52:18

相關問題