[mew-dist 26611] Re: 検索

Shuichi KITAGUCHI ki at example.com
2005年 9月 19日 (月) 23:50:45 JST


北口です。

今頃ですが...

> Spotlight、Google Desktop、Namazu が使えるようになっています。
> 
> 			k? k/ km kM
> Spotlight		○ ○ ○ ○
> Google Desktop	× ○ × ○
> Namazu		○ × ○ ×
> 
> 注:Google Desktop の "kM" は、gdsgrep.rb を登録するだけです。CPU が使わ
>     れないときにインデックスが作成されます。

の、Google Desktop Searchの方が、

・COMコンポーネントの登録を行なうだけになっていて、インデックス作成処理を
  kickしていない。
・検索ができない。

のようだったので、以下の修正を行なったパッチを添付します。

・インデックス作成関数追加(mew-google-register()をmew-google-index-all()
  に改名)。
  終了はとてもじゃないけど待てないので、非同期に実行させています。
  (本当は終了を確認すべきでしょうが、とりあえずそこまではなし)

・1フォルダのみのインデックス作成関数(mew-google-index-folder())を追加。

・gdsgrep.rbの出力結果に "^M" が付いているので、これを正規表現で弾いて
  しまって検索ができていなかったのを修正(mew-search-virtual-with-google())。
  coding-system周りを直せば良いのかもしれませんが、以前調べた時によく
  わからなかったのでworkaroundで逃げてます。

・COMコンポーネントの登録&解除関数を追加。
  とりあえず、キー割り当てはしてません。


--
Shuichi Kitaguchi // kit at example.com / ki at example.com
-------------- next part --------------
Index: mew-search.el
===================================================================
RCS file: /cvsmew/mew/mew-search.el,v
retrieving revision 1.13
diff -u -r1.13 mew-search.el
--- mew-search.el	6 Sep 2005 09:08:36 -0000	1.13
+++ mew-search.el	19 Sep 2005 14:35:23 -0000
@@ -20,15 +20,18 @@
   `((spotlight "Spotlight" ,mew-prog-spotlight
      mew-search-with-spotlight mew-search-virtual-with-spotlight
      mew-spotlight-index-folder mew-spotlight-index-all
-     mew-pick-canonicalize-pattern-spotlight)
+     mew-pick-canonicalize-pattern-spotlight
+     nil nil)
     (google "Google" ,mew-prog-google
      nil mew-search-virtual-with-google
-     nil mew-google-register
-     mew-pick-canonicalize-pattern-google)
+     mew-google-index-folder mew-google-index-all
+     mew-pick-canonicalize-pattern-google
+     mew-google-register mew-google-unregister)
     (namazu "Namazu" ,mew-prog-namazu
      mew-search-with-namazu nil
      mew-nmz-index-folder nil
-     mew-pick-canonicalize-pattern-namazu)))
+     mew-pick-canonicalize-pattern-namazu
+     nil nil)))
 
 (defun mew-search-get-list (func)
   (let ((sw mew-search-switch)
@@ -66,6 +69,12 @@
 (defun mew-search-get-func-canonicalize-pattern (ent)
   (nth 7 ent))
 
+(defun mew-search-get-func-register (ent)
+  (nth 8 ent))
+
+(defun mew-search-get-func-unregister (ent)
+  (nth 9 ent))
+
 (defvar mew-search-method (car (mew-search-get-list 'mew-search-get-key)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -165,6 +174,26 @@
 	  (funcall func)
 	(message "This command cannot be used")))))
 
+(defun mew-summary-search-register ()
+  (interactive)
+  (if (not mew-search-method)
+      (message "No search method")
+    (let* ((ent (mew-search-get-ent mew-search-method))
+	   (func (mew-search-get-func-register ent)))
+       (if (not (fboundp func))
+	   (message "This command cannot be used")
+	 (funcall func)))))
+
+(defun mew-summary-search-unregister ()
+  (interactive)
+  (if (not mew-search-method)
+      (message "No search method")
+    (let* ((ent (mew-search-get-ent mew-search-method))
+	   (func (mew-search-get-func-unregister ent)))
+       (if (not (fboundp func))
+	   (message "This command cannot be used")
+	 (funcall func)))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;
 ;;; Spotlight
@@ -269,7 +298,7 @@
 (defun mew-search-virtual-with-google (pattern) 
   (let* ((path (mew-expand-folder mew-folder-local))
 	 (mail-regex (regexp-quote (file-name-as-directory path)))
-	 (regex (concat "^" mail-regex "\\(.*\\)/" "\\([0-9]+\\)$"))
+	 (regex (concat "^" mail-regex "\\(.*\\)/" "\\([0-9]+\\)"))
 	 (file (mew-make-temp-name))
 	 (prev "") (rttl 0)
 	 crnt)
@@ -289,14 +318,35 @@
      (write-region (point-min) (point-max) file nil 'no-msg))
     (list file rttl)))
 
-(defun mew-google-register ()
-  "Register Google component"
+(defun mew-google-index-folder (folder)
+  "Make Google index for this folder."
+  (interactive)
+  (let* ((ent (mew-search-get-ent mew-search-method))
+	 (prog (mew-search-get-prog ent)))
+    (start-process prog nil prog "-m" "-i" (mew-expand-folder folder))
+    (message "Google indexing for %s in background..." folder)))
+
+(defun mew-google-index-all ()
+  "Make Google index for all folders."
   (interactive)
   (let* ((ent (mew-search-get-ent mew-search-method))
 	 (prog (mew-search-get-prog ent)))
-    (message "Registering Google component...")
-    (call-process prog nil nil nil "-R")
-    (message "Registering Google component...done")))
+    (start-process prog nil prog "-m" "-r" "-i" (mew-expand-folder "+"))
+    (message "Google indexing for all folders in background...")))
+
+(defun mew-google-register ()
+  "Register Google component"
+  (interactive)
+  (message "Registering Google component...")
+  (call-process mew-prog-google nil nil nil "-R")
+  (message "Registering Google component...done"))
+
+(defun mew-google-unregister ()
+  "Unregister Google component"
+  (interactive)
+  (message "Unregistering Google component...")
+  (call-process mew-prog-google nil nil nil "-U")
+  (message "Unregistering Google component...done"))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;


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