필요할 때만 emacs 데몬을 실행하는 방법은 무엇입니까?

필요할 때만 emacs 데몬을 실행하는 방법은 무엇입니까?

내가 아는 한, emacs 시작 속도를 높이는 한 가지 방법은 emacs --daemon로그인 시 실행한 다음 로 emacslient파일을 여는 것입니다 emacs. 그러면 새 emacs 인스턴스를 만드는 대신 실행 중인 emacs 서버에 액세스하게 됩니다.

그러나 꼭 필요한 경우가 아니면 로그인 프로세스 속도를 높이기 위한 방법으로 프로그램을 자동 시작에 넣지 않는 것이 좋습니다. emacs 서버가 실행 중인지 감지하는 안정적인 방법이 있습니까? 이렇게 하면 Emacs를 사용하여 처음으로 파일을 열 때 Emacs 서버를 생성하는 간단한 스크립트를 작성할 수 있습니다.

#!/bin/sh
if emacs_daemon_is_not_running # <-- How do I do this?
then
    emacs --daemon
fi
emacsclient -c "$@"

답변1

emacs가 이미 실행 중인지 테스트할 필요조차 없습니다. emacsclient아직 실행 중이 아닌 경우 emacs 데몬을 시작할 수 있습니다. 에서 emacsclient(1):

   -a, --alternate-editor=EDITOR
          if the Emacs server is not running,  run  the  specified  editor
          instead.   This can also be specified via the `ALTERNATE_EDITOR'
          environment variable.  If the  value  of  EDITOR  is  the  empty
          string,  run `emacs --daemon' to start Emacs in daemon mode, and
          try to connect to it.

나는 ge다음과 같이 정의된 별칭을 사용하여 파일을 편집합니다.

alias ge="emacsclient -c -n --alternate-editor=\"\""

답변2

emacsclient자체를 사용하여 연결이 있는지 테스트 할 수 있습니다 .

#!/bin/sh
if ! emacsclient -e 0 >&/dev/null
then emacs --daemon
fi
emacsclient -c "$@"

-e 0계산식 "0"을 나타내며 0만 인쇄합니다. emacsclient가 서버에 연결할 수 없는 경우 반환 코드는 0이 아닙니다.

답변3

이것을 쉘 함수나 스크립트에 넣을 수 있습니다:

if ! ps h -o pid,args -C emacs | grep -q -- --daemon ; then
    emacs --daemon
fi
emacsclient -c "$@"

ps이는 표준 Linux 패키지 procps의 패키지를 사용하고 있다고 가정합니다 . 둘 중 하나를 사용하면 ps정확한 옵션이 달라집니다 .

답변4

다음을 사용하여 ps이 작업을 수행할 수 있습니다 or.

ps -e -o args | grep -qE 'emacs --(bg-|)daemon' || emacs --daemon

영감을 받아 답변 cas해 보세요.hugomg

관련 정보