升到emacs 28后发现一个问题,之前用来作为mpd前端听歌的mingus不能用了。排查了一番之后发现原因似乎在于mingus中require了libmpdee
这个包,但是这个包在emacs 28中无法正常的自动载入。
特别是我发现即便手动(require 'libmpdee)
,这个包中定义的一些macro仍然无法在启动时自动载入,所以导致mingus无法运行,除非我手动eval-buffer
。特别是,这些无法载入的macro都放在eval-after-compile
中,就像如下形式。
(eval-when-compile
(defmacro _mpdgv () `(aref conn 0))
(defmacro _mpdsa (val) `(aset conn 9 ,val)))
在emacs 27中我没有遇到这个问题,emacs 28是有什么变化吗?有什么办法克服这个问题吗?
我把mingus重新byte compile生成elc文件后,还是不行。我要是把libmpdee重新byte compile一次,那么mingus就可以用了。但问题是下次emacs启动后,就又不能用了。
你有没有试过先 byte compile libmpdee 再 byte compile mingus。记得用 byte-force-recompile。
我以这个次序试过了,还是当时可以,重启emacs后就失效。
我看了下 libmpdee 的代码,它太老了,在 Emacs 28 上编译起来有问题。
我可以给整个修改版的。
https://pastebin.com/w0n2HXWU
把 '(lambda
改成 #'(lambda
再编译就好了。
2 个赞
谢谢大佬帮忙!果然可以了。
把 '(lambda
改成 #'(lambda
再编译就好了
我之前听说这个#
符号在这种情况下加不加应该对语义没有什么影响。但升到28后,如果匿名函数之前没有这个#
符号,编译时的确会产生警告。28是有什么相关改变吗?
好像也是啊 ,我是之前论坛有人推荐mingus,试了试发现还不错,就一直用着了。这算是路径依赖?
SPQR
12
内置竟然还有这个 ,除了没有tag编辑之外感觉功能不比ncmcpp少,而且基本上配置好mpd之后开箱即用,感觉之前错过了一个亿 。
mingus最新版已经解决这个问题,可以直接升级使用了。不过我使用中发现两个问题:
- playlist 界面中,timer 刷新会导致 face 失效。
- 是不是会卡死 emacs,只能重启,
C-g
都不好使。