[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Quicksearch support in Emacs-w3m
Hi,
This article contains a new patch which realizes the Quicksearch
feature only for the interactive calls and the bookmarks. It
also supports a group url!
>>>>> In [emacs-w3m : No.04265]
>>>>> Romain FRANCOISE <romain@orebokech.com> wrote:
> Hm. I'm not sure what you mean by "backend function",
Maybe he said that the function is called from shimbun modules
or any other application programs outside of emacs-w3m.
TSUCHIYA-san, didn't you mean so?
> but I don't think
> it would be a good idea to restrict quicksearches to interactive calls.
[...]
It probably solved. Now, how is it?
> When you're used to it, it's hard to live without. :)
Yes, indeed. :)
The following patch should be applied to the CVS HEAD:
--- emacs-w3m/w3m-search.el~ 2002-06-18 07:30:18 +0000
+++ emacs-w3m/w3m-search.el 2002-11-12 07:07:20 +0000
@@ -35,8 +35,8 @@
;;; How to install:
-;; Please put this file to appropriate directory, and if you want
-;; byte-compile it. And add following lisp expressions to your
+;; Put this file in the appropriate directory, and if you want,
+;; byte-compile it. Then add the following lisp expression to your
;; ~/.emacs.
;;
;; (autoload 'w3m-search "w3m-search" "Search QUERY using SEARCH-ENGINE." t)
@@ -55,6 +55,7 @@
(, (if (equal "Japanese" w3m-language)
'("google" "http://www.google.com/search?q=%s&hl=ja" shift_jis)
'("google" "http://www.google.com/search?q=%s" nil)))
+ ("google groups" "http://groups.google.com/groups?q=%s" nil)
("google-ja" "http://www.google.com/search?q=%s&hl=ja&lr=lang_ja" shift_jis)
("goo-ja" "http://www.goo.ne.jp/default.asp?MT=%s" euc-japan)
("excite-ja" "http://www.excite.co.jp/search.gw?target=combined&look=excite_jp&lang=jp&tsug=-1&csug=-1&search=%s" shift_jis)
@@ -66,7 +67,7 @@
("freebsd-users-jp" "http://home.jp.FreeBSD.org/cgi-bin/namazu.cgi?key=\"%s\"&whence=0&max=50&format=long&sort=score&dbname=FreeBSD-users-jp" euc-japan)
("iij-archie" "http://www.iij.ad.jp/cgi-bin/archieplexform?query=%s&type=Case+Insensitive+Substring+Match&order=host&server=archie1.iij.ad.jp&hits=95&nice=Nice")))
"*An alist of search engines.
-Each elemnt looks like (ENGINE ACTION CODING)
+Each element looks like (ENGINE ACTION CODING)
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.
@@ -86,6 +87,21 @@
:group 'w3m
:type 'string)
+(defcustom w3m-search-quick-search-engine-alist
+ '(("gg" . "google")
+ ("ggg" . "google groups")
+ ("ya" . "yahoo")
+ ("al" . "altavista")
+ ("bts" . "debian-bts")
+ ("dpkg" . "debian-pkg"))
+ "*An alist of short names for defined search engine names.
+Each element follows the scheme (NAME . ENGINE)
+NAME if the short name you want to use for this engine.
+ENGINE is the name of the engine as defined in `w3m-search-engine-alist'.
+Be careful: the names you use here must match exactly the names of the
+engines defined in `w3m-search-engine-alist'."
+ :group 'w3m)
+
(defcustom w3m-search-word-at-point t
"*Non-nil means that the word at point is used as initial string."
:group 'w3m
@@ -101,8 +117,8 @@
;;;###autoload
(defun w3m-search (search-engine query)
"Search QUERY using SEARCH-ENGINE.
-When called interactively with prefix argument, you can choose search
-engine deinfed in `w3m-search-engine-alist'. Otherwise use
+When called interactively with a prefix argument, you can choose one of
+the search engines defined in `w3m-search-engine-alist'. Otherwise use
`w3m-search-default-engine'."
(interactive
(let ((engine
@@ -135,6 +151,22 @@
(w3m-search-escape-query-string query (caddr info))))
(error "Unknown search engine: %s" search-engine)))))
+;;;###autoload
+(defun w3m-search-quick-search-handler (url)
+ "Check if the url is a quicksearch url.
+If URL is a quicksearch url, replace it with the real url needed to access
+the search engine. If not, leave it alone."
+ (let ((ret url))
+ (dolist (quick-search-engine w3m-search-quick-search-engine-alist ret)
+ (if (string-match (concat "\\`" (car quick-search-engine) ":") url)
+ (let ((query (substring url (match-end 0))))
+ (unless (string= query "")
+ (let ((info (assoc (cdr quick-search-engine)
+ w3m-search-engine-alist)))
+ (if info
+ (setq ret (format (cadr info)
+ (w3m-search-escape-query-string
+ query (caddr info))))))))))))
(provide 'w3m-search)
--- emacs-w3m/w3m.el~ 2002-11-06 23:04:45 +0000
+++ emacs-w3m/w3m.el 2002-11-12 07:07:20 +0000
@@ -103,6 +103,7 @@
"Add link of current page to bookmark." t)
(autoload 'w3m-search "w3m-search"
"Search QUERY using SEARCH-ENGINE." t)
+ (autoload 'w3m-search-quick-search-handler "w3m-search")
(autoload 'w3m-weather "w3m-weather"
"Display weather report." t)
(autoload 'w3m-about-weather "w3m-weather")
@@ -4325,9 +4326,11 @@
(lexical-let (pos)
(when new-session
(setq pos (point-marker))
- (if w3m-view-this-url-new-session-in-background
- (set-buffer (w3m-copy-buffer nil nil nil 'empty))
- (switch-to-buffer (w3m-copy-buffer nil nil t 'empty)))
+ (let ((referer w3m-current-url))
+ (if w3m-view-this-url-new-session-in-background
+ (set-buffer (w3m-copy-buffer nil nil nil 'empty))
+ (switch-to-buffer (w3m-copy-buffer nil nil t 'empty)))
+ (setq w3m-current-url referer))
;; When new URL has `name' portion, we have to goto the base url
;; because generated buffer has no content at this moment.
(when (and (string-match w3m-url-components-regexp url)
@@ -5799,7 +5802,8 @@
'w3m-current-title)))
;;;###autoload
-(defun w3m-goto-url (url &optional reload charset post-data referer handler)
+(defun w3m-goto-url
+ (url &optional reload charset post-data referer handler qsearch)
"Retrieve contents of URL.
If the second argument RELOAD is non-nil, reload a content of URL.
Except that if it is 'redisplay, re-display the page without reloading.
@@ -5811,7 +5815,11 @@
car of a cell is used as the content-type and the cdr of a cell is
used as the body.
If the fifth argument REFERER is specified, it is used for a Referer:
-field for this request."
+field for this request.
+You can also use \"quicksearch\" url schemes such as \"gg:emacs\" which
+would search for the term \"emacs\" with the Google search engine. See
+the `w3m-search' function and the variable
+`w3m-search-quick-search-engine-alist'."
(interactive
(list
(w3m-input-url nil
@@ -5824,8 +5832,15 @@
current-prefix-arg
(w3m-static-if (fboundp 'universal-coding-system-argument)
coding-system-for-read)))
+ (setq x1 (nconc x1 (list last-command)))
(set-text-properties 0 (length url) nil url)
(setq url (w3m-uri-replace url))
+ (when (or qsearch
+ (interactive-p)
+ (equal referer "about://bookmark/"))
+ ;; quicksearch
+ (setq qsearch t
+ url (w3m-search-quick-search-handler url)))
(cond
;; process mailto: protocol
((string-match "\\`mailto:\\(.*\\)" url)
@@ -5854,11 +5869,12 @@
(split-string (substring url (match-end 0)) "&"))))
(w3m-process-do
(type (prog1
- (w3m-goto-url (car urls))
+ (w3m-goto-url (car urls) nil nil nil nil nil qsearch)
(dolist (url (cdr urls))
(save-excursion
(set-buffer (w3m-copy-buffer nil nil nil 'empty))
- (save-window-excursion (w3m-goto-url url))))))
+ (save-window-excursion
+ (w3m-goto-url url nil nil nil nil nil qsearch))))))
type))
;; Retrieve the page.
(lexical-let ((orig url)
@@ -6033,8 +6049,10 @@
(when (and (string-match w3m-url-components-regexp url)
(match-beginning 8))
(w3m-goto-url (substring url 0 (match-beginning 8))
- reload charset post-data referer))
- (w3m-goto-url url reload charset post-data referer))
+ reload charset post-data referer
+ nil (interactive-p)))
+ (w3m-goto-url url reload charset post-data referer
+ nil (interactive-p)))
(w3m url t)))
(defun w3m-move-point-for-localcgi (url)