方便的切换emacs主题


作为一个主题控,经常会切换主题,之前切换主题的方式是这样的,M-x,`load-theme`,选中,但是个人认为不够便捷,正好前几天发现了hydra这个插件,也想实践一下

获取主题列表

1(setq maple-cycle-themes (mapcar 'symbol-name (custom-available-themes)))

获取当前主题索引

1(cl-position (car (mapcar 'symbol-name custom-enabled-themes)) maple-cycle-themes :test 'equal)

获取下一个主题

1(setq maple-current-theme-index
2      (+ 1 maple-current-theme-index))
3(setq maple-current-theme (nth maple-current-theme-index maple-cycle-themes))

加载主题

1(load-theme (intern maple-current-theme) t)

最后得到这样的函数

 1(defun maple/cycle-theme (num)
 2  (interactive)
 3  (setq maple-current-theme-index
 4        (+ num
 5           (cl-position
 6            (car (mapcar 'symbol-name custom-enabled-themes)) maple-cycle-themes :test 'equal)))
 7  (when (>= maple-current-theme-index (length maple-cycle-themes))
 8    (setq maple-current-theme-index 0))
 9  (setq maple-current-theme (nth maple-current-theme-index maple-cycle-themes))
10  (mapc 'disable-theme custom-enabled-themes)
11  (let ((progress-reporter
12         (make-progress-reporter
13          (format "Loading theme %s..." maple-current-theme))))
14    (load-theme (intern maple-current-theme) t)
15    (progress-reporter-done progress-reporter)))
16(defun maple/next-theme()
17  (interactive)
18  (maple/cycle-theme 1))
19(defun maple/previous-theme()
20  (interactive)
21  (maple/cycle-theme -1))
22(defhydra maple/cycle-themes ()
23  ("n" maple/next-theme "next theme")
24  ("p" maple/previous-theme "prev theme"))

ok,绑定一个快捷键吧

作者: honmaple
链接: https://honmaple.me/articles/2017/05/方便的切换emacs主题.html
版权: CC BY-NC-SA 4.0 知识共享署名-非商业性使用-相同方式共享4.0国际许可协议
wechat
alipay

加载评论