読者です 読者をやめる 読者になる 読者になる

Cocoa(Carbon) EmacsからFirefoxを呼ぶ

emacs

MacのCocoa(Carbon) Emacsでカーソル下のURLをFirefoxで開くためには

(setq browse-url-firefox-program "/Applications/Firefox.app/Contents/MacOS/firefox-bin")

として

M-x browse-url-firefox

で良さそうなものですが、すでにFirefoxが立ち上がっている状態で実行すると

"すでに別の Firefox を開いています。同時に複数の Firefox を開くことはできません。"

とエラーを吐きます。

また

(setq browse-url-firefox-program "open -a Firefox")

としてもうまくいきません。

解決策として以下の関数を定義します。これはブラウザが立ち上がってなければ立ち上げ、すでに立ち上がっていれば別タブ(ウインドウ)で、カーソル下のURLを開きます。

(defun call-browser-from-eshell ()
  (interactive)
  (let ((regexp "s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+"))
    (if (string-match regexp (thing-at-point 'symbol))
	(eshell-command (concat "open -a Firefox " (browse-url-url-at-point)))
      (message "No url at point."))))

定義の中の "open -a Firefox " のところを "open -a Safari " あるいは "open -a Google\\ Chrome " とすればSafariGoogle Chromeでも使えます。

ついでに

(global-set-key [double-mouse-1] 'call-browser-from-eshell)

と設定しておけばURLのダブルクリックでリンクが開けます。

問題点

URLは空白か改行で区切らなければいけない。例えば

(http://hogehoge)

に対して実行すると

http://hogehoge)

を拾ってしまう。