콘솔과 GUI를위한 두 개의 개별 emacs 데몬 시작


14

일반적으로 GUI로 emacs를 시작하고 바로 서버를 시작합니다 (server-start). 이제 터미널을 통해 emacsclient -n <file>또는 파일 브라우저에서 기존 emacs 세션으로 문서를 쉽게 열 수 있습니다 .

그러나 때때로을 사용하여 터미널 내에서 emacs를 실행하고 싶습니다 emacsclient -t. 이것은 git commit 로그를 쓰거나 아주 작은 작업을 수행 할 때 가장 자주 발생합니다. 이 경우 내 init 파일이 emacs의 GUI 인스턴스에로드되었다는 사실은 TTY emacs와 관련된 사용자 정의를 얻지 못했음을 의미합니다.

나는 내가 달릴 수 있다는 것을 안다

emacs -nw -q -l "some-custom-init-file.el"

그러나 매번 모든 패키지를 다시로드합니다. 두 세계를 모두 이용할 수 있습니까? 터미널 내에서 실행하는 것과 기존 emacs 윈도우에서 파일을 방문하기 위해 별도의 사용자 정의를 사용할 수 있도록 "TTY 데몬"을 설정하는 방법이 있습니까?


1
TTY와 GUI 모드가 다른 사용자 정의의 예를 지적 할 수 있습니까?
stsquad

1
@stsquad 정말 간단한 것 중 하나는 GUI 모드에서 왼쪽 프린지를 사용하지만 프린지가 TTY 모드에 없기 때문에 줄 번호와 텍스트 사이에 공백이 없다는 것입니다. 이것은 (setq linum-format "%d ")TTY 사용자 정의 파일에서 수정 될 수 있습니다 . 또한 TTY 모드에서는 색상 테마가 항상 이상하게 보이므로 TTY에 대해 다른 테마를 선택합니다. 실제로 현재로서는 그다지 큰 차이가 없지만 이제 다른 서버를 가질 수 있다는 것을 알았으므로 목록이 커질 수 있습니다.
nispio

@nispio : M-x report-emacs-bugTTY와 GUI 프레임에서 다른 얼굴 테마를 갖는 기능과 같은 새로운 기능을 제안 하고 제안합니다 (실제로 테마는 다른 종류의 프레임에 대해 완전히 다른 색상을 지정할 수 있으므로 테마를 조정할 수도 있습니다) . 별도의 경우에 여러 데몬을 사용하는 것은 Emacs에 해당 기능이없는 경우의 해결 방법 일뿐입니다.
Stefan

답변:


14

사용하여 emacs --daemon=your-server-name -l "custom-init-file"새 서버를 시작하고 emacsclient -nw -s your-server-name자체 터미널에서 연결합니다. 매뉴얼의 Emacs를 서버로 사용하기 섹션에는 더 많은 초기화 옵션이 있습니다.


작동합니다! 서버 파일을 찾아서 삭제하는 것 외에도 서버를 죽이는 좋은 방법이 있습니까?
nispio

( 사용자 정의 init 파일 이전에 -q기본값 init.el이 실행 되지 않도록 스위치 를 추가해야했습니다 .)
nispio

2
합니까는 emacsclient -s your-server-name -e "(kill-emacs)"당신이 원하는 무엇입니까? 위는 emacsclient를 호출하고 회피 (kill-emacs)합니다. 당신은 대체 할 수 (kill-emacs)와 함께 (save-buffers-kill-emacs)뿐만 아니라.
Vamsi

나는 터미널과 gui emacs에 공통의 init.el을 가지고 있었고 개별 사용자 정의를 위해 별도의 사용자 정의 파일을로드했습니다. 따라서 나는-q
Vamsi

1
이 솔루션은 또한 'emacsclient -t'를 mutt과 함께 사용할 때 발생하는 문제와 별도의 작업 공간에서 'emacsclient -c'를 수정했습니다. 간단히 말해 : 'emacsclient -t'전에 'emacsclient -c'가 시작되면 데몬이 충돌했습니다. 감사합니다, Vamsi
Boccaperta-IT

9

@Vamsi의 답변 외에도에 조언을 첨부하여 단일 서버 만 실행하면서 동일한 이점을 많이 얻을 수 있습니다 make-frame-command.

예를 들어 터미널에서 실행하는 동안 배경색을 black(으로 매핑 #202020) 원하지만 #202020그래픽 모드에서 사용하고 싶습니다 . 나는 이것을 다음과 같이 구현했다.

(defadvice make-frame-command (after make-frame-change-background-color last activate)
  "Adjusts the background color for different frame types. 
Graphical (X) frames should have the theme color, while terminal frames should match the terminal color (which matches the theme color...but terminal frames can't directly render this color)"
    (if (display-graphic-p)
        (set-background-color "#202020")
      (set-background-color "black")))

당신은 이것을 사용하여 많은 마일리지를 얻을 수 있습니다 make-variable-frame-local( set-background-color위의 이미 프레임 로컬입니다).

이것이 최선의 패턴인지는 모르겠지만 TTY 모드와 X 모드 Emacs 사이의 차이가 비교적 적은 경우 구성 관리가 쉬워집니다.

위의 코드는 내 .emacs.d 에서 가져 왔습니다 .


프레임 단위로 어떤 모드를 "감지"할 수있는 방법이 있는지 궁금했습니다.
nispio

1
이거 야. (display-graphic-p)제공 t경우 현재 프레임은 그래픽이다, nil그렇지. 프레임을 그래픽이 아닌 그래픽간에 이동할 수 없으므로 (FAIK) 프레임 생성에 조언을 첨부하면 주어진 프레임에 대해 원하는 상태에 도달 할 수 있습니다.
J David Smith

이것은 가장 편리한 답변입니다.
Malabarba

4

동일한 emacs 데몬에서 실행되는 다른 프레임의 설정을 변경하기 위한 조언 은 필요하지 않습니다 . after-make-frame-functions이렇게 후크를 사용하십시오

(defvar my/ttheme 'tango-dark)
(defvar my/gtheme 'tango)
(defun my/frame-configuration (frame)
  "configure the current frame depending on the frame type"
  (with-selected-frame frame
    (if (display-graphic-p)
        (progn
          (message "after-make-frame-functions hook: window system")
          (set-frame-size frame 115 60)
          ;; other settings for a graphical frame
          (load-theme my/gtheme t))
      (message "after-make-frame-functions hook: text console")
      (load-theme my/ttheme t)
      (set-frame-parameter frame 'menu-bar-lines 0))))

(add-hook 'after-make-frame-functions 'my/frame-configuration)

;; normal start without daemon
(if (not (daemonp))
  (my/frame-configuration (selected-frame)))

이 방법으로 정의하면 보너스가 추가되므로 데몬 모드에서 시작하지 않아도 원하는 프레임 구성으로 설정됩니다.

불행히도 load-theme로컬 프레임이 아니므로 텍스트 및 그래픽 프레임에 다른 테마를 실제로 사용하면 다른 프레임도 색상이 지정됩니다.

보너스 정보 : 선택한 테마의 실제 느낌을 얻기 위해 최소한 256 색으로 터미널을 구성하십시오. 쉘 시작 파일 중 하나에서 다음과 같은 설정을 사용하십시오.

TERM=xterm-256color
export TERM

모든 터미널이 256 색상을 지원하는 것은 아닙니다. 예를 들어 xfce4 터미널은 여전히 ​​8입니다 (예쁜 색상을 위해 사쿠라로 전환했습니다).
unhammer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.