我的包需要支持 26.3+,使用到了 org-show-entry
,但是 Emacs 29 中使用报警:
elisp-demos.el:111:14: Warning: `org-show-entry' is an obsolete function (as
of 9.6); use `org-fold-show-entry' instead.
但是我不用使用 org-fold-show-entry
,因为它依赖 Emacs 29。有办法去掉这个警告吗?如果实在不行,不用管也 OK 的。
根据 org-fold-show-entry
是否定义来条件编译,比如
(funcall (eval-when-compile (if (fboundp 'org-fold-show-entry) #'org-fold-show-entry #'org-show-entry)) …)
我试了下,发现 #'
还是会触发 byte compiler 的检测,并报警:
去掉 # 能消除 Emacs 29 的警告:
(funcall (if (fboundp 'org-fold-show-entry)
#'org-fold-show-entry
'org-show-entry))
不过我这把两个 # 都拿掉了,不然 29 以下估计也有警告
那还可以
(eval-when-compile
(defmacro wrap-org-show-entry (&rest args)
`(,(if (fboundp 'org-fold-show-entry)
'org-fold-show-entry
'org-show-entry)
,@args)))
1 个赞
这毕竟要额外引入一个符号,感觉不如用 cl-macrolet。另外您睡得好晚哦
eval-when-compile 在编译完以后就没了,不会占用符号。cl-macrolet 如果只有一处用到那无所谓,也能用,但不编译的话也不比 defmacro 干净多少。另外我在北美。
1 个赞
这个是正解,更粗暴的是直接判断版本号,调用不同的函数。