From: yamaoka Date: Wed, 8 Mar 2006 09:06:15 +0000 (+0000) Subject: Synch to No Gnus 200603080905. X-Git-Tag: t-gnus-6_17_4-quimby-~50 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d66d6186cb9fb65b42d7f9630c10a6743cd279a9;p=elisp%2Fgnus.git- Synch to No Gnus 200603080905. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3ffb333..1b44fac 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2006-03-08 Katsumi Yamaoka + + * nnmail.el (nnmail-split-it): Invert match-partial-words behavior + if optional last element is specified in splits (FIELD VALUE...). + 2006-03-07 Reiner Steib * message.el (message-make-tool-bar): Rename gmm-image-load-path diff --git a/lisp/nnmail.el b/lisp/nnmail.el index c16dc46..a41d292 100644 --- a/lisp/nnmail.el +++ b/lisp/nnmail.el @@ -1419,11 +1419,12 @@ See the documentation for the variable `nnmail-split-fancy' for details." ;; Not in cache, compute a regexp for the field/value pair. (t - (let* ((field (nth 0 split)) - (value (nth 1 split)) - partial-front - partial-rear - regexp) + (let ((field (nth 0 split)) + (value (nth 1 split)) + (split-rest (cddr split)) + partial-front + partial-rear + regexp) (if (symbolp value) (setq value (cdr (assq value nnmail-split-abbrev-alist)))) (if (and (>= (length value) 2) @@ -1435,7 +1436,13 @@ See the documentation for the variable `nnmail-split-fancy' for details." (string= ".*" (substring value -2))) (setq value (substring value 0 -2) partial-rear "")) - (when nnmail-split-fancy-match-partial-words + ;; Invert the match-partial-words behavior if the optional + ;; last element is specified. + (while (eq (car split-rest) '-) + (setq split-rest (cddr split-rest))) + (when (if (cadr split-rest) + (not nnmail-split-fancy-match-partial-words) + nnmail-split-fancy-match-partial-words) (setq partial-front "" partial-rear "")) (setq regexp (concat "^\\(\\(" diff --git a/texi/ChangeLog b/texi/ChangeLog index 3bd26fd..8cfde7d 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,8 @@ +2006-03-08 Katsumi Yamaoka + + * gnus.texi (Fancy Mail Splitting): Improve descriptions about + partial-words matching. + 2006-03-07 Reiner Steib * emacs-mime.texi (Display Customization): Reword image/.* stuff. diff --git a/texi/gnus-ja.texi b/texi/gnus-ja.texi index 3e14f1f..f67aef2 100644 --- a/texi/gnus-ja.texi +++ b/texi/gnus-ja.texi @@ -13664,14 +13664,21 @@ UNDELETED} はおそらくたいていの人には最良の選択でしょうが、ときど 現の展開が行なわれます。後述の例 (訳注: @samp{\\&}, @samp{\\1}〜@samp{\\9}) を見て下さい。 -@item (@var{field} @var{value} [- @var{restrict} [@dots{}] ] @var{split}) -もし分割がリストで、最初の要素が文字列であり、ヘッダーの @var{field} (正 -規表現) が @var{value} (これも正規表現) を含んでいる場合、メッセージ -を @var{split} で指定されたグループに格納します。@var{field} の後にあっ -てしかも合致した @var{value} の最後尾より前にある何かの文字列 -に @var{restrict} (これもまた正規表現) が合致したら、@var{split} は無視 -されます。いくつかの @var{restrict} のどれもが合致しなけれ -ば @var{split} が実行されます。 +@c この行を折り返さないで下さい。 +@item (@var{field} @var{value} [- @var{restrict} [@dots{}] ] @var{split} [@var{invert-match-partial-words}]) +もし分割がリストで、最初の要素が文字列であり、@var{field} (正規表現) に +合致するヘッダーが @var{value} (これも正規表現) に合致する文字列を含んで +いたならば、@var{split} で指定されたグループにメッセージを格納します。 +@var{field} の後にあって、しかも合致した @var{value} の最後尾より前にあ +る何かの文字列に @var{restrict} (これもまた正規表現) が合致したら、 +@var{split} は無視されます。いくつかの @var{restrict} のどれもが合致しな +ければ @var{split} が実行されます。 + +最後の要素 @var{invert-match-partial-words} は任意です。これが省略されて +いなくて、しかも値が @code{nil} でなければ、語 (word) の境界をまたいで正 +規表現の合致を行なうかどうかの振る舞 +い (@code{nnmail-split-fancy-match-partial-words} 変数によって制御されま +す) が反転します (下記参照)。 @item (| @var{split} @dots{}) 分割がリストで、最初の要素が @code{|} (垂直棒) だったら、それぞれ @@ -13723,39 +13730,50 @@ UNDELETED} はおそらくたいていの人には最良の選択でしょうが、ときど 分割が @code{nil} だったら、それは無視されます。 @end table -これらの分割で、@var{fileld} は完全なフィールド名に合致しなければなりま -せん。@var{value} は基礎モード (fundamental mode) 構文テーブル (syntax -table) に従って完全に合致しなければなりません。フィールド名か語の一部分 -に合致させるために、正規表現で @code{.*} を使うことができます。言い換え -れば、すべての @var{value} は @samp{\<} と @samp{\>} の対で囲まれます。 +これらの分割で @var{fileld} は完全なフィールド名 (と言うかヘッダー名) に +合致しなければなりません。 -@quotation -訳注: この件は非常に重要です。例えば以下の分割は、ディフォルトでは永久 -に @samp{foo@@example.com} というメールアドレスに合致することはありませ -ん: +通常これらの分割における @var{value} は、基礎モード (fundamental +mode) 構文テーブル (syntax table) に従って、完全に @emph{語} (word) に合 +致しなければなりません。言い換えれば、すべての @var{value} は暗 +に @code{\<...\>} 印 (語の区切り記号) で囲まれます。したがって、例えば以 +下の分割を使うと、 -@lisp -;; @r{@@example.com} から来たすべてのメールを example グループに入れる。 -(from "@@example\\.com" "example") -@end lisp +@example +(any "joe" "joemail") +@end example -なぜかと言うと、実際に行なわれる処理は +@noindent +@samp{joedavis@@foo.org} からやって来たメッセージは、通 +常 @samp{joemail} には格納されないでしょう。この振る舞いを変更したければ、 +以下の三つのやり方のどれでもを使うことができます: -@lisp -(string-match "@@example\\.com" "foo@@example.com") -@end lisp +@enumerate +@item +@vindex nnmail-split-fancy-match-partial-words +@code{nnmail-split-fancy-match-partial-words} 変数を @code{nil} ではない +値に設定することによって、語の境界を無視させることができます。すると、合 +致はより grep ふうになります。この変数は、特級分割で語の境界をまたいだ合 +致を行なうかどうかを制御します。ディフォルト値は @code{nil} です。 -ではなくて、 +分割の規則のすべての @var{value} に影響することに注意して下さい。 -@lisp -(string-match "\\<@@example\\.com\\>" "foo@@example.com") -@end lisp +@item +@code{.*} で始まる @var{value} は、語の前にある語の境界を無視させます。 +同様に @code{.*} で終わる @var{value} は、語の後ろにある語の境界を無視さ +せます。例えば @code{"@@example\\.com"} とい +う @var{value} は @samp{foo@@example.com} に合致しませんが、 +@code{".*@@example\\.com"} ならば合致します。 -だからです。 -@code{nnmail-split-fancy-match-partial-words} (後述) を @code{nil} では -ない値に設定すれば、あなたが設定した正規表現は @samp{\<} と @samp{\>} の -対で囲まれません。 -@end quotation +@item +この章の最初の方で述べた @var{invert-match-partial-words} フラグを、 +@samp{(@var{field} @var{value} @dots{})} 型の分割規則で使うことができま +す。このフラグが設定されていると、 +@code{nnmail-split-fancy-match-partial-words} が @code{nil} であっても、 +語の両側にある語の境界は無視されます。逆に、このフラグが設定されていると、 +@code{nnmail-split-fancy-match-partial-words} が @code{nil} ではない値で +あっても、語の境界は無視されません。 +@end enumerate @vindex nnmail-split-abbrev-alist @var{field} と @var{value} は Lisp シンボルであることもできます。その場 @@ -13805,24 +13823,6 @@ table) に従って完全に合致しなければなりません。フィールド名か語の一部分 も、複数のグループが生成されてしまうことを避けることができます。ディフォ ルトは @code{t} です。 -@vindex nnmail-split-fancy-match-partial-words -@code{nnmail-split-fancy-match-partial-words} は、特級分割で部分的な語が -合致するかどうかを制御します。 - -通常 @code{nnmail-split-fancy} で与えられる正規表現は、暗に語の区切りを -表す @code{\<...\>} 印で囲まれています。この変数が真であると、それらは何 -によっても暗に囲まれません。 - -@example -(any "joe" "joemail") -@end example - -この例では、@samp{joedavis@@foo.org} から来たメッセージは、ディフォルト -では @samp{joemail} に格納されません。しかし、 -@code{nnmail-split-fancy-match-partial-words} を @code{t} に設定すると合 -致が起きます。要するに、語を区切る条件が削除され、代わりに合致がよ -り grep らしくなるのです。 - @findex nnmail-split-fancy-with-parent 関数 @code{nnmail-split-fancy-with-parent} は、フォローアップ記事を親記 事と同じグループに振り分けるために使います。メールの振り分けを一生懸命設 @@ -13864,7 +13864,7 @@ table) に従って完全に合致しなければなりません。フィールド名か語の一部分 現 @code{nnmail-split-fancy-with-parent-ignore-groups} に合致しなければ、 この関数は対応するグループ名を返すわけです。ここで、変 数 @code{nnmail-message-id-cache-length} の値をディフォルトよりも幾らか -大きな値に設定することをお勧めします。そうすると、今調べられたメッセー +大きな値に設定することを勧めます。そうすると、今調べられたメッセー ジ ID たちは今しばらくキャッシュの中に存続できます (5000 に設定するとキャッ シュファイルの大きさはだいたい 300 キロバイトぐらいになるみたいです)。 @vindex nnmail-cache-accepted-message-ids diff --git a/texi/gnus.texi b/texi/gnus.texi index 486152f..d223a7b 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -14248,7 +14248,8 @@ splits. Here are the possible split syntaxes: If the split is a string, that will be taken as a group name. Normal regexp match expansion will be done. See below for examples. -@item (@var{field} @var{value} [- @var{restrict} [@dots{}] ] @var{split}) +@c Don't fold this line. +@item (@var{field} @var{value} [- @var{restrict} [@dots{}] ] @var{split} [@var{invert-match-partial-words}]) If the split is a list, the first element of which is a string, then store the message as specified by @var{split}, if header @var{field} (a regexp) contains @var{value} (also a regexp). If @var{restrict} @@ -14256,6 +14257,11 @@ store the message as specified by @var{split}, if header @var{field} the end of the matched @var{value}, the @var{split} is ignored. If none of the @var{restrict} clauses match, @var{split} is processed. +The last element @var{invert-match-partial-words} is optional. If it is +not omitted and the value is non-nil, the match-partial-words behavior +controlled by the @code{nnmail-split-fancy-match-partial-words} variable +(see below) will be inverted. + @item (| @var{split} @dots{}) If the split is a list, and the first element is @code{|} (vertical bar), then process each @var{split} until one of them matches. A @@ -14309,10 +14315,49 @@ If the split is @code{nil}, it is ignored. @end table In these splits, @var{field} must match a complete field name. -@var{value} must match a complete word according to the fundamental mode -syntax table. You can use @code{.*} in the regexps to match partial -field names or words. In other words, all @var{value}'s are wrapped in -@samp{\<} and @samp{\>} pairs. + +Normally, @var{value} in these splits must match a complete @emph{word} +according to the fundamental mode syntax table. In other words, all +@var{value}'s will be implicitly surrounded by @code{\<...\>} markers, +which are word delimiters. Therefore, if you use the following split, +for example, + +@example +(any "joe" "joemail") +@end example + +@noindent +messages sent from @samp{joedavis@@foo.org} will normally not be filed +in @samp{joemail}. If you want to alter this behavior, you can use any +of the following three ways: + +@enumerate +@item +@vindex nnmail-split-fancy-match-partial-words +You can set the @code{nnmail-split-fancy-match-partial-words} variable +to non-@code{nil} in order to ignore word boundaries and instead the +match becomes more like a grep. This variable controls whether partial +words are matched during fancy splitting. The default value is +@code{nil}. + +Note that it influences all @var{value}'s in your split rules. + +@item +@var{value} beginning with @code{.*} ignores word boundaries in front of +a word. Similarly, if @var{value} ends with @code{.*}, word boundaries +in the rear of a word will be ignored. For example, the @var{value} +@code{"@@example\\.com"} does not match @samp{foo@@example.com} but +@code{".*@@example\\.com"} does. + +@item +You can set the @var{invert-match-partial-words} flag in your split +rules of the @samp{(@var{field} @var{value} @dots{})} types, +aforementioned in this section. If the flag is set, word boundaries on +both sides of a word are ignored even if +@code{nnmail-split-fancy-match-partial-words} is @code{nil}. +Contrarily, if the flag is set, word boundaries are not ignored even if +@code{nnmail-split-fancy-match-partial-words} is non-@code{nil}. +@end enumerate @vindex nnmail-split-abbrev-alist @var{field} and @var{value} can also be Lisp symbols, in that case @@ -14360,25 +14405,6 @@ groups when users send to an address using different case (i.e. mailing-list@@domain vs Mailing-List@@Domain). The default value is @code{t}. -@vindex nnmail-split-fancy-match-partial-words -@code{nnmail-split-fancy-match-partial-words} controls whether partial -words are matched during fancy splitting. - -Normally, regular expressions given in @code{nnmail-split-fancy} are -implicitly surrounded by @code{\<...\>} markers, which are word -delimiters. If this variable is true, they are not implicitly -surrounded by anything. - -@example -(any "joe" "joemail") -@end example - -In this example, messages sent from @samp{joedavis@@foo.org} will -normally not be filed in @samp{joemail}. With -@code{nnmail-split-fancy-match-partial-words} set to @code{t}, -however, the match will happen. In effect, the requirement of a word -boundary is removed and instead the match becomes more like a grep. - @findex nnmail-split-fancy-with-parent @code{nnmail-split-fancy-with-parent} is a function which allows you to split followups into the same groups their parents are in. Sometimes