[mew-dist 24962] mew-refile-guess-by-alist2 failes by some regexps.
Kyotaro HORIGUCHI
horiguti at example.com
2004年 5月 28日 (金) 19:45:35 JST
堀口です.
string-match は regexp の書き方によっては (match-data) の中に nil
が入ることがあります. こんな感じです.
> (if (string-match "\\(abc\\|cdf\\)@a.jp\\|\\(efg\\|hij\\)@b.jp"
> "efg at example.com")
> (match-data)
> nil)
> (0 8 nil nil 0 3)
これが原因で mew-refile-geuss-alist の内容によっては refile の処理中に
mew-refile-guess-by-alist2 の中でエラーで止まってしまうことがあります.
(これは私が実際に困っていることです.)
これに単純に対処すると, 今度は最後にマッチしたmatch(?)より後ろには要素が無
いので, 以下のようにすると期待した(のかな? 私はやってませんが..)動作をせずに
エラーになります.
> (mew-refile-guess-by-alist2
> "\\(abc\\|cdf\\)@\\(a\\).jp\\|\\(efg\\|hij\\)@\\(b\\).jp"
> "efg at example.com"
> "+\\2\\4/\\1\\3/hoge")
以下のパッチで以上の問題への対処になると思います.
Index: mew-refile.el
===================================================================
RCS file: /cvsmew/mew/mew-refile.el,v
retrieving revision 1.113
diff -u -r1.113 mew-refile.el
--- mew-refile.el 21 May 2004 03:25:34 -0000 1.113
+++ mew-refile.el 28 May 2004 10:31:33 -0000
@@ -261,13 +261,17 @@
(string-match regex string)
(setq match (cdr (cdr (match-data))))
(while match
- (setq str (substring string (car match) (car (cdr match))))
+ (setq str
+ (if (car match)
+ (substring string (car match) (car (cdr match)))
+ nil))
(setq strs (cons str strs))
(setq match (cdr (cdr match))))
(setq strs (cons nil (nreverse strs))) ;; cons nil for 0th
(while (string-match "\\\\\\([1-9]\\)" template)
(setq repl (nth (string-to-int (match-string 1 template)) strs))
- (setq template (replace-match repl nil nil template)))
+ (setq template
+ (replace-match (if repl repl "") nil nil template)))
template))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
--
堀口恭太郎
Mew-dist メーリングリストの案内