2010-09-13 385 views
15

只有當emacs服務器正在運行時(特別是如果emacs以​​標誌啓動時),我想在init文件中執行一些代碼。當server-start被調用時,似乎沒有任何掛鉤運行,並且沒有變量可以查看服務器是否正在運行。如何知道emacs服務器是否正在運行

由於除非服務器啓動,服務器功能纔會被加載,這似乎對我的目的有用,但我想知道這樣做的正確方法是什麼。謝謝。

回答

16

如果服務器進程正在運行,則關聯的進程對象是server-process。測試server-process是否爲非零將告訴您服務器是否應該運行;你可以測試它的狀態來檢查它是否處於可接受的狀態。

(and (boundp 'server-process) 
    (memq (process-status server-process) '(connect listen open run))) 

您可以測試是否Emacs的被調用與(daemonp)守護進程。

+2

'daemonp'正是我一直在尋找的,謝謝! – pheaver 2010-09-14 01:44:03

1

更新:如果緩衝區沒有進程,Gilles發佈的代碼會拋出,如「Buffer scratch has no process」。在〜/ .emacs.el中使用此代碼時,我們冒着Emacs無法啓動的風險。要發現錯誤:

(defun --running-as-server() 
    "Returns true if `server-start' has been called." 
    (condition-case nil 
     (and (boundp 'server-process) 
      (memq (process-status server-process) 
       '(connect listen open run))) 
    (error))) 
+0

更簡單的解決方案:在調用process-status之前檢查server-process是否爲非零:(和(boundp'server-process)服務器進程(memq(進程狀態....) – 2013-05-22 11:17:43

相關問題