Làm cách nào để kiểm tra (lập trình) xem phiên Emacs hiện tại (trong số một số) có chạy máy chủ Emacs không?


7

Vị server-running-ptừ sẽ đánh giá txem máy chủ Emacs có đang chạy hay không, bất kể phiên Emacs nào hiện đang "sở hữu" quy trình máy chủ.

Do đó, khi có hai hoặc nhiều phiên Emacs độc lập chạy đồng thời, server-running-pkhông thực sự kiểm tra xem phiên Emacs hiện tại có đang chạy máy chủ hay không.

Tôi đang tìm kiếm một thử nghiệm cụ thể hơn, một thử nghiệm sẽ đánh giá t nếu và chỉ khi phiên hiện tại (tức là phiên thực hiện thử nghiệm) đang chạy máy chủ Emacs.


1
Không thể kiểm tra ngay bây giờ nhưng có lẽ bạn có thể kiểm tra nếu chế độ máy chủ không phải là không.
YoungFrog

@YoungFrog: cảm ơn vì lời đề nghị, nhưng trong mọi tình huống tôi đã thử nghiệm (cụ thể là sau server-startvà sau server-force-delete), server-modeluôn luôn như vậy nil.
kjo

1
Tôi nghĩ đề xuất của YoungFrog là tốt, nhưng bạn cần gọi (server-mode 1)chứ không phải gọi (server-start). Cái trước gọi cái sau, đồng server-force-deletethời kiểm tra và vô hiệu hóa chế độ này, vì vậy nó trông giống như sever-modegiao diện dự định và chúng ta không nên gọi server-starttrực tiếp.
phils

1
Điều đó nói rằng, việc sử dụng server-modevẫn không chiếm tài khoản cho cùng một máy chủ được khởi động và xóa qua nhiều phiên bản Emacs, vì việc xóa máy chủ khỏi một phiên bản không ảnh hưởng đến giá trị của server-modemột máy chủ khác.
phils

Câu trả lời:


5

Bạn có thể kiểm tra:

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

Điều đó sẽ hoạt động miễn là bạn tránh khởi động máy chủ trong các trường hợp khác.

Giả sử máy chủ dựa trên ổ cắm, nếu bạn đã bắt đầu một phiên bản Emacs thứ hai và buộc phải xóa và sau đó khởi động lại quy trình máy chủ từ phiên bản thứ hai đó, thì đoạn mã trên vẫn sẽ trả về không phải trong trường hợp ban đầu (như cùng một ổ cắm thư mục sẽ được sử dụng), để lại cho bạn trong tình huống ban đầu.

(Rõ ràng điều này không lý tưởng, vì vậy cũng có thể có một giải pháp tốt hơn.)

server-running-pcho bạn biết liệu một máy chủ có tên cụ thể (mặc định server-name) đang chạy hay không; Vì vậy, nếu bạn server-namegiống nhau trong tất cả các phiên bản của bạn, thì bạn có thể tránh bắt đầu một máy chủ đã chạy như vậy:

;; Start server (but don't restart).
(require 'server)
(unless (server-running-p)
  (server-start))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.