我使用的是深蓝2色彩主题,但在控制台下看起来很丑。因此,我想在终端下使用无颜色主题,那么我该怎么做呢?
window-system
在窗口系统中是something
,在终端中则是nil
。因此,如果我想要加载color-theme-darkblue2主题,我应该执行以下操作:(if window-system
(progn
(load "color-theme")
(color-theme-darkblue2)))
否则程序将在终端中使用默认颜色。当然,如果您希望可以在else部分加载一个适用于终端的主题:
(load "color-theme")
(if window-system
(color-theme-darkblue2)
(some-term-theme)))
TERM=xterm-mono emacs -nw
如果您所说的"console"是指文本模式下的Linux控制台,您可以尝试使用"vt100"(或"vt320")代替。
我使用这个,因为我使用 Emacs CVS(未来的23)中的multi-tty功能:
(defun mrc-xwin-look (frame) "如果在 X 窗口中运行,则设置" (color-theme-deep-blue))
(defun mrc-terminal-look (frame) "如果在终端中运行,则设置" (color-theme-charcoal-black))
(defun mrc-setup-frame (frame) (set-variable 'color-theme-is-global nil) (select-frame frame) (cond ((window-system) (mrc-xwin-look frame) (tool-bar-mode -1) (mrc-maximize-frame)) (t (mrc-terminal-look frame))))
(add-hook 'after-make-frame-functions 'mrc-setup-frame)
(add-hook 'after-init-hook (lambda () (mrc-setup-frame (selected-frame))))
它根据框架是在控制台还是 X 窗口中运行选择不同的颜色主题。(我不想在控制台中失去颜色语法高亮。)
顺便说一下,最大化看起来像这样:
(defun mrc-maximize-frame () "切换窗口最大化状态" ;; 来自 http://paste.lisp.org/display/54627/raw (interactive) (cond ((eq 'x (window-system)) (progn (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0)) (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0)))) (t (message "不支持 %s 窗口系统的最大化功能" (symbol-name (window-system))))))我使用的另一个简单方法:
(when window-system
(load-theme '<myThemeName>))
因此,只要window-system不为nil(基本上是任何类型的GUI),这将在所有情况下加载主题。