namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

namazu.el-19980928.02



Mon, 28 Sep 1998 14:02:51 +0900 頃の
   Mail-Count: 01238
      Subject: [namazu:01238] Re: request to namazu.el   
についてのお話にて やまだは言いました… 
(あ == やまだ あきら)

In article 01238, <19980928140122-24492Y.akira@xxxxxxxxxxxxxx>
あ> namazu.el-19980928.01 としてリリースしてみました. 

以前, ばばさんがおっしゃっておられた mew-wais.el ににせて
mew-namazu.el を作れないものかといじっていて
bug を見つけたので namazu.el-19980928.02 をリリースしました. 

  <URL:ftp://arika.org/pub/Tools/elisp/namazu/namazu.el-19980928.02>

んで mew-namazu.el の方ですが
こそくにも imls に手を入れるとかして
それらしい(けど安易でしかもいんちきくさい)ものができました. 

imls に添付の diff のような変更を加えて
Mew の summary モードで mew-summary-namazu-virual すると
よさそうです. どんなもんでしょうね? (^_^;;

# elisp だけでは, 根性のないわたしには実現でけませんでした. 
--

 やまだ あきら (akira@xxxxxxxxx or akira@xxxxxxxxxx)
--- /usr/bin/imls	Mon Sep  7 11:18:00 1998
+++ imls	Mon Sep 28 22:20:25 1998
@@ -352,7 +352,9 @@
     my $num = 1;
     my $folder;
     my $eval_string;
+    my @namazu_index = ();
 
+    unless ( $opt_src[0] =~ /^\+:/ ) { #!!!
     $eval_string = parse_expression($opt_grep, $opt_casefold);
 
     binmode(STDOUT);
@@ -362,6 +364,10 @@
 	my @ranges = split(',', $ranges);
 	my @messages = ();
 
+	if ( $folder =~ /^\+:(.*)$/ ) {
+	    next FOLDER;
+	}
+
 	if ( $folder =~ /^\-/ ) {
 	    im_warn("Newsspool $folder search not supported (ignored)\n");
 	    next FOLDER;
@@ -382,6 +388,40 @@
 	    }
 	}
     }
+
+    } else { #!!!
+	foreach (@opt_src) {
+	    if ( $_ =~ /^\+:(.*)$/ ) {
+		push(@namazu_index, $1);
+	    }
+	}
+	if ( scalar(@namazu_index) > 0 ) {
+	    my $pid, *r, *w;
+	    my $l; 
+
+	    require IPC::Open2;
+	    $pid = IPC::Open2::open2(\*r, \*w, 
+				     'namazu', '-s', '-a', 
+				     $opt_grep, @namazu_index);
+	    if ( $pid > 0 ) {
+		while ($l = <r>) {
+		    last if $l =~ /^[0-9]+\. /;
+		}
+		while ($l = <r>) {
+		    next if $l =~ /^\s*$|^\d+\. |^Current List: /;
+		    chomp($l);
+		    $l =~ s/^(.*\/\d+)\s+size\s+\([,\d]+\s+bytes\)$/$1/o;
+		    if ( -f $l ) {
+			my %Head = &get_header($l);
+			$Head{'pnum'} = $Head{'number:'};
+			$Head{'number:'} = $num;
+			&disp_msg(\%Head, $opt_grep);
+			$num++;
+		    }
+		}
+	    }
+	}
+    } #!!!
 }
 
 
(autoload 'namazu-split-dir "namazu" nil t)
(autoload 'namazu-expand-dir-alias "namazu" nil)

(defun mew-summary-namazu-virtual ()
  "summary モードにおける \"V\" と同様の仮想フォルダを
検索に Namazu を使って作成します。"
  (interactive)
  (mew-summary-only
   (let ((folder (concat 
		  "++" 
		  (mew-input-string "Virtual folder name %s(%s): " 
				    "" ;; dummy
				    "virtual")))
	 (folders 
	  (let ((dirs1
		 (namazu-split-dir 
		  (namazu-expand-dir-alias
		   (read-from-minibuffer "Namazu index directory: " 
					 nil namazu-minibuffer-map))))
		(dirs2 (list)))
	    (while dirs1
	      (setq dirs2 (append dirs2 (list (concat "+:" (car dirs1)))))
	      (setq dirs1 (cdr dirs1)))
	    dirs2))
	 (grep (mew-input-pick-pattern)))
     (mew-folder-setup folder)
     (mew-summary-scan-body mew-prog-imls
			    'mew-virtual-mode
			    folder
			    mew-cs-virtual
			    nil
			    folders
			    grep))))