[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 メーリングリストの案内