3

私はERCからの着信メッセージを変更するために以下のelispコードを使用しています

(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を引用すると、次のようになります。

このフックは、実際のテキストが挿入された後に実行されます。実行中、バッファは、narrow-to-regionを使用して挿入されたテキストに絞り込まれます。したがって、(point-min)と(point-max)を使用して、変更フックに挿入されたテキストの開始と終了を判別できます。

したがって、代わりに現在のバッファで置き換える必要があります。

于 2012-08-19T17:06:55.287 に答える