[Mew-dist 2139] Re: imsort (Re: 1.91 beta 2)

Takashi P.KATOH p-katoh at example.com
1997年 9月 19日 (金) 13:17:07 JST


かとぺ@東北大です。

From: "Takashi P.KATOH" <p-katoh at example.com>
Subject: [Mew-dist 2047] imsort (Re: 1.91 beta 2)
>> ソースをちらっと見ただけですが、上の場合、
>> [mew-dist][Re:を除いたsubject]['Re: 'があれば'Re: '][シーケンス番号]
>> としてソートをかけるようです。うれしいような、うれしくないような…
...
> From: SAKAI Kiyotaka <ksakai at example.com>
> Subject: [Mew-dist 2041] Re: 1.91 beta 2
>> 以前に mew-dist に流れたパッチを当てたためですが、どういう仕様になるの
>> が嬉しいでしょうか?
> せめてオプション (と ~/.im/Config) で on/off できるとよいと
> 思います。

と思ったのですが、いろいろやってみた結果、

(1) どうせ Subject: で sort するときは --mode を指定しなきゃ
    いけないんだから、

    | % imsort --field=subject --mode=text          (以前の仕様)
    | % imsort --field=subject --mode=text --ml     (現在の仕様)

    で区別するよりは、

    | % imsort --field=subject --mode=text
    | % imsort --field=subject --mode=ml

    の方が自然 (だと思う)。

(2) (両方考慮するんだったら) こっちの方が mew-sort.el をいじ
    るときもラク :-)

なので、新たに mode を追加するのが良いと思います。

ってことでパッチです。
ただ ml という名前は非常にカッコ悪いと思いますので、もっとナ
イスな名前にしてくれると嬉しいです。
# enum (eliminate number) とか、nnum (no number) とか考えた
# んですが、いまいちピンとこなくって...


ついでに、

> あと、いまのままだと
> | Subject: (foo-ml 1737) This is subject
> のように ( ) になってるのはダメですね。
> 比較的良くあるパターンだと思いますので、残すならこれも対応し
> た方がいいように思います。

も出来るようになってると思います。
# [foo:01234) とか (bar 2345] とかもマッチしちゃいますけど、
# いいですよね (^^;

-- 
  東北大学大学院 情報科学研究科 白鳥研究室    加藤 貴司
  p-katoh at example.com / Takashi P.KATOH
  http://www.shiratori.riec.tohoku.ac.jp/~p-katoh/MAIL/

-------------- next part --------------
--- imsort.in,orig	Tue Sep  9 14:30:37 1997
+++ imsort.in	Fri Sep 19 13:07:07 1997
@@ -74,7 +74,7 @@
 $opt_src   || im_die "no folder specified.\n";
 @msgs      || im_die "no message specified.\n";
 $opt_field || im_die "no field specified.\n";
-$opt_mode =~ /^(date|num|text)$/
+$opt_mode =~ /^(date|num|text|ml)$/
     || im_die "Wrong mode $opt_mode.\n";
 
 #
@@ -118,9 +118,9 @@
     foreach $path (@msg_paths){
 	im_die "No file $path in $src. (Nothing was done.)\n"
 	    if (!-f $path);
-	push(@param, get_field_value($path, $field, $mode eq 'date'));
+	push(@param, get_field_value($path, $field, $mode));
     }
-    if ($mode eq 'text'){
+    if (($mode eq 'text') || ($mode eq 'ml')) {
 	@sorted_index = sort { $param[$a] cmp $param[$b] } 0 .. $#msg_paths;
     } else {
 	@sorted_index = sort { $param[$a] <=> $param[$b] } 0 .. $#msg_paths;
@@ -151,7 +151,7 @@
 }
 
 sub get_field_value ($$$) {
-    my ($path, $field, $is_date) = @_;
+    my ($path, $field, $smode) = @_;
     local $_;
     local $/ = '';
     my ($ml, $num);
@@ -165,12 +165,16 @@
 
     ($_) = /^$field:\s+([^\n]*)/imo;
     if (lc($field) eq 'subject') {
-	s/^\[([^\]]*)\]\s*//i;
-	$1 =~ /^(.*)[:,\s](.*)$/;       $ml=$1; $num=$2;
-	s/^(re:\s*)(.*)$/$2$1/i;
-	$_ = $ml . $_ . $num;
+	if ($smode eq 'ml') {
+	    s/^[\[\(]([^\]\)]*)[\]\)]\s*//i;
+	    $1 =~ /^(.*)[:,\s](.*)$/;       $ml=$1; $num=$2;
+	    s/^(re:\s*)(.*)$/$2$1/i;
+	    $_ = $ml . $_ . $num;
+	} else {
+	    s/^(re:\s*)(.*)$/$2$1/i;
+	}
     }
-    if ($is_date){
+    if ($smode eq 'date'){
 	if (/(\d+)\s+($m_rxp)\s+(\d+)\s+(\d+):(\d+)(:(\d+))?\s+($z_rxp)/io){
 	    return sec_from_epoc($3<100?$3+1900:$3, $MONTH{$2}, $1,
 				 $4, $5, $7+0, $8);


Mew-dist メーリングリストの案内