browse-url-firefox

Emacsの中のURLぽい文字列を外部のFireFoxで開くにはどうしたらよいだろうか。
ということで、以下のEmacs-Lispを書いてM-x browse-urlで開くようにしてみた。

(setq browse-url-browser-function '(("." . browse-url-firefox)))
(setq browse-url-firefox-program "firefox-linux")
(defun browse-url-firefox (url &optional new-window)
  (interactive (browse-url-interactive-arg "URL: "))
  (if (string-match "^http://t?tp://" url)
      (setq url (concat "http://" (substring url (match-end 0)))))
  (start-process (concat browse-url-firefox-program url) nil 
		 browse-url-firefox-program "-remote" 
		 (concat "openurl(" url ", new-tab)")))

変数browse-url-firefox-programには、FireFoxのプログラム名を指定する。僕はLinuxのバイナリエミュレーション版を使ってるんで、firefox-linuxになっている。
FireFoxでURLを開くときに、タブで開くようにしている。これを変更したい場合はstart-processのあたりを適当に変更すること。
ttp://example.comとかtp://example.comのようなURLぽい文字列もHTTPとして扱うようになっている。プロンプトでは、「URL: http://ttp://example.com」のように聞いてくるけど、そのままエンターでOK。しかし、ttpが重なるのはダサいな。これを修正するには以下で呼出しているthing-at-pointあたりをいじるんだろうけど、面倒なのでもういいや。

browse-url.el
...
 496 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 497 ;; URL input
 498 
 499 (defun browse-url-url-at-point ()
 500   (let ((url (thing-at-point 'url)))
 501     (set-text-properties 0 (length url) nil url)
 502     url))
...

(5/26追記)
「http:ttp://example.com」みたいにttp:が重ならなくなる版をid:ha-tan:20050526に書いた。