使用cycle-theme
这个函数的时候按理说根据这行代码
(let ((progress-reporter
(make-progress-reporter
(format "Loading theme %s..." dalu--current-theme))))
(load-theme (intern dalu--current-theme) t)
(progress-reporter-done progress-reporter))
应该是可以在minibuffer显示Loading theme
的,但是如图所示一直是显示空白,查看*Message*
也确实是输出了这行信息。查看Minibuffer-message-timeout
变量,它的值也设为了2,应该不会马上消失。
如果直接C-x C-e
上述let代码的话也会在minibuffer显示Loading theme
的信息,但是在执行cycle-theme
函数的时候minibuffer就是一片空白了。
我现在想的是会不会是更换主题导致界面刷新,所以使得minibuffer信息缺失?
希望懂的人能为我解惑
当我执行函数的时候,minibuffer始终是空白的,这也会被刷掉吗?
你把 (load-theme...)
删掉或改成语句试试。
(load-theme (intern dalu--current-theme) t)
这一行是载入主题的关键句,删掉了就没法载入新主题了啊
改成语句的话应该要怎么做?我是elisp小白
图中显示的 next pre 这一行字不就是显示在 MiniBuffer / Echo Area 处吧?没怎么用过 Hydra,不知道它显示的时候,message 还能不能用。
显示的信息是可以出现在next prev
下面那一行minibuffer里的,如果我把贴出来的函数代码改为
(let ((progress-reporter
(make-progress-reporter
(format "Loading theme %s..." dalu--current-theme)
0 500)))
(dotimes (k 500)
(sit-for 0.01)
(progress-reporter-update progress-reporter k))
(load-theme (intern dalu--current-theme) t)
(progress-reporter-done progress-reporter))
在next prev
下面的minibuffer是可以看到Loading theme...[进度条]
信息的,进度条走完信息立刻就消失了,按理说这条信息是可以保留一段时间的,但不知道是什么原因导致的在我这里会立刻消失
这两个同时在用 Echo Area,有冲突、不完全兼容应该并不奇怪。只看你的标题,切换个主题和 message
之间不会有什么问题:
(defun foo ()
(interactive)
(let ((theme 'manoj-dark))
(message "Loading theme %s..." theme)
(load-theme theme 'no-comfirm)
(message "Loading theme %s...done" theme)))
make-progress-reporter
跟 message
作用一样。
参考了陈斌大神的配置后,我现在的代码是这样的
(defun dalu//cycle-theme (index)
"Cycle through a list of themes among `dalu-theme-list'."
(setq dalu-current-theme-index
(+ index (cl-position
(car (mapcar 'symbol-name dalu-theme-list)) dalu-cycle-themes :test 'equal)))
(when (>= dalu-current-theme-index (length dalu-cycle-themes))
(setq dalu-current-theme-index 0))
(when (< dalu-current-theme-index 0)
(setq dalu-current-theme-index (- (length dalu-cycle-themes) 1)))
(let* ((dalu--current-theme (nth dalu-current-theme-index dalu-cycle-themes)))
(counsel-load-theme-action dalu--current-theme)
(message "Loading theme %s..." dalu--current-theme)))
这代码在minibuffer所起的作用应该跟您贴出来的是一致的,但实际情况是minibuffer仍然没有任何显示,Loading theme...
的信息仍然只出现在*Message*
里
我用make-process-reporter
的主要原因是在加载完成后,对于显示在minibuffer的字符串它能自动加上一个done。。。
不过用make-process-reporter
和message
这两种做法都不起作用,我实在想不出会是哪里的问题了。。。真的是next
和prev
把minibuffer显示的信息挡住了不成 但是给make-process-reporter
加上延时后在next
和prev
的下面是能看到Loading theme...
的,切换完成后就瞬间消失了。。。
我本地测试没有问题,直接 message 也行。你可以用 emacs -Q
试试。如果没有问题的话,就是你的配置有冲突。
counsel-load-theme-action
是什么函数?会产生什么影响?
把代码精简到只有一句 (message ...)
,然后逐渐添加,看那一句出了问题。
笨方法往往也是有效的方法。
1 个赞
先禁用当前主题,然后载入新主题
原来是这个意思 ,是我没搞懂;按照你说的方法试了后,发现本身的问题不在自己写的函数里,问题出在hydra
身上,谢啦!
多谢帮忙测试,按楼下的说法一步步测试后发现问题所在了