如何在指定mode下选用指定主题

比如我想在org-mode模式下使用浅色主题,比如默认白色主题或者tango-light 主题。 而在一般其他模式主要是代码编辑,一般使用深色主题如monokai。

如果要分窗口显示不同主题就麻烦了,默认好像不支持。如果只是让org-mode的主题不一样,加载主题后重新把org相关的face再设置一遍应该就可以了。

开两个 Emacs

了解了,谢谢

哈哈,简单粗暴。

再请教一下,我设置了一部分像level-1 2… block, todo,checkbox 的颜色和背景都能生效,不会被新的主题给覆盖,但是整个org的背景色和默认字体的颜色在哪设置,在customize中没有找到。

下图你可以看到我想把org整个设置成浅色系,部分生效了,但背景色还是被深色主题给覆盖掉了,

这个是default face,有两种办法修改:

  1. 用face-remapping: https://www.gnu.org/software/emacs/manual/html_node/elisp/Face-Remapping.html 参考 https://emacs.stackexchange.com/questions/7281/how-to-modify-face-for-a-specific-buffer
  2. 强制设置为local variable:参考 https://stackoverflow.com/questions/17628985/how-to-set-a-buffer-locally-face-attribute-for-a-particular-buffer

假设只有一个页面,使用"C-x b"快捷键来触发,不在意页面切换时短暂的闪烁:

(defun earned:switch-to-buffer ()
  "`switch-to-buffer'"
  (interactive)
  (if (functionp (function ivy-switch-buffer))
      (ivy-switch-buffer)
    (execute-extended-command current-prefix-arg "switch-to-buffer"))
  (cl-labels ((--enable-theme
               (value)
               (when (memq value (custom-available-themes))
                 (unless (eq (car custom-enabled-themes)
                             value)
                   (dolist (theme custom-enabled-themes)
                     (disable-theme theme))
                   (enable-theme value)))))
    (cl-case major-mode
      (org-mode (--enable-theme (quote tsdh-light)))
      (t (--enable-theme (quote manoj-dark))))))

(global-set-key (kbd "C-x b") (function earned:switch-to-buffer))