只有當emacs服務器正在運行時(特別是如果emacs以標誌啓動時),我想在init文件中執行一些代碼。當server-start
被調用時,似乎沒有任何掛鉤運行,並且沒有變量可以查看服務器是否正在運行。如何知道emacs服務器是否正在運行
由於除非服務器啓動,服務器功能纔會被加載,這似乎對我的目的有用,但我想知道這樣做的正確方法是什麼。謝謝。
只有當emacs服務器正在運行時(特別是如果emacs以標誌啓動時),我想在init文件中執行一些代碼。當server-start
被調用時,似乎沒有任何掛鉤運行,並且沒有變量可以查看服務器是否正在運行。如何知道emacs服務器是否正在運行
由於除非服務器啓動,服務器功能纔會被加載,這似乎對我的目的有用,但我想知道這樣做的正確方法是什麼。謝謝。
如果服務器進程正在運行,則關聯的進程對象是server-process
。測試server-process
是否爲非零將告訴您服務器是否應該運行;你可以測試它的狀態來檢查它是否處於可接受的狀態。
(and (boundp 'server-process)
(memq (process-status server-process) '(connect listen open run)))
您可以測試是否Emacs的被調用與(daemonp)
守護進程。
更新:如果緩衝區沒有進程,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)))
更簡單的解決方案:在調用process-status之前檢查server-process是否爲非零:(和(boundp'server-process)服務器進程(memq(進程狀態....) – 2013-05-22 11:17:43
'daemonp'正是我一直在尋找的,謝謝! – pheaver 2010-09-14 01:44:03