ERC - 修改传入的消息

时间:2012-08-19 10:10:38

标签: emacs elisp

我使用以下elisp代码修改来自ERC的传入消息

(defun my-modify (msg)
  (replace-regexp-in-string "abc" "xyz" msg))
(add-hook 'erc-insert-modify-hook 'my-modify)

我收到以下错误

error in process filter: Wrong number of arguments: (lambda (msg) 
(replace-regexp-in-string "abc" "xyz" msg)), 0

2 个答案:

答案 0 :(得分:2)

我不确定我之前的代码中有什么问题,但我能够使用此代码修改传入的消息(来自http://mwolson.org/projects/emacs-config/erc-init.el

(defun my-modify (proc parsed)
  (let ((msg (erc-response.contents parsed)))
    (when (stringp msg)
      (setf (erc-response.contents parsed)
            (erc-replace-regexp-in-string "abc" "xyz" msg))
      nil)))
(add-hook 'erc-server-PRIVMSG-functions 'my-modify)

这可以按预期工作,但我真正想要的是去掉一个特定的缺口并只显示消息。但是,我不认为在ERC级别这是可能的。相反,我将不得不在缓冲级别尝试它。

答案 1 :(得分:1)

显然,从erc-insert-modify-hook调用的函数不会像传入代码所期望的那样将传入消息作为参数获取。

我们看到引用http://www.emacswiki.org/emacs/ErcHooks

  

在插入实际文本后运行此挂钩。在运行时,缓冲区使用narrow-to-region缩小为插入的文本。因此,您可以使用(point-min)和(point-max)来确定修改挂钩上插入文本的开头和结尾。

所以你应该替换当前的缓冲区。