[Mew-dist 06700] Re: pick problem

Kazumasa Utashiro utashiro at example.com
1998年 10月 15日 (木) 22:09:43 JST


From: Kenji Sato/佐藤健司 <ken at example.com>
Subject: [Mew-dist 06699] Re: pick problem
Date: Thu, 15 Oct 1998 08:19:58 +0900

> 原因が判明しました。
> 実は、+inbox の中に
> -rw-------  1 ken  users  4996604 Oct 13 09:15 38
> -rw-------  1 ken  users  1809951 Oct 14 09:24 39
> というサイズのメールがありまして、これらのメールを別のフォルダに移動し
> たところ、問題なく動作するようになりました。
> 
> 移動した先のフォルダで pick をしましたら OK でした。
> 
> 1通のメールのサイズではなく、フォルダのトータルサイズが何か関係してい
> るようです。

なぜ mew からだと動かないのかは不明ですが、今の imgrep (Grep.pm) の実
装はあんまりだと思っていたので、検索に必要なパートだけを読み込むように
修正してみました。必要なパートを見付ける部分は、やっぱりあんまりな実装
なんですが :-)

ひょっとすると、これで解決しますかね?

ところで、

	$_ = $all;

という部分が何のためにあるのかわからなかったので消しちゃったんですが、
何か意味があったんでしょうか? >作った人

--utashiro

-------------- next part --------------
*** /usr/local/src/im-101/IM/Grep.pm	Wed Sep 23 18:20:21 1998
--- Grep.pm	Thu Oct 15 21:57:17 1998
***************
*** 91,113 ****
    GREP:
      foreach $m (@src_msgs) {
  	my ($all, $head, $body) = ('', '', '');
- 	if ( open(MES, "< $m") ){
- 	    {
- 		local($/);
- 		$all = scalar(<MES>);
- 		($head, $body) = split($main::opt_delimiter, $all, 2);
- 	    }
- 	    close(MES);
  
! 	    $head =~ s/\n\s+/ /g; # fix continuation lines
! 	    $_ = $all;
! 	    if (eval $eval_string) {
! 		@messages = (@messages, $m);
! 	    }
! 	} else {
  	    if (! $main::opt_quiet) {
  		im_warn("message $m not exists: $!\n");
  	    }
  	}
      }
  
--- 91,126 ----
    GREP:
      foreach $m (@src_msgs) {
  	my ($all, $head, $body) = ('', '', '');
  
! 	unless (open(MES, "< $m")) {
  	    if (! $main::opt_quiet) {
  		im_warn("message $m not exists: $!\n");
  	    }
+ 	    next;
+ 	}
+ 	do {
+ 	    local($/) = "";
+ 
+ 	    # dirty quick hack to determine what part is required
+ 	    # should be implemented better
+ 	    my(%find) = ('head' => scalar($eval_string =~ /\$head\s*=~/),
+ 			 'body' => scalar($eval_string =~ /\$body\s*=~/),
+ 			 'all'  => scalar($eval_string =~ /\$all\s*=~/));
+ 
+ 	    $head = <MES>;		# read $head anyway
+ 	    undef $/;
+ 	    if ($find{'body'}) {	# read $body if necessary
+ 		$body = <MES>;
+ 	    }
+ 	    if ($find{'all'}) {		# construct $all if necessary
+ 		$all = $head . ($body ? $body : scalar(<MES>));
+ 	    }
+ 	};
+ 	close(MES);
+ 
+ 	$head =~ s/\n\s+/ /g; # fix continuation lines
+ 	if (eval $eval_string) {
+ 	    push(@messages, $m);
  	}
      }
  


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