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

Re: [emacs-w3m:00042] Re: Google search



At Sun, 04 Mar 2001 06:11:16 +0900 (JST),
Shun-ichi GOTO wrote:
> 
> 調べました。
> 原因はgoogleがはく出力の多くは、
> <a href=hoge/hage/kero/ny-a.html>
> というように、href="..." のようなダブルクォートをつけておらず、
> 一方w3mはダブルクォートを期待するregexpを使っているからでした。

素晴しい。うまく検索出来ました。でも、日本語で検索出来ないようです。
エンコードの部分がおかしいのかな。後でちょっと見てみます。

> * Yahooのsearch出力などに見られますが、複数の空行が多く出力される
>   ページがあるため、これを取り除くためのスイッチを設けました。
>   出力はすっきりするはずです。
>   変数は w3m-delete-duplicated-empty-lines で、デフォルトを t にしました。
>   デフォルトは tでよいでしょうか? > all

デフォルトを t にして defcustom でなく defvar で宣言しておくので
十分じゃないでしょうか。customize 変数はなくべく少ない方がいい。

> * 西田さんの yohoo-search, google-search を追加しました。
>   ただし、他のサーチエンジンも使えるように、
>   w3m-search-engine-alistという変数で定義できるようにし、
>   デフォルトのサーチエンジンを w3m-default-search-engine で
>   指定できるようにしました。
>   サーチのコマンドは M-x w3m-search です。
>   prefixをつけるとエンジンが選択できます。

おお、いいですね、これ。

ちょこちょこっと手を入れてみました。

* ffap の代わりに thingatpt を使うようにした。
  thingatpt は browse-url でも使われてるので、こちらの方がベター。

* w3m-command-arguments に関数を設定出来るようにした。
  フレームのサイズを変えてから reload すると、それに合わせて
  fill-column も変わる。w3m-fill-column は custom 変数から外した。
  (誰も変更しないと思う。たぶん w3m-command-arguments も)

* w3m-anchor-face は標準で赤でなく青にした。これが一般的だと思うが・・
* w3m-arrived-anchor-face から bold 指定を外した。

* w3m-search-engine-alist の書式単純化。

* w3m-search の中で "word" でなく "query" を使うようにした。
  検索式は一語とは限らないので。

-- Kei

