콘솔과 GUI를위한 두 개의 개별 emacs 데몬 시작 일반적으로 GUI로 emacs를 시작하고

일반적으로 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 데몬”을 설정하는 방법이 있습니까?



답변

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


답변

@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 에서 가져 왔습니다 .


답변

동일한 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