3

我正在使用下面的 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
4

2 回答 2

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 级别是不可能的。相反,我将不得不在缓冲区级别尝试它。

于 2012-08-21T05:53:50.727 回答
1

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

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

这个钩子在插入实际文本后运行。当它运行时,缓冲区使用窄到区域缩小到插入的文本。因此,您可以使用 (point-min) 和 (point-max) 来确定修改钩子上插入文本的开始和结束。

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

于 2012-08-19T17:06:55.287 回答