Code search in Emacs
After shutdown of Google Code Search, I turned to plain google search instead.
For example, if I want to search Emacs Lisp code. I google "keyword filetype:el".
"el" is the file extension of Emacs Lisp file.
Since I use Emacs for everything, it's natural to search code in Emacs.
So here is my solution.
Step 1, install w3m and its Emacs wrapper.
Step 2, insert below code into ~/.emacs:
(defun w3m-get-url-from-search-engine-alist (k l)
(let (rlt)
(if (listp l)
(if (string= k (caar l))
(setq rlt (nth 1 (car l)))
(setq rlt (w3m-get-url-from-search-engine-alist k (cdr l)))))
rlt))
(defun w3m-set-url-from-search-engine-alist (k l url)
(if (listp l)
(if (string= k (caar l))
(setcdr (car l) (list url))
(w3m-set-url-from-search-engine-alist k (cdr l) url))))
;; C-u S g RET <search term> RET in w3m
(setq w3m-search-engine-alist
'(("g" "http://www.google.com.au/search?q=%s" utf-8)
;; stackoverflow search
("q" "http://www.google.com.au/search?q=%s+site:stackoverflow.com" utf-8)
;; elisp code search
("s" "http://www.google.com.au/search?q=%s+filetype:el" utf-8)
;; wikipedia
("w" "http://en.wikipedia.org/wiki/Special:Search?search=%s" utf-8)
;; online dictionary
("d" "http://dictionary.reference.com/search?q=%s" utf-8)
;; javascript search on mozilla.org
("j" "http://www.google.com.au/search?q=%s+site:developer.mozilla.org" utf-8)))
(defun w3m-google-by-filetype ()
(interactive)
(unless (featurep 'w3m)
(require 'w3m))
(let ((thing (if (region-active-p)
(buffer-substring-no-properties (region-beginning) (region-end))
(thing-at-point 'symbol)))
(old-url (w3m-get-url-from-search-engine-alist "s" w3m-search-engine-alist))
new-url)
(when buffer-file-name
(setq new-url (replace-regexp-in-string
"filetype:.*"
(concat "filetype:" (file-name-extension buffer-file-name))
old-url))
(w3m-set-url-from-search-engine-alist "s" w3m-search-engine-alist new-url))
;; change the url to search current file type
(w3m-search "s" thing)
;; restore the default url
(w3m-set-url-from-search-engine-alist "s" w3m-search-engine-alist old-url)))
Step 3, `M-x w3m-google-by-filetype`. Either the selected region or the symbol under cursor will be searched.