Emacsclient : 시작부터 항상 하나의 단일 emacs 프로세스 및 GUI를 닫고 닫지 않는 것이 좋습니다.


9

emacsclient는 긴 패키지 로딩 시간을 적절하게 처리 할 수 ​​있기 때문에 적어도 하나의 emacs 프로세스 를 유지 하고 대부분의 경우 emacs 프로세스 하나만 백그라운드 프로세스로 열고 GUI를 더 잘 숨기고 싶습니다 .

지금은 .bashrc에 다음 함수를 정의했습니다.

emc () 
{ 
    if [[ $# -eq 0 ]]; then
        emacs --eval "(suspend-frame)" &
        return
    fi
    args=($*);
    setsid emacsclient -c -e "(find-file \"${args[*]}\")"
}

또한 .bashrc에 다음 줄이 있습니다.

emc

그래서 쉘을 열 때마다 새로운 emacs 프로세스가 생깁니다.

문제는 많은 쉘을 연 후 불필요한 추가 emacs 프로세스가 많이 있다는 것입니다. 그러나 시작부터 GUI를 숨기려면 항상 하나의 단일 emacs 프로세스유지 하고 싶습니다 .


5
나는 ( emacswiki.org/emacs/EmacsAsDaemon ) emacs --eval "(suspend-frame)"보다는 연습에 익숙하지 않다 . emacs를 데몬으로 호출하지 않는 이유가 있습니까? 당신은 그것이 실행되고 있는지 확인하기 위해 같은 것을 사용할 수 있습니다 . emacs --daemonpgrep -U `whoami` emacs || emacs --daemon &
ebpa

Emacs 클라이언트 사용에 대한 MJ Wall의 스크립트 를 확인하십시오 .
Tianxiang Xiong

답변:


13

로그인 할 때 emacs 데몬을 시작하여이 작업을 수행합니다. 이 명령을 넣는 위치는 데스크톱 관리자에 따라 다릅니다. 내가 사용 i3다음을 포함 로그인에 스크립트를 실행하도록 구성되어 있습니다 :

emacs --daemon &

이를 통해 emacs는 항상 백그라운드에서 실행되며 emacsclient -c -n창 관리자의 편리한 키 바인딩에 바인딩 된 새 클라이언트를 엽니 다 . 터미널에서 작업하는 경우, 당신은 단지 같은 간단한 별칭이 필요 alias emc='emacsclient', 가능성과 함께 -n, -c또는 -t당신이 그것을 사용하는 방법에 따라 인수.

매뉴얼에서 emacsclient 옵션을 확인하십시오 : ( (emacs) emacsclient 옵션 , Emacs by에서 액세스 가능 C-h r m emacsclient options <enter>). -a플래그를 사용하여 emacs 데몬이 아직 실행 중이 아닌 경우 자동으로 시작 -c하거나 -t기존 세션을 다시 사용하지 않고 새 프레임 또는 터미널 클라이언트를 열 수 있습니다 (동일한 세션에서).

'-명령'
'--alternate-editor = COMMAND'
     'emacsclient'가 Emacs에 접속하지 못하는 경우 실행할 명령을 지정하십시오.
     이는 스크립트에서 'emacsclient'를 실행할 때 유용합니다.

     특별한 예외로, COMMAND가 빈 문자열이면
     'emacsclient'는 데몬 모드에서 Emacs를 시작합니다 ( 'emacs --daemon'으로)
     그런 다음 다시 연결을 시도하십시오.

'-씨'
'--create-frame'
     기존 그래픽을 사용하는 대신 새로운 그래픽“클라이언트 프레임”을 만듭니다
     이맥스 프레임. 아래의 'Cx C-c'의 특수 동작에 대해서는 아래를 참조하십시오.
     클라이언트 프레임. Emacs가 새로운 그래픽 프레임을 생성 할 수없는 경우 (예 :
     X 서버에 연결할 수 없으면 텍스트를 작성하려고 시도합니다.
     '-t'옵션을 제공 한 것처럼 터미널 클라이언트 프레임
     대신에.

'-티'
'--tty'
'-nw'
     현재 텍스트 터미널 대신 새 클라이언트 프레임을 만듭니다.
     기존 이맥스 프레임을 사용합니다. 이것은 '-c'처럼 작동합니다
     텍스트 터미널을 생성하는 것을 제외하고는 위에서 설명한 옵션
     프레임 (* 비창 터미널 :: 참고).

4

systemd 서비스 관리자 를 사용하는 운영 체제 (현재는 대부분의 GNU / Linux 배포판이 포함됨)를 사용하는 경우 가장 좋은 해결책은 systemd를 사용하여 부팅시 Emacs 데몬을 시작하는 것입니다. $HOME/.config/systemd/user/emacs.service다음 내용 으로 파일 을 작성하여이를 수행 할 수 있습니다 .

[Unit]
Description=Emacs text editor
Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/

[Service]
Type=simple
ExecStart=/usr/bin/emacs --fg-daemon
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
Environment=SSH_AUTH_SOCK=%t/keyring/ssh
Restart=on-failure

[Install]
WantedBy=default.target

그런 다음 서비스를 시작하고 이후의 모든 부팅에 대해 자동으로 시작되도록 설정해야합니다.

$ systemctl enable --user emacs
$ systemctl start --user emacs

이제 emacsclient평소처럼 사용할 수 있습니다 . 당신은 일반적으로 그것을 실행하는 경우 -n, -c또는 -t옵션, 당신은 당신의 쉘에서 별칭을 설정할 수 있습니다. 원하는 방식 으로 실행 하도록 EDITOR및 / 또는 VISUAL환경 변수 를 설정할 수도 있습니다 emacsclient. 예를 들어, Bash에서 .bashrc파일에 다음을 추가 할 수 있습니다 .

alias emc="emacsclient -c"
export VISUAL="emacsclient -c"
export EDITOR="emacsclient -t"

Emacs 데몬을 중지해야하는 경우 다음과 같이 수행 할 수 있습니다.

$ systemctl stop --user emacs

부팅시 실행을 영구적으로 중지하려면 다음을 수행하십시오.

$ systemctl disable --user emacs

1
아마 EmacsWiki이 링크는 인정해야합니다 EmacsAsDaemon
HongboZhu

0

내가하는 방식은 .bashrc에 정의 된 별칭을 사용하여 이전 답변과 매우 유사합니다. emacs --daemon

alias ds="emacs --daemon"

이 외에도 키보드 단축키가로 ctrl-alt-E설정되어 emacsclient -c있습니다. emacs 작업을 시작하고 싶을 때 터미널을 열고 ds각 emacsclient 인스턴스를 바로 가기로 입력 하고 불러옵니다.

이것이 누군가를 돕기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.