riece-keywords に正規表現を
riece-keyword.el を眺めていたところ riece-keywords に正規表現が指定できる事に気付きました。
(defcustom riece-keywords nil "Keywords to be highlightened." :type '(repeat (choice (string :tag "Keyword") (cons (string :tag "Regexp") (integer :tag "Match"))))
そこで以下のように riece-keywords を設定してみました。
(setq riece-keywords '(("[Ee]lim" . 0) ("[Ee]macs" . 0)))
しかしこれでは alist が ( ("[Ee]lim" . 0) ("[Ee]macs" . 0) ("" . 0) ) となってしまい、望み通りにマッチしないようです。
riece-keywords が使われる個所を探ると以下のように書かれていました。(let の body 以降は省略しました)
(defun riece-keyword-message-filter (message) (if (and (get 'riece-keyword 'riece-addon-enabled) riece-keywords ;; Ignore messages which belongs to myself. (not (riece-message-own-p message))) (let* (keywords (alist (nconc (delq nil (mapcar (lambda (matcher) (if (stringp matcher) (ignore (setq keywords (cons matcher keywords))) matcher)) riece-keywords)) (list (cons (regexp-opt keywords) 0)))) index)
ここで riece-keywords 内の各要素が文字列か調べて、文字列の場合は後で纏めて正規表現にし、それ以外はそのまま正規表現として使っているようです。
ところでこの関数へ正規表現のリストだけを渡した場合
- keywords が nil のままになる
- regexp-opt へ nil が渡る
- regexp-opt が nil を "" にして返す
- alist へ ("" . 0) が追加される
ことがわかりました。
そこで以下のように書き換える事で、望み通りマッチするようになりました。
--- riece-keyword.el.orig 2008-03-26 22:49:05.000000000 +0900 +++ riece-keyword.el 2008-03-26 22:49:25.000000000 +0900 @@ -86,7 +86,8 @@ (setq keywords (cons matcher keywords))) matcher)) riece-keywords)) - (list (cons (regexp-opt keywords) 0)))) + (when keywords + (list (cons (regexp-opt keywords) 0))))) index) (while alist (setq index 0)
さっそく(CVS に)取り込んでいただけました :)