現在のEmacsセッション(数ある)がEmacsサーバーを実行しているかどうかを(プログラムで)テストする方法は?


7

server-running-p述語は、と評価さtEmacsのセッションが現在のサーバ・プロセスを「所有」にかかわらず、そのうちのEmacsのサーバが実行されている場合。

したがって、同時に実行されている2つ以上の独立したEmacsセッションがある場合、server-running-pでは実際 Emacsセッションがサーバーを実行しているかどうかは実際にはテストされません。

より具体的なテストを探しています。現在のセッション(つまり、テストを実行しているセッション)がEmacsサーバーを実行しているt 場合にのみ評価されます。


1
現在はテストできませんが、サーバーモードが非nilかどうかをテストできます。
YoungFrog 2017年

@YoungFrog:提案に感謝しますが、私がテストしたすべての状況(つまり、server-startその後server-force-delete)で、server-mode常にnilでした。
kjo

1
YoungFrogの提案は良いものだと思いますが、(server-mode 1)ではなくを呼び出す必要があります(server-start)。前者は後者を呼び出し、server-force-deleteこのモードをチェックして無効にするのでsever-mode、意図したインターフェイスのように見え、server-start直接呼び出すことはできません。
phils 2017年

1
とは言ってserver-modeも、あるインスタンスからサーバーを削除してもserver-mode別のインスタンスのの値には影響がないため、使用しても、同じサーバーが複数のEmacsインスタンスを介して起動および削除されることにはなりません。
phils 2017年

回答:


5

あなたはチェックするかもしれません:

(and (boundp 'server-process)
     (processp server-process)
     (server-running-p))

他のインスタンスでサーバーを起動するのを避ければ、それはうまくいくはずです。

ソケットベースのサーバーを想定して、2番目のEmacsインスタンスを開始し、その2番目のインスタンスからサーバープロセスを強制的に削除してから再起動すると、上記のコードは元のインスタンスで非nilを返します(同じソケットとして)ディレクトリが使用されます)、元の状態のままにします。

(明らかにこれは理想的ではないので、もっと良い解決策があるかもしれません。)

server-running-p特定の名前付きサーバー(デフォルトはserver-name)が実行されているかどうかを通知します。したがってserver-name、すべてのインスタンスで同じである場合は、次のようにすでに実行中のサーバーを起動しないようにすることができます。

;; Start server (but don't restart).
(require 'server)
(unless (server-running-p)
  (server-start))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.