Изменение цветовых тем Emacs 24 вопросов
В emacs 24 порядок, в котором применяются цветовые темы, имеет значение. Это очевидно, если вы делаете M-x color-theme-select. Порядок, который вы используете
Есть ли у кого-нибудь понимание этой проблемы?
Я хотел бы иметь возможность переключаться между следующими цветовыми темами без перезапуска:
- соляризации света
- соляризации-темнота
- zenburn
- Railscasts
Я думаю, мне нужен эквивалент css- reset для emacs.
Еще один бесценный совет: если вы используете зло, вам нужна эта строка, иначе курсор останется черным, что ужасно для темных тем:
(setq evil-default-cursor t)
Это связанная с этим проблема: Переключение между цветными темами в Emacs (< v.24). Я использую Emacs 24.0. Я отправляю этот вопрос, потому что я ищу обходное решение для pre 24.1, или, может быть, совет, если 24.1 достаточно стабилен.
Ответы
Ответ 1
Мне кажется, что даже на Emacs 24 вы по-прежнему используете старый (и неподдерживаемый) пакет цветной темы. Emacs 24 имеет встроенную инфраструктуру цветной тематики (и такие темы, как zenburn и solarized были перенесены на него), которые я предлагаю вам использовать вместо этого. Посмотрите здесь для получения более подробной информации о deftheme
и друзьях.
Чтобы ответить на ваш конкретный вопрос о цветовой тематике - темы обычно не определяют каждое лицо, которое может быть изменено предыдущей темой, и это вызывает проблемы. Переход к теме по умолчанию между темами, вероятно, можно считать похожим на css reset.
Ответ 2
Чтобы автоматически отключить текущую тему перед загрузкой новой, вы также можете использовать совет:
(defadvice load-theme
(before theme-dont-propagate activate)
(mapcar #'disable-theme custom-enabled-themes))
Ответ 3
Вставьте код ниже в ваш .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
Я написал функцию, которая отключает текущую тему, прежде чем emacs переключится на новую.
Вы можете вставить следующий фрагмент в init init и использовать 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)))
Ответ 5
Как говорили другие, переключитесь на версию тем Emacs 24. Когда вы используете это, вы можете "отменить" тему с помощью disable-theme
. Просто дайте ему тот же аргумент, что вы перешли к load-theme
, и вы должны вернуться к чистому сланцу. Затем просто загрузите новую тему.
Ответ 6
Вы можете переключаться между пользовательскими или цветными темами с помощью любой из этих библиотек:
-
Do Re Mi, команды doremi-custom-themes+
и doremi-color-themes+
. Для этого вам нужно doremi-cmd.el
.
-
Icicles, несколько команд icicle-custom-theme
и icicle-color-theme
.
С помощью команд Icicles вы также можете сузить набор тем для циклического цикла, и вы можете сортировать его различными способами (т.е. изменить порядок циклов).