解决Firefox升级到36+后,在Emacs里无法打开链接的问题

问题:Emacs打不开网页

前两天更新了一下ubuntu,firefox也随着更新到了36,昨天在家用电脑时发 现在emacs里打开的链接都成了空白页(之前是好的),当时也没有在意,想 想可能是哪配置起了冲突,也没去管它。

今天到公司,发现公司电脑上用emacs也不能正常打开链接了,一点链接就开 一个新窗口显示一个空白页面。

原因:Firefox升级到36后去掉了 -remote 参数

火狐是我设置的默认浏览器,emacs也是用的默认浏览器,想一想,家里的 电脑和公司的电脑也就前两天更新了一下,家里的更新了emacs的配置,但公 司的没有更新。所以,问题应该不在emacs的配置上。

在网上搜索了一下,中文无果!于是用英文搜索了下: emacs no opens page in browser 有不少结果,基本确定是因为firefox升级到36后去掉了 -remote 参数造成的这个问题。

解决办法:重新定义 browse-url-firefox 函数

问题找到了,就好办了,Emacs浏览网页的相关设置及功能实现一般都在 browse-url.el 这个文件里, browse-url-firefox 主要用来拼接调用 firefox的命令,当然我们没必要去修改这个文件,只要在Emacs的配置文件里 重新定义一下这个函数就OK了。

(defun browse-url-firefox (url &optional new-window)
  "Ask the Firefox WWW browser to load URL.
  Default to the URL around or before point.  The strings in
  variable `browse-url-firefox-arguments' are also passed to
  Firefox.

  When called interactively, if variable
  `browse-url-new-window-flag' is non-nil, load the document in a
  new Firefox window, otherwise use a random existing one.  A
  non-nil interactive prefix argument reverses the effect of
  `browse-url-new-window-flag'.

  If `browse-url-firefox-new-window-is-tab' is non-nil, then
  whenever a document would otherwise be loaded in a new window, it
  is loaded in a new tab in an existing window instead.

  When called non-interactively, optional second argument
  NEW-WINDOW is used instead of `browse-url-new-window-flag'."
  (interactive (browse-url-interactive-arg "URL: "))
  (setq url (browse-url-encode-url url))
  (let* ((process-environment (browse-url-process-environment))
         (window-args (if (browse-url-maybe-new-window new-window)
                          (if browse-url-firefox-new-window-is-tab
                              '("-new-tab")
                            '("-new-window"))))
         (ff-args (append browse-url-firefox-arguments window-args (list url)))
         (process-name (concat "firefox " url))
         (process (apply 'start-process process-name nil
                         browse-url-firefox-program ff-args) )) ))