Изменение цвета темы Emacs 24 - порядок вопросов - PullRequest
22 голосов
/ 28 марта 2012

В emacs 24 порядок применения цветовых тем имеет значение.Это очевидно, если вы делаете Mx color-theme-select.Порядок, в котором вы говорите *

Кто-нибудь имеет представление об этой проблеме?

Я бы хотел иметь возможность переключаться между следующими цветовыми темами без перезагрузки:

  1. солнечный свет
  2. солнечный свет
  3. zenburn
  4. railscasts

Я думаю, мне нужен эквивалент сброса css для emacs,Еще один совет, который неоценим, заключается в том, что если вы используете зло, тогда вам нужна эта строка, иначе курсор остается черным, что ужасно для темных тем:

(setq evil-default-cursor t) 

Это связанная проблема: Переключение между цветовыми темами в Emacs (.Я использую Emacs 24.0.Я публикую этот вопрос, потому что я ищу обходной путь для pre 24.1 или, возможно, совет, если 24.1 достаточно стабилен.

Ответы [ 6 ]

17 голосов
/ 28 марта 2012

Мне кажется, что даже в Emacs 24 вы все еще используете старый (и не поддерживаемый) пакет цветовых тем.Emacs 24 имеет встроенную инфраструктуру цветовых тем (и такие темы, как zenburn и solarized были перенесены на него), которую я бы предложил вам использовать вместо.Посмотрите здесь для получения подробной информации о deftheme и друзьях.

Чтобы ответить на ваш конкретный вопрос о цветовой теме - темы обычно не определяют все лица, которые могли быть изменены предыдущей темой и которые вызывают ваши проблемы.Переход к теме по умолчанию между темами, вероятно, может рассматриваться как сброс css.

10 голосов
/ 24 марта 2013

Чтобы автоматически отключить текущую тему перед загрузкой новой, вы также можете воспользоваться советом:

(defadvice load-theme 
  (before theme-dont-propagate activate)
  (mapcar #'disable-theme custom-enabled-themes))
6 голосов
/ 14 сентября 2013

Вставка приведенного ниже кода в ваш .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)
4 голосов
/ 23 октября 2012

Я написал функцию, которая отключает текущую тему, прежде чем emacs переключится на новую.

Вы можете вставить следующий фрагмент в свой init.el и использовать M-x 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)))
3 голосов
/ 28 марта 2012

Как уже говорили другие, переключитесь на версию Emacs 24 тем.Как только вы используете это, вы можете "отменить" тему с помощью disable-theme.Просто дайте ему тот же аргумент, который вы передали load-theme, и вы должны вернуться к чистому листу.Затем просто загрузите новую тему.

2 голосов
/ 29 октября 2013

Вы можете переключаться между пользовательскими или цветными темами, используя любую из следующих библиотек:

  • Do Re Mi , команды doremi-custom-themes+ и doremi-color-themes+. Для этого вам нужно doremi-cmd.el.

  • Сосульки , мультикоманды icicle-custom-theme и icicle-color-theme.

С помощью команд Icicles вы также можете сузить набор тем для циклического переключения и сортировать их различными способами (т.е. изменять порядок цикла).

...