2009-11-02 5 views
0

나는 customize-create-theme을 사용하여 emacs-23 커스텀 테마를 만들었다. 그것은 X (리눅스 그놈 데스크탑)에서 잘 작동합니다. 그러나 tty (gnome-terminal 내)에서 실행될 때 일부 색상이 잘못되었습니다.tty와 호환되는 custom-theme-set-faces

두 가지 상황에서 일치시키는 것이 좋을지라도 문제가되는 색상의 정확성은 아니지만 일부는 작동 불능 인 것으로 밝혀졌습니다. 예를 들어 X 아래에 녹색으로 나타나는 함수 이름은 tty 아래에서 보이지 않지만 X 아래에 금색으로 나타나는 키워드는 tty 아래에 금색 (또는 적어도 어떤 종류의 노란색)으로 나타납니다.

아마도 tty 색상이 정확히 일치 할 수 없기 때문에 비슷한 것이 대체 될 것입니까? 그렇다면 항상 작동하지 않는 것 같습니다.

어떻게 해결할 수 있습니까? 'customize'GUI 나 ~/.emacs.d/my-theme.el 파일에서 특정면이 X에 표시된 프레임에만 적용되고 다른면은 tty 등에 대해서만 지정할 수 있습니까? 비슷한?

(나는이 점점 관심이 있어요, 내장 이맥스 테마 체제가 작동이 아닌 일부 외부 색상 테마 시스템을 사용.)

답변

0

당신은 현재의 프레임이 그래픽 윈도우에 관련되어 있는지 여부를 알 수 있습니다 변수 window-system을 검사하여 링크는 문서를 가지고 있지만, 그것은 다음과 같습니다 당신이

(if window-system 
    ;; current theme configuration 
) 

내부의 현재 테마를 포장하고 때의 xterm에서, 당신이 좋아하는 새로 만들 수 있습니다, 그래서

window-system is a variable defined in `C source code'. 
Its value is nil 

Documentation: 
Name of window system through which the selected frame is displayed. 
The value is a symbol--for instance, `x' for X windows. 
The value is nil if the selected frame is on a text-only-terminal. 

, 그리고 색상의 프레임에 사용할 수없는 경우, 이맥스는 "가까운"무언가를 시도하고 선택해야 다른 사람 (또는 다른 if 문, 또는 unlesswhen)

1

에 그것을 넣어,하지만 종종 제한 컬러 디스플레이에 매우 잘못. 이멕스에게 그놈 터미널에 있다고 생각하는 색을 M-x list-colors-display (실제로 색을 보는 것)이나 스크래치 버퍼에 (display-color-cells)으로 실행 해달라고 요청해야한다. 8 개 밖에 없다고 말하면 이멕스를 시작하기 전에 TERM 환경 변수를 xterm-256color으로 바꾸는 것을 고려해 볼 수 있습니다 (gnome-terminal에서 실제로 작동하는지 잘 모르겠지만 xterm을 사용합니다).

이렇게하면 이맥스가 더 가까운 색상을 찾을 수 있지만 여전히 틀린 경우 창 시스템을 기반으로 색상을 설정하는 것처럼 더 격렬한 작업을 수행하려고합니다. 당신은 데몬 모드를 사용하지 않을 경우 M-x describe-face를 사용하는 경우

, 당신은

(if window-system
    (set-face-foreground 'font-lock-function-name-face "LightSkyBlue"))

같은 것을 사용할 수 있습니다, 그것은 현재 시점에서 일을 디폴트, 당신이 설명 할 직면하는 요청합니다. 거기에서 이름 (일반적으로 색상)을 얻을 수 있습니다.

: 당신은 데몬 모드를 사용하는 경우

, 당신은 당신이 새로운 프레임 후크에서 프레임의 색상을 설정해야하는 경우 각 프레임에 대해 서로 다른 색상, 더 뭔가를 할 것입니다 (defun set-new-frame-colors (frame)
   "Set colors based on frame type."
   (if (window-system frame)
       (set-face-forgeground 'font-lock-function-name-face "LightSkyBlue" frame)
       (set-face-forgeground 'font-lock-function-name-face "blue" frame)))
(add-hook 'after-make-frame-functions 'set-new-frame-colors)

(window-system frame)을 확인하는 대신 (length (defined-colors frame))을 확인하고 시스템에서 지원하는 색상의 수를 기반으로하여 8 색 대 256 색 터미널에 서로 다른 색을 사용할 수 있습니다.