[Mew-dist 07503] Re: namazu.el for mew

Takeshi ITOH titou at example.com
1999年 2月 18日 (木) 09:28:56 JST


伊藤@Bitsです。

最初にmewへ提案です。mew-grep というコマンドがあったら嬉しいです。

'??'
   grep を実行しそのコマンドの出力結果をもとにして該当メッセージに'
   *'マークを付けます。'??'を押すと Run grep(line this): grep -l -e 
   とミニバッファに表示されます。実行したいコマンドをそこに入力して下
   さい。

というコマンドがあり そこで grep でなく 例えば echo "1^Q^J2^Q^J3" すると 1
2 3 にマークが付くというのはいかがでしょうか。 namazu 以外にもいろ
いろ役にたつと思います。


>>>>> Hideyuki SHIRAI (白井秀行) <shirai at example.com> さんは

> あと、folder の指定と、出力の sort もできると最高ですね。

namazu.el の関係者から '?' mew-summary-search-mark の機能として
namazu が使えるようにしたら、という suggestion をいただいて添付の
ような改造して試しています。とっても効率の悪いつくりなのでおはずか
しいし私自身もあまりテストしてないのですが。

imnamazu:( imgrep の namazu使用版 )

  (setq mew-prog-imgrep "imnamazu")
  としておいて ? namazu=何ちゃら とするとそのフォルダで '*'マークが
  付きます。from=やto=などのフィールドを指定した検索はできません。

imls:( 'V' mew-summary-virtual の namazu 使用版 )

   namazu を使って virtual フォルダをつくります。
   'V'で聞かれるパラメタは
    Folder name (+inbox) : には DBのあるディレクトリを
    pick pattern: には 検索文字列を指定('namazu='は無し)して下さい。

> Range を聞かれるだけなら良いのですが、goto-folder した瞬間に
> summary に存在していない Message だとダメですね。1. と 2. でこん
> なのはどうですか。

いただきました。^@^

> (mew-summary-goto-folder nil (concat "+" folder) t)

> で自動的に update してくれるのですが、如何でしょう。こういうとき
> は、range:update 決めうちで良いじゃないかなぁと思います。

こちらは試してないのですが、この方が嬉しいと思います。

-- 
(株)ビッツ マイコン開発部ファーム課
伊藤 剛 titou at example.com



-------------- next part --------------
--- /usr/local/bin/imgrep	Wed Jan  6 10:42:32 1999
+++ imnamazu	Fri Feb  5 10:48:35 1999
@@ -1,7 +1,7 @@
 #! /usr/bin/perl
 ################################################################
 ###
-###		  imgrep :: Internet Message g/RE/p
+###		  imnamazu :: imgrep base namazu wrapper
 ###
 ### Author:  Internet Message Group <img at example.com>
 ### Created: Apr 23, 1997
@@ -114,8 +114,9 @@
 # Compile expression
 #
 
-$eval_string = parse_expression($opt_expression, $opt_casefold);
-
+#$eval_string = parse_expression($opt_expression, $opt_casefold);
+($eval_string = $opt_expression) =~ s/^[^=]+=//;
+#im_warn( "$eval_string\n" );
 #
 # Iterate each folder
 #
@@ -127,6 +128,8 @@
 	my $folder_dir;
 	my @ranges = split(',', $ranges);
 	my @messages = ();
+	my @found = ();
+	my @sorted=();
 
 	if ( $folder =~ /^\-/ ) {
 	    im_warn("Newsspool $folder search not supported (ignored)\n");
@@ -136,17 +139,23 @@
 	@ranges = ( $ranges ? @ranges : @default_ranges );
 
 	$folder_dir = expand_path($folder);
+#	im_warn( "$folder_dir\n" );
 
-	@messages = grep_folder($folder_dir, $eval_string, @ranges);
-	if ( @messages ) {
-	    $matched += @messages;
-	    foreach ( @messages ) {
-		print "$folder:" if ($opt_format eq 'folder');
-		print "$folder_dir/" if ($opt_format eq 'path');
-		print "$_\n";
-		# flush('STDOUT');
+	open( NMZ, "namazu -n 9999 -S \"$eval_string\" ~/Mail |") 
+	    || im_err( "namazu error\n");
+	@messages = <NMZ>;
+	close( NMZ );
+
+	foreach ( @messages ) {
+	    chop;
+#	    im_warn( "$_\n" );
+	    if ( -f $_ && /^$folder_dir\/([0-9]+)/ ) {
+		push( @found, $1 );
+		$matched++;
 	    }
 	}
+	@sorted = sort { $a <=> $b } @found;
+	$"="\n"; print "@sorted\n";
     }
 
 $matched
-------------- next part --------------
--- /usr/local/bin/imls	Wed Jan  6 10:42:33 1999
+++ imls	Thu Feb 18 06:29:21 1999
@@ -102,7 +102,7 @@
 } elsif ($opt_grep) {
     require IM::Folder && import IM::Folder;
     require IM::Grep && import IM::Grep;
-    &vscan();
+    &vscan_namazu();
     exit $EXIT_SUCCESS;
 } else {
     if (scalar(@opt_src) != 1) {
@@ -344,6 +344,42 @@
     }
 }
 
+
+###
+### vscan_namazu
+###
+
+sub vscan_namazu () {
+    my $num = 1;
+    my $folder;
+    my $eval_string;
+
+    $eval_string = $opt_grep;
+    binmode(STDOUT);
+    foreach (@opt_src) {
+	my ($folder, $ranges) = (/([^:]+)(?::)?(.*)?/);
+	my $folder_dir;
+	my @ranges = split(',', $ranges);
+	my @messages = ();
+	$folder = "~/Mail/" if( $folder eq "+inbox");
+
+	open( NMZ, "namazu -n 100 -S \"$eval_string\" $folder|") 
+	    || im_err( "namazu error\n");
+	@messages = sort {$a <=> $b} <NMZ>;
+	close( NMZ );
+
+	foreach ( @messages ) {
+	    chop;
+	    if ( -f $_ ) {
+		my %Head = &get_header($_);
+		$Head{'pnum'} = $Head{'number:'};
+		$Head{'number:'} = $num;
+		disp_msg(\%Head, $opt_grep);
+  		$num++;
+	    }
+	}
+    }
+}
 
 ###
 ### vscan


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