能复制代码不?
(defun advice-show-paren-function (fn)
(cond ((looking-at-p "(\\|)") (funcall fn))
(t (save-excursion
(ignore-errors (backward-up-list))
(funcall fn))))
)
(run-with-idle-timer 2 nil (lambda ()
(advice-add #'show-paren-function :around #'advice-show-paren-function)))
;;-------------------------------------------------------------
(defadvice show-paren-function (around advice-show-paren-function activate)
(cond ((looking-at-p "(\\|)") ad-do-it)
(t (save-excursion
(ignore-errors (backward-up-list))
ad-do-it))))
我这里直接用advice-add都行,用emacs -Q
测试的
我在emacs的scratch里面也可以,但是添加到配置文件中,重新启动emacs就有区别
哦 多谢 我在测试下
忘了说了 这个在我的linux服务器(emacs -nw 终端使用)上没问题,在windows上有问题。。。
C-h f sh…看看函数是否有advice
两种方式show-paren-function的advice函数不一样。 第一种defadvice如下
show-paren-function is a compiled Lisp function in ‘paren.el’.
(show-paren-function)
:around advice: ‘ad-Advice-show-paren-function’
Highlight the parentheses until the next input arrives.
[back]
第二种 advice-add :emacs刚启动如下
show-paren-function is a compiled Lisp function in ‘paren.el’.
(show-paren-function)
:around advice: ‘ad-Advice-show-paren-function’
:around advice: ‘advice-show-paren-function’
Highlight the parentheses until the next input arrives.
这时候emacs刚启动advice不起作用 然后我在(advice-add #'show-paren-function :around #'advice-show-paren-function)这个后面C-x C-e后的advice如下:
show-paren-function is a compiled Lisp function in ‘paren.el’.
(show-paren-function)
:around advice: ‘advice-show-paren-function’
:around advice: ‘ad-Advice-show-paren-function’
Highlight the parentheses until the next input arrives.
advice-add 的两次说明的两个advice顺序颠倒了下,然后advice就有作用了。 还有用advice-add方式显示有两个around advice,这个是正常的么?
我使用的evil,在evil的代码里面发现有对show-paren-function有advice,是不是这个影响的。
我把evil禁用了 advice-add就起作用了,还没找见具体的原因
顺序吧,有两个override ad的时候,会覆盖前一个? 可以尝试调整evil和你自己ad的顺序,或者在evil之后remove evil的ad
好像不是evil的这个advice影响的,我把这个advice注释了还是不起作用。先不弄了,等以后有空了在看看,太费时间了