23

在 emacs 24 中,应用颜色主题的顺序似乎很重要。如果您执行 Mx color-theme-select,这很明显。你 ic 的顺序

有人对这个问题有任何见解吗?

我希望能够在以下颜色主题之间切换而无需重新启动:

  1. 日光
  2. 晒黑
  3. 曾本
  4. 轨道广播

我想我需要相当于 emacs 的 css-reset 。另一个非常宝贵的提示是,如果你使用 evil,那么你需要这条线,否则你的光标会保持黑色,这对于黑暗主题来说是可怕的:

(setq evil-default-cursor t) 

这是一个相关问题:Switching between color theme in Emacs (< v.24)。我正在使用 Emacs 24.0。我发布这个问题是因为我正在寻找 24.1 之前的解决方法,或者如果 24.1 足够稳定,可能会提供建议。

4

6 回答 6

18

在我看来,即使在 Emacs 24 上,您仍在使用旧的(且未维护的)颜色主题包。Emacs 24 有一个内置的颜色主题基础设施(像zenburnsolarized这样的主题已经被移植到它上面),我建议你改用它。看看这里的细节deftheme和朋友。

То 回答您关于颜色主题的特定问题 - 主题通常不会定义先前主题可能已调整并导致您的问题的每一个面孔。在主题之间移动到默认主题可能被认为类似于 css 重置。

于 2012-03-28T06:46:33.507 回答
12

要在加载新主题之前自动禁用当前主题,您还可以使用建议:

(defadvice load-theme 
  (before theme-dont-propagate activate)
  (mapcar #'disable-theme custom-enabled-themes))
于 2013-03-24T03:56:04.557 回答
8

在你的 .emacs/init.el 中插入下面的代码,我必须C-t以指定的顺序循环浏览一个固定的主题列表。这与 Emacs 24 兼容。

;;;;; Theme ;;;;;
;; Cycle through this set of themes
(setq my-themes '(solarized-light solarized-dark zenburn railscast))

(setq my-cur-theme nil)
(defun cycle-my-theme ()
  "Cycle through a list of themes, my-themes"
  (interactive)
  (when my-cur-theme
    (disable-theme my-cur-theme)
    (setq my-themes (append my-themes (list my-cur-theme))))
  (setq my-cur-theme (pop my-themes))
  (load-theme my-cur-theme t))

;; Switch to the first theme in the list above
(cycle-my-theme)

;; Bind this to C-t
(global-set-key (kbd "C-t") 'cycle-my-theme)
于 2013-09-13T22:21:49.387 回答
5

我写了一个函数,在 emacs 切换到新主题之前禁用当前主题。

您可以将以下代码段粘贴到您的 init.el 中并使用 Mx l0ad-theme。

https://github.com/maruks/.emacs.d

    ;; color themes
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes")

(setq current-t43m3 nil)

(defun enab-theme (theme) 
  (if current-t43m3 (disable-theme current-t43m3))
  (setq current-t43m3 theme) 
  (load-theme theme t)) 

(defun disab-current-theme () 
  (if current-t43m3 (disable-theme current-t43m3))
  (setq current-t43m3 nil))

(global-set-key (kbd "C-c ltwo") '(lambda () (interactive) (enab-theme 'wombat)))

(global-set-key (kbd "C-c ltze") '(lambda () (interactive) (enab-theme 'zenburn)))

(global-set-key (kbd "C-c ltsd") '(lambda () (interactive) (enab-theme 'solarized-dark)))

(global-set-key (kbd "C-c ltsl") '(lambda () (interactive) (enab-theme 'solarized-light)))

(global-set-key (kbd "C-c ltne") '(lambda () (interactive) (enab-theme 'tomorrow-night-eighties)))

(global-set-key (kbd "C-c ltni") '(lambda () (interactive) (enab-theme 'tomorrow-night)))

(global-set-key (kbd "C-c ltnb") '(lambda () (interactive) (enab-theme 'tomorrow-night-bright)))

(global-set-key (kbd "C-c ltto") '(lambda () (interactive) (enab-theme 'tomorrow)))

(global-set-key (kbd "C-c ltta") '(lambda () (interactive) (enab-theme 'tango)))

(global-set-key (kbd "C-c ltdb") '(lambda () (interactive) (enab-theme 'deeper-blue)))

(global-set-key (kbd "C-c ltdi") '(lambda () (interactive) (enab-theme 'dichromacy)))

(global-set-key (kbd "C-c dct") '(lambda () (interactive) (disab-current-theme)))

(defun l0ad-theme (name) 
  (interactive
   (list
    (intern (completing-read "Load custom theme: "
                 (mapcar 'symbol-name (custom-available-themes))))))
  (enab-theme name))

(setq d3fault-theme (getenv "EMACS_DEFAULT_THEME"))

(when d3fault-theme
  (enab-theme (intern d3fault-theme)))
于 2012-10-23T14:56:17.337 回答
4

正如其他人所说,切换到 Emacs 24 版本的主题。使用它后,您可以使用disable-theme. 只要给它你传递给它的同样的论点,你就load-theme应该回到一张白纸上。然后只需加载新主题。

于 2012-03-28T11:27:56.940 回答
3

您可以使用以下任一库在自定义或颜色主题之间循环:

  • 做Re Mi,命令doremi-custom-themes+doremi-color-themes+。你需要doremi-cmd.el这个。

  • 冰柱,多命令icicle-custom-themeicicle-color-theme

使用 Icicles 命令,您还可以缩小要循环的主题集,并且可以以各种方式对其进行排序(即更改循环顺序)。

于 2013-10-28T20:26:19.763 回答