[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: search and multibyteness
>>>>> In [mule-ja : No.08784] 半田さん wrote:
>> このテストのために作られる summary 行は、subject や送信者名など
>> が空文字になっていて、探す対象以外に \200 に相当する文字が無いこ
>> とが保証されるので、
> ???どうやってその「罫線素片」が「ユーザの設定によっては挿
> 入されない」と保証できるんですか?
問題になった summary 行は gnus-summary-line-format というユーザ
オプションで表示仕様を変更することができ、値は次のような format
specifiers の組合せで構成されます。
"%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n"
これがデフォルト値なんですが、いくつかの意味を書くと、こうなりま
す。
%U 未読、既読、expirable などの記事の状態を一文字で表示。
%R 返信済み、フォワード済み、などの記事の状態を一文字で表示。
%4L 記事の行数を 4桁の固定枠 (左空文字詰め) で表示。
%-23,23f From または To ヘッダの内容を、長さを 23桁に制限 (右空
文字詰め) して 23桁の固定枠に表示。
(同じ記事が、返信済みかつフォワード済みだった場合は、最初に行なっ
た操作が反映されるようです。)
この変数 gnus-summary-line-format を使ってユーザが任意の文字を
summary 行に表示することは許されていません。と言いたいところです
が、実はユーザが定義した関数 gnus-user-format-function-X を %uX
として使うこともできるので、それが \200 などを挿入しないことをユー
ザが保証しなければなりません。(うーん、このことは今気がついたん
ですが、対策が必要かもしれませんね。)
実際に Gnus が行なうのは、こんなことです。
例えば mule-ja の記事を読むために、そのグループの summary mode
に入ると、最初の一回だけ Gnus はダミーの summary 行を作ります。
このとき subject や送信者名などの、通常の場合にはどんな文字が使
われるかわからない要素はすべて空文字に束縛され、既読やフォワード
済みの印がくだんの \200 などの文字に束縛されます。そうやって、ユー
ザがカスタマイズした gnus-summary-line-format 変数に基づいて作っ
た summary 行で、どの column 位置に既読やフォワード済みの印が現
れるかを探すわけです。その後は、本当の記事に基づいた summary 行
を作って表示し、記録されている情報を元にして既読やフォワード済み
の印を所定の column 位置に表示、またはその summary mode にいる間
に変化した情報を、それぞれの summary 行に反映させます。
> もしそういうことが保証できるのであれば、もっと無難な DEL と
> か "\0", "\1" などを使った方が簡単じゃないですか?
それもそうですねえ。現在は \200 などがあちこちに分散して hard
coded されているので、ほんの少しやっかいですが。
ちなみに、GNUS 4.1 までの梅田さん版には、さすがにこのような機能
は無く、Lars さんが Gnus の最初期に作ったようです。