[Mew-dist 05466] Re: About imstore

Nobuhiro Tsuchie tsuchie at example.com
1998年 7月 10日 (金) 10:27:26 JST


いつもお世話になっています。土江です。

>>>>> On Fri, 10 Jul 1998 00:18:27 +0900
>>>>> mokkun at example.com(Akihiro Motoki)  said:

元木> ・immv や imrm ( imclean もか)を行ったときに、きちんとunseenから消す。
元木>   Mew では refile や delete を(IMを利用せずに)自分で行うので、
元木>   そっちでもインターフェースが必要である。

MH のコマンドがどんな挙動をしていたか憶えていません。
調べてから、考えます。

元木> ・pack や sort を行ったときはどうするのか?
元木>   (これが一番むずかしいかも。IMでするのかMewでするか、それとも無視?)
元木>   そういえば、マークの保存の話がありましたね。どうなったんでしょう。

これも、MH の挙動を調べてからにします。ところで、"マークの保存" とは、
何でしょうか?

元木> ・今の get.sbr ではファイル番号(filename)を並べて書いていくので、
元木>   mh と同じ形式の方で短かく書けるようにしたい。
元木>   (これはget.sbrを適当にいじくればいいかも)

パッチを作りました。添付します。他にも問題がありました。列挙します。
(1) 予め、.mh_sequences が存在しなければならない。
(2) 予め、.mh_sequences の中に unseen の行が存在しなければならない。
(3) imget で複数のメールを取り込むと、次のようになる。

unseen:  301 301-302

元木> 土江さんの最初の要望ですと、到着したメールのうちフォルダにいきなり
元木> 放り込むものがあるが、それをチェックしたいということだと理解しています。
元木> 私も同じことをしようとして、昔は新着メールの数だけをチェックする
元木> シェルスクリプトを書いて使っていました。処理は、mew-cache の最終行と
元木> MHのfolderコマンドを使って、引き算して未読数を出すものでしたが、
元木> お手軽なチェックには便利でした。(今思えば、mhpath last で十分だなぁ)

監視してくれないのであれば、直接 prom-mew を起動した方が良いと思います。
また、imget は、いつも空の /usr/spool/mail/ログイン名 というファイルを
見に行くようにしており、全てのメールを fetchmail & procmail & rcvstore で
各フォルダに振り分けていました。

元木> xpnbiff は使用したことがないのですが、複数のフォルダの場合も一度に
元木> チェックしてくれるものなのでしょうか?

そうです。監視したい複数のフォルダを指定できます。
動作は、xbiff と似ています。
本来は、ニュースグループの新着記事の有無を監視するツールであり、
MH フォルダを監視する機能は、あとから追加されたようです。
archie で、次のファイルを探してみて下さい。

xpnbiff-1.6.tar.gz
xpnbiff-1.7.patch

土江 伸宏
tsuchie at example.com
-------------- next part --------------
*** im-94/dot.im/get.sbr.bak	Sun Nov 30 15:29:37 1997
--- im-94/dot.im/get.sbr	Fri Jul 10 09:15:43 1998
***************
*** 13,43 ****
      my $dir = expand_path($folder);
      my ($name, $val);
  
!     open(SEQ, "$dir/.mh_sequences") || return;
  
-     while (<SEQ>) {
- 	chomp;
- 	($name, $val) = split(': ');
- 	$hash{$name} = $val;
      }
  
!     close(SEQ);
  
!     if (defined($hash{'unseen'})) {
! 	if ($first == $last) {
! 	    $hash{'unseen'} .= " $first";
! 	} else {
! 	    $hash{'unseen'} .= " $first-$last";
! 	}
! 
! 	open(SEQ, ">$dir/.mh_sequences");
! 
! 	foreach (keys %hash) {
! 	    print SEQ "$_: $hash{$_}\n";
! 	}
  
! 	close (SEQ);
      }
  }
  
  1;
--- 13,84 ----
      my $dir = expand_path($folder);
      my ($name, $val);
  
!     $stat = open(SEQ, "$dir/.mh_sequences");
! 
!     if ($stat) {
! 
!        while (<SEQ>) {
! 	  chomp;
! 	  ($name, $val) = split(': ');
! 	  $hash{$name} = " $val";
!        }
! 
!        close(SEQ);
  
      }
  
!     if ($first == $last) {
!        $hash{'unseen'} .= " $first";
!     } else {
!        $hash{'unseen'} .= " $first-$last";
!     }
! 
!     @arts = split(' ', $hash{'unseen'});
! 
!     if (@arts >= 2) {
! 
!        $prepost = 0;
  
!        foreach (@arts) {
  
!           if (/[0-9]*-[0-9]*/) {
!              ($pre, $post) = split(/-/);
!           } else {
!              $pre = $_;
!              $post = $_; 
!           }
! 
!           if ($prepost + 1 == $pre) {
!              if (!$prepost) {
!                 $hash{'unseen'} = " $pre";
!                 $prepre = $pre;
!              }
!           } else {
!              if (!$prepost) {
!                 $hash{'unseen'} = " $pre";
!              } else {
!                 if ($prepre != $prepost) {
!                   $hash{'unseen'} .= "-$prepost $pre";
!                 } else {
!                   $hash{'unseen'} .= " $pre";
!                 }
!              }
!              $prepre = $pre;
!           }
!           $prepost = $post;
! 
!        }
!        $hash{'unseen'} .= "-$post" if ($prepre != $post);
! 
!     }
! 
!     open(SEQ, ">$dir/.mh_sequences");
! 
!     foreach (keys %hash) {
!        print SEQ "$_:$hash{$_}\n";
      }
+ 
+     close (SEQ);
  }
  
  1;
-------------- next part --------------
*** im-94/IM.in/Pop.pm.in.bak	Wed May  6 12:52:09 1998
--- im-94/IM.in/Pop.pm.in	Fri Jul 10 09:21:51 1998
***************
*** 143,150 ****
      return $field[1];
  }
  
! sub pop_retr ($$) {
!     my ($num, $dst) = @_;
      local ($_);
      my (@Message);
      im_notice("getting message $num.\n");
--- 143,150 ----
      return $field[1];
  }
  
! sub pop_retr ($$$) {
!     my ($total, $num, $dst) = @_;
      local ($_);
      my (@Message);
      im_notice("getting message $num.\n");
***************
*** 172,178 ****
      alarm(0) unless win95p();
  
      return -1 if (&store_message(\@Message, $dst) < 0);
!     &exec_getsbrfile($dst);
  
      return 0;
  }
--- 172,178 ----
      alarm(0) unless win95p();
  
      return -1 if (&store_message(\@Message, $dst) < 0);
!     &exec_getsbrfile($dst) if ($total == $num);
  
      return 0;
  }
***************
*** 496,502 ****
  #		# XXX everything will be kept
  	    }
  	}
! 	return -1 if (&pop_retr($i, $dst) < 0);
  	$got++;
  	if ($main::opt_keep == 0) {
  	    # delete current message
--- 496,502 ----
  #		# XXX everything will be kept
  	    }
  	}
! 	return -1 if (&pop_retr($msgs, $i, $dst) < 0);
  	$got++;
  	if ($main::opt_keep == 0) {
  	    # delete current message


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