2009-11-02 20 views
0

我使用customize-create-theme創建了一個emacs-23自定義主題。它在X(Linux gnome桌面)下正常工作。但是,在tty(在gnome-terminal內)下運行時,某些顏色是錯誤的。與tty兼容的custom-theme-set-faces

這不是顏色的準確性是一個問題(雖然在兩種情況下匹配它們會很好),但有些事實是不可行的。例如,在X下顯示爲綠色的函數名稱在tty下是不可見的,儘管在X下出現黃金的關鍵字在tty下也顯示爲黃金(或至少某種黃色)。

也許根據tty的顏色不能完全匹配,所以類似的東西被替換?如果是這樣,這似乎並不一直工作。

我該如何解決這個問題?是否可以在'customize'GUI或〜/ .emacs.d/my-theme.el文件中指定某些面只適用於X上顯示的框架,而其他面只適用於tty,或者其他類似?

(我感興趣的是得到這個,內置emacs的主題化系統的工作,而不是使用一些外部顏色主題系統。)

回答

0

你可以告訴是否將當前幀與圖形窗口關聯通過檢查變量window-system。鏈接有文檔,但它看起來像:

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 window-system 
    ;; current theme configuration 
) 

,然後在一個xterm時,創建一個你喜歡的新的,並提出,在其他人(或其他if陳述或者unlesswhen

1

如果顏色是框架上不可用,Emacs的應該儘量挑事「關閉」,但往往在有限的彩色顯示器非常錯誤的。您應該使用M-x list-colors-display(實際查看顏色)或在臨時緩衝區中運行(display-color-cells),向emacs詢問它認爲它在gnome-terminal中有多少種顏色。如果它說你只有8個,你可能要考慮在啓動emacs之前將你的TERM環境變量改爲xterm-256color之類的東西(儘管我不確定它在gnome-terminal中的效果如何;我使用的是xterm)。

所以這可能會幫助emacs找到更接近的顏色,但是如果它仍然是錯誤的,您會想要做更激烈的事情,比如根據窗口系統設置顏色。

如果你不使用守護進程模式,可以如果使用M-x describe-face使用類似

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

,它會問你要描述了面子,默認爲目前在點之一。你可以從那裏得到名字(通常是顏色)。

如果您使用daemon模式,那麼你會希望對每幀不同的顏色,在這種情況下,你需要設置顏色爲在新的框架掛鉤的框架,更多的東西一樣:

(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)

或者,您可以檢查(length (defined-colors frame))並根據系統支持多少種顏色,而不是檢查(window-system frame),以便爲8色和256色終端提供不同的顏色。