作为一个主题控,经常会切换主题,之前切换主题的方式是这样的,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,绑定一个快捷键吧
知识共享署名-非商业性使用-相同方式共享4.0国际许可协议