Index: w3m.el
===================================================================
RCS file: /storage/cvsroot/emacs-w3m/w3m.el,v
retrieving revision 1.49
diff -u -r1.49 w3m.el
--- w3m.el	2001/03/03 20:52:38	1.49
+++ w3m.el	2001/03/03 22:45:38
@@ -51,7 +51,7 @@
 (if (featurep 'xemacs)
     (require 'poem))
 
-(require 'ffap)
+(require 'thingatpt)
 
 (unless (fboundp 'find-coding-system)
   (if (fboundp 'coding-system-p)
@@ -83,16 +83,13 @@
   :group 'w3m
   :type 'string)
 
-(defcustom w3m-fill-column (- (frame-width) 4)
-  "*Fill column of w3m."
-  :group 'w3m
-  :type 'integer)
-
 (defcustom w3m-command-arguments
-  '("-T" "text/html" "-t" tab-width "-halfdump" "-cols" w3m-fill-column)
+  (lambda ()
+    (list "-T" "text/html" "-t" (int-to-string tab-width) "-halfdump"
+	  "-cols" (int-to-string (- (frame-width) 4))))
   "*Arguments of w3m."
   :group 'w3m
-  :type '(repeat (restricted-sexp :match-alternatives (stringp boundp))))
+  :type 'sexp)
 
 (defcustom w3m-mailto-url-function nil
   "*Mailto handling Function."
@@ -203,17 +200,15 @@
   :type 'integer)
 
 (defface w3m-anchor-face
-  '((((class color) (background light)) (:foreground "red" :underline t))
+  '((((class color) (background light)) (:foreground "blue" :underline t))
     (((class color) (background dark)) (:foreground "cyan" :underline t))
     (t (:underline t)))
   "*Face to fontify anchors."
   :group 'w3m-face)
 
 (defface w3m-arrived-anchor-face
-  '((((class color) (background light))
-     (:foreground "navy" :underline t :bold t))
-    (((class color) (background dark))
-     (:foreground "LightSkyBlue" :underline t :bold nil))
+  '((((class color) (background light)) (:foreground "navy" :underline t))
+    (((class color) (background dark)) (:foreground "LightSkyBlue" :underline t))
     (t (:underline t)))
   "*Face to fontify anchors, if arrived."
   :group 'w3m-face)
@@ -327,15 +322,15 @@
   :type '(repeat (cons symbol coding-system)))
 
 (defcustom w3m-search-engine-alist
-  '(("yahoo" "http://search.yahoo.com/bin/search" "p=%s")
-    ("google" "http://www.google.com/search?q=" "q=%s"))
-  "*Search engine database.
-Each elemnt of alist is a list as:
-\( name-of-engine url query-format \)"
-  :group 'w3m
-  :type '(repeat (list (string :tag "Engine")
-		       (string :tag "URL")
-		       (string :tag "Query-format"))))
+  '(("yahoo" . "http://search.yahoo.com/bin/search?p=%s")
+    ("google" . "http://www.google.com/search?q=%s"))
+  "*An alist of search engines.
+Each elemnt looks like (ENGINE . ACTION)
+ENGINE is a string, the name of the search engine.
+ACTION is a string, the URL that performs a search.
+ACTION must contain a \"%s\", which is substituted by a query string."
+  :group 'w3m
+  :type '(repeat (cons (string :tag "Engine") (string :tag "Action"))))
 
 (defcustom w3m-default-search-engine "yahoo"
   "*Default search engine name.
@@ -604,7 +599,7 @@
     (mapatoms (lambda (x)
 		(setq candidates (cons (cons (symbol-name x) x) candidates)))
 	      w3m-backlog-hashtb)
-    (setq default (or default (ffap-url-at-point)))
+    (setq default (or default (thing-at-point 'url)))
     (setq prompt (or prompt
 		     (if default "URL: "
 		       (format "URL (default %s): " w3m-home-page))))
@@ -1115,13 +1110,10 @@
 	(default-process-coding-system
 	  (cons w3m-output-coding-system w3m-input-coding-system)))
     (w3m-message "Rendering...")
-    (apply 'call-process-region
-	   start end w3m-command t t nil
-	   (mapcar (lambda (x)
-		     (if (stringp x)
-			 x
-		       (prin1-to-string (eval x))))
-		   w3m-command-arguments))
+    (apply 'call-process-region start end w3m-command t t nil
+	   (if (functionp w3m-command-arguments)
+	       (funcall w3m-command-arguments)
+	     w3m-command-arguments))
     (goto-char (point-min))
     (w3m-message "Rendering... done")
     (let (title)
@@ -1542,8 +1534,8 @@
 "
   (kill-all-local-variables)
   (buffer-disable-undo)
-  (setq major-mode 'w3m-mode
-	mode-name "w3m")
+  (setq major-mode 'w3m-mode)
+  (setq mode-name "w3m")
   (use-local-map w3m-mode-map)
   (setq truncate-lines t)
   (run-hooks 'w3m-mode-hook))
@@ -1838,37 +1830,31 @@
 	     (string-to-list str)
 	     ""))
 
-(defun w3m-do-search (word engine)
-  (let ((alist (assoc engine w3m-search-engine-alist)))
-    (if (null alist) (error "Unknown search engine: %s" engine))
-    (w3m (concat (nth 1 alist) "?" 
-		 (format (nth 2 alist) (w3m-escape-query-string word))))))
+(defun w3m-do-search (engine query)
+  (let ((pair (assoc engine w3m-search-engine-alist)))
+    (if (null pair)
+	(error "Unknown search engine: %s" engine)
+      (w3m (format (cdr pair) (w3m-escape-query-string query))))))
 
 (defun w3m-search (arg)
-  "Search word using search-engine.  
+  "Search query using search-engine.  
 With prefix ARG, you can choose search engine deinfed in
 `w3m-search-engine-alist'. Otherwise use `w3m-default-search-engine'."
   (interactive "P")
-  (let (engine word)
+  (let (engine query)
     ;; decide search engine
     (if (null arg)
 	(setq engine w3m-default-search-engine)
       ;; with prefix, select
-      (setq engine (completing-read 
+      (setq engine (completing-read
 		    (format "Which Engine? (%s): " w3m-default-search-engine)
 		    w3m-search-engine-alist nil t))
       (if (string= engine "")
-	  (setq engine w3m-default-search-engine))
-      (if (and (string= engine w3m-default-search-engine)
-	       (y-or-n-p "Set %s as default search engine? "))
-	  (setq w3m-default-search-engine engine)))
-    ;; input search word
-    (let ((prompt "%s search word: "))
-      (while (or (null word) (string-match "^[ \t]$" word))
-	(setq word (read-string (format "%s search word: " engine)))
-	(setq prompt "%s search word again: ")))
-    ;; search it
-    (w3m-do-search word engine)))
+	  (setq engine w3m-default-search-engine)))
+    ;; input search query
+    (setq query (read-string (format "%s search: " engine)))
+    (if (not (string= query ""))
+	(w3m-do-search engine query))))
 
 (provide 'w3m)
 ;;; w3m.el ends here.