.emacs文件中的函数don';在手动执行之前,不要覆盖外部文件中的文件

.emacs文件中的函数don';在手动执行之前,不要覆盖外部文件中的文件,emacs,elisp,require,Emacs,Elisp,Require,我覆盖了erc match messagefunction erc mode,并将其保存在.emacs文件中。我向挂钩添加了额外的参数,在运行erc error in process filter: Wrong number of arguments: (lambda (match-type nickuserhost msg notification) (interactive) (if (and (eq match-type (quote current-nick)) (not notific

我覆盖了
erc match message
function erc mode,并将其保存在.emacs文件中。我向挂钩添加了额外的参数,在运行
erc

error in process filter: Wrong number of arguments: (lambda (match-type
nickuserhost msg notification) (interactive) (if (and (eq match-type
(quote current-nick)) (not notification)) (progn (async-exec-command 
"mpg123 -q /home/kuba/Pobrane/beep-8.mp3") (notify "ERC" msg)))), 3
我的钩子函数如下所示:

(取消提及通知(匹配类型nickuserhost消息通知)
(互动)
(如果(和)(均衡器匹配类型“当前刻痕”)
(非通知)
(项目
(异步执行命令“mpg123-q/home/kuba/Pobrane/beep-8.mp3”)
(通知“ERC”msg)))
(一个额外的
通知
参数)当我使用
eval last sexp
评估
erc match消息
定义时,它起作用

我有这个

(需要“erc”)
(取消erc匹配消息()
;我在erc.el中定义的覆盖函数
...)
(defun提及通知(匹配类型nickuserhost消息通知)
通知吊钩装卸工
...)
(defun irc)
“连接到freenode”
(互动)
(erc:server“barjavel.freenode.net”
:端口6667
:尼克“jcubic”
:密码“”))
(全局设置键(kbd“C-C i”)‘irc)

为什么.emacs文件中定义的函数不覆盖使用require添加的外部文件中定义的函数?

erc match message
实际上是在
erc match.el
中定义的,之后可能会以某种方式加载。尝试在重新定义之前添加
(要求“erc匹配)

我建议您使用
defadvice
更改函数的定义。它将正确处理您在定义函数之前更改定义时遇到的情况。

是否编译了.emacs?如果是这样的话,你在添加钩子函数后重新编译了吗?@KeithFlower没有,只是.emacs,我不知道我能编译它。当我改变一些东西,比如做错误,我在初始化emacs时得到了错误。好了,它现在可以工作了。但是我需要使用
(setq erc text matched hook
而不是
(add hook'erc text matched hook
),因为erc match添加了另一个抛出错误的hook。我认为它仍然会执行带有3个参数的hook