Emacs 데몬을 사용할 때 터미널 및 그래픽 프레임에 대한 다른 테마


20

Emacs24에서 다음 동작을 달성하려고합니다.

터미널 프레임으로 실행중인 서버에 연결하는지 여부에 따라 다른 테마 (태양 광 대 태양 광)를 사용하고 싶습니다.

% emacsclient -t

또는 gtk 프레임

% emacsclient -c

이것은 오래된 Emacs에서 작동 한 것 같지만 현재 Emacs는 방법을 찾을 수 없었습니다. 나는 이미 SO (예 : /programming//q/18904529/152439 및 답변)와 메일 목록 (예 : https://lists.gnu.org/archive/html/help-gnu-emacs/)을 확인했습니다. 2012-02 / msg00227.htmlhttps://lists.gnu.org/archive/html/help-gnu-emacs/2012-02/msg00237.html ).

현재 설정은 다음과 같습니다.

(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/solarized")
(if (daemonp)
  (add-hook 'after-make-frame-functions
    (lambda (frame)
      (select-frame frame)
      (if (display-graphic-p frame)
        (load-theme 'solarized-light t)
        (load-theme 'solarized-dark t)
      )
    )
  )
  (load-theme 'solarized-light t)
)

이것에 대한 문제는 그래픽 프레임을 emacsclient -t열고을 사용하여 터미널 프레임을 열면 테마가 태양 화 된 어둠이 새 터미널 프레임 (정확한)과 이미 열려있는 그래픽 프레임 (왼쪽에 남아 있어야 함)에 적용된다는 것입니다 이상적입니다). 터미널 프레임이 이미 열려 있고을 사용하여 새 그래픽 프레임을 열면 이에 해당합니다 emacsclient -c.

편집 : 현재 Emacs24에서 이것이 가능하지 않은 경우 다시 가능하게 할 계획이 있습니까?


1
Afaik (이 목적을 위해 다른 검색에서), 오래된 색상 테마 구현은 일부 버퍼 당 설정을 허용했습니다. emacs 24는 내장 테마 지원 (deftheme 또는 load-theme)을 지원하며이를 지원하지 않습니다. 테마는 전체 emacs 세션에서 동일합니다. 이런 종류의 설정의 경우, 항상 solarized-dark를로드하고 -rv 플래그를 사용하여 그래픽 프레임을 시작하여 허용 가능한 핵을 관리 할 수 ​​있지만 완벽하지는 않습니다.
T. Verron

한 가지 해결 방법은 여기에 설명 된대로 터미널과 GUI에 대해 별도의 클라이언트를 실행하는 것입니다. emacs.stackexchange.com/q/41/93 워크 플로에 따라이 방법 이 적합하지 않을 수 있습니다. 나는 서로 겹치지 않거나 거의 다른 유형의 작업을 수행하기 때문에 저에게 효과적입니다.
nispio

emacs24에 내장 된 커스텀 테마가 사용자의 요구에 맞지 않으면, color-theme.el어떤 IIRC에 프레임 종속 색상 설정이 있는지 항상 사용할 수 있습니다 . 유비쿼터스 외에 내장 된 테마 기능을 사용할 때 큰 이점은 없습니다.
Vamsi

2
color-theme-buffer-localcolor-themeEmacs 24 테마 시스템 모두에 대해 버퍼 로컬 테마 지원을 제공 합니다. 이 경로를 사용하기로 결정한 경우 내 버전의 태양 테마 도 두 시스템을 모두 지원합니다.
sanityinc

@sanityinc 감사합니다; Emacs 24.3을 사용하고 있는데 문제가있는 것 같습니다 ( github.com/vic/color-theme-buffer-local/issues/5 참조) . 그러나 나는 프로젝트를 계속 지켜 볼 것이다.
andreas-h

답변:


8

다른 테마를 사용하여이 작업을 수행 할 수 없습니다. 해결 방법은 터미널에 따라 얼굴 정의가 다른 테마를 만드는 것입니다. 와 같은 예를 보면 font-lock-comment-face작동 방식을 볼 수 있습니다. 대신 지정하는 ((class color) (min-colors 88) (background dark))당신은 또한 수 specifcy (type tty)또는 (type graphic)등 매뉴얼은 더 많은 정보를 보유하고 있습니다 .

(defface font-lock-comment-face
  '((((class grayscale) (background light))
 :foreground "DimGray" :weight bold :slant italic)
(((class grayscale) (background dark))
 :foreground "LightGray" :weight bold :slant italic)
(((class color) (min-colors 88) (background light))
 :foreground "Firebrick")
(((class color) (min-colors 88) (background dark))
 :foreground "chocolate1")
(((class color) (min-colors 16) (background light))
 :foreground "red")
(((class color) (min-colors 16) (background dark))
 :foreground "red1")
(((class color) (min-colors 8) (background light))
 :foreground "red")
(((class color) (min-colors 8) (background dark))
 :foreground "yellow")
(t :weight bold :slant italic))
  "Font Lock mode face used to highlight comments."
  :group 'font-lock-faces)

두 테마를 사용하고 병합 된 테마를 생성하는 함수를 작성할 수 있다고 생각합니다. 한 테마의 (type tty)얼굴 이 할당 되고 다른 테마의 얼굴 (type graphic)이 원래 테마가 모두 사용되는 곳에 할당됩니다 t.



2

사용자 정의 편집기에서 "터미널 모드"또는 "최소 색상"과 같은 얼굴 사용자 정의 조건을 정의 할 수 있습니다.

면을 사용자 정의 할 때 [상태] 버튼을 클릭하고 "모든 디스플레이 사양 표시"를 선택하십시오. 그런 다음 얼굴을 더 전문화하기위한 조건을 설정할 수 있습니다.

프레임이 tty 일 때 배경색을 검은 색으로 설정하는 최소한의 변형이 있습니다 .

(custom-set-faces
 '(default (
            (((type tty) (min-colors 256))
             (:background "black"))
            (t
             (:background "#181a26")))
    ))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.