Mercurial > emacs
changeset 41282:c5d2c3683efb
Support Mozilla and Galeon.
By default, find the installed browser whichever it is.
(browse-url-mozilla): New function.
(browse-url-mozilla-sentinel): New function.
(browse-url-galeon, browse-url-galeon-sentinel): New functions.
(browse-url-default-browser): New function.
(browse-url-process-environment): Use browse-url-browser-display.
(browse-url-browser-display): Renamed from browse-url-netscape-display.
(browse-url-mozilla-startup-arguments, browse-url-galeon-program)
(browse-url-galeon-arguments, browse-url-galeon-startup-arguments)
(browse-url-mozilla-program, browse-url-mozilla-arguments): New vars.
(browse-url-browser-function): New default, new options.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 19 Nov 2001 19:12:31 +0000 |
parents | a72489ba1e35 |
children | 1c09d8ddd155 |
files | lisp/net/browse-url.el |
diffstat | 1 files changed, 167 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/net/browse-url.el Mon Nov 19 19:12:19 2001 +0000 +++ b/lisp/net/browse-url.el Mon Nov 19 19:12:31 2001 +0000 @@ -4,7 +4,7 @@ ;; Free Software Foundation, Inc. ;; Author: Denis Howe <dbh@doc.ic.ac.uk> -;; Maintainer: Dave Love <fx@gnu.org> +;; Maintainer: FSF ;; Created: 03 Apr 1995 ;; Keywords: hypertext, hypermedia, mouse @@ -37,6 +37,8 @@ ;; some of them probably now obsolete: ;; Function Browser Earliest version +;; browse-url-mozilla Mozilla Don't know +;; browse-url-galeon Galeon Don't know ;; browse-url-netscape Netscape 1.1b1 ;; browse-url-mosaic XMosaic/mMosaic <= 2.4 ;; browse-url-cci XMosaic 2.5 @@ -66,14 +68,6 @@ ;; control but which window DO you want to control and how do you ;; discover its id? -;; If using XMosaic before version 2.5, check the definition of -;; browse-url-usr1-signal below. -;; <URL:http://www.ncsa.uiuc.edu/SDG/Software/XMosaic/remote-control.html> - -;; XMosaic version 2.5 introduced Common Client Interface allowing you -;; to control mosaic through Unix sockets. -;; <URL:http://www.ncsa.uiuc.edu/SDG/Software/XMosaic/CCI/cci-spec.html> - ;; William M. Perry's excellent "w3" WWW browser for ;; Emacs <URL:ftp://cs.indiana.edu/pub/elisp/w3/> ;; has a function w3-follow-url-at-point, but that @@ -90,10 +84,6 @@ ;; Python see <url:http://www.python.org/>. Grail support in ;; browse-url.el written by Barry Warsaw <bwarsaw@python.org>. -;; MMM is a semi-free WWW browser implemented in Objective Caml, an -;; interesting impure functional programming language. See -;; <URL:http://pauillac.inria.fr/%7Erouaix/mmm/>. - ;; Lynx is now distributed by the FSF. See also ;; <URL:http://lynx.browser.org/>. @@ -226,6 +216,7 @@ (eval-when-compile (require 'thingatpt) (require 'term) (require 'dired) + (require 'executable) (require 'w3-auto nil t)) (defgroup browse-url nil @@ -238,7 +229,7 @@ (defcustom browse-url-browser-function (if (memq system-type '(windows-nt ms-dos)) 'browse-url-default-windows-browser - 'browse-url-netscape) + 'browse-url-default-browser) "*Function to display the current buffer in a WWW browser. This is used by the `browse-url-at-point', `browse-url-at-mouse', and `browse-url-of-file' commands. @@ -252,6 +243,8 @@ (function-item :tag "Emacs W3" :value browse-url-w3) (function-item :tag "W3 in another Emacs via `gnudoit'" :value browse-url-w3-gnudoit) + (function-item :tag "Mozilla" :value browse-url-mozilla) + (function-item :tag "Galeon" :value browse-url-galeon) (function-item :tag "Netscape" :value browse-url-netscape) (function-item :tag "Mosaic" :value browse-url-mosaic) (function-item :tag "Mosaic using CCI" :value browse-url-cci) @@ -269,6 +262,8 @@ :value browse-url-default-windows-browser) (function-item :tag "GNOME invoking Mozilla" :value browse-url-gnome-moz) + (function-item :tag "Default browser" + :value browse-url-default-browser) (function :tag "Your own function") (alist :tag "Regexp/function association list" :key-type regexp :value-type function)) @@ -300,6 +295,47 @@ :group 'browse-url) ;;;###autoload +(defcustom browse-url-browser-display nil + "*The X display for running the browser, if not same as Emacs'." + :type '(choice string (const :tag "Default" nil)) + :group 'browse-url) + +(defcustom browse-url-mozilla-program "mozilla" + "The name by which to invoke Mozilla." + :type 'string + :group 'browse-url) + +(defcustom browse-url-mozilla-arguments nil + "A list of strings to pass to Mozilla as arguments." + :type '(repeat (string :tag "Argument")) + :group 'browse-url) + +(defcustom browse-url-mozilla-startup-arguments browse-url-mozilla-arguments + "A list of strings to pass to Mozilla when it starts up. +Defaults to the value of `browse-url-mozilla-arguments' at the time +`browse-url' is loaded." + :type '(repeat (string :tag "Argument")) + :group 'browse-url) + +;;;###autoload +(defcustom browse-url-galeon-program "galeon" + "The name by which to invoke Galeon." + :type 'string + :group 'browse-url) + +(defcustom browse-url-galeon-arguments nil + "A list of strings to pass to Galeon as arguments." + :type '(repeat (string :tag "Argument")) + :group 'browse-url) + +(defcustom browse-url-galeon-startup-arguments browse-url-galeon-arguments + "A list of strings to pass to Galeon when it starts up. +Defaults to the value of `browse-url-galeon-arguments' at the time +`browse-url' is loaded." + :type '(repeat (string :tag "Argument")) + :group 'browse-url) + +;;;###autoload (defcustom browse-url-new-window-flag nil "*If non-nil, always open a new browser window with appropriate browsers. Passing an interactive argument to \\[browse-url], or specific browser @@ -308,12 +344,6 @@ :type 'boolean :group 'browse-url) -;;;###autoload -(defcustom browse-url-netscape-display nil - "*The X display for running Netscape, if not same as Emacs'." - :type '(choice string (const :tag "Default" nil)) - :group 'browse-url) - (defcustom browse-url-mosaic-program "xmosaic" "The name by which to invoke Mosaic (or mMosaic)." :type 'string @@ -679,11 +709,11 @@ ;; --- Netscape --- (defun browse-url-process-environment () - "Set DISPLAY in the environment to the X display Netscape is running on. -This is either the value of variable `browse-url-netscape-display' if + "Set DISPLAY in the environment to the X display the browser will use. +This is either the value of variable `browse-url-browser-display' if non-nil, or the same display as Emacs if different from the current environment, otherwise just use the current environment." - (let ((display (or browse-url-netscape-display (browse-url-emacs-display)))) + (let ((display (or browse-url-browser-display (browse-url-emacs-display)))) (if display (cons (concat "DISPLAY=" display) process-environment) process-environment))) @@ -699,6 +729,35 @@ display))) ;;;###autoload +(defun browse-url-default-browser (url &rest args) + "Find a suitable browser and ask it to load URL. +Default to the URL around or before point. + +When called interactively, if variable `browse-url-new-window-flag' is +non-nil, load the document in a new window, if possible, otherwise use +a random existing one. A non-nil interactive prefix argument reverses +the effect of `browse-url-new-window-flag'. + +When called non-interactively, optional second argument NEW-WINDOW is +used instead of `browse-url-new-window-flag'. + +The order attempted is gnome-moz-remote, Mozilla, Galeon, Netscape, +Mosaic, IXI Mosaic, Lynx in an xterm, MMM, Konqueror, and then W3." + (apply + (cond + ((executable-find "gnome-moz-remote") 'browse-url-gnome-moz) + ((executable-find browse-url-mozilla-program) 'browse-url-mozilla) + ((executable-find browse-url-galeon-program) 'browse-url-galeon) + ((executable-find browse-url-kde-program) 'browse-url-kde) + ((executable-find browse-url-netscape-program) 'browse-url-netscape) + ((executable-find browse-url-mosaic-program) 'browse-url-mosaic) + ((executable-find "tellw3b") 'browse-url-iximosaic) + ((executable-find browse-url-xterm-program) 'browse-url-lynx-xterm) + ((executable-find "mmm") 'browse-url-mmm) + (t 'browse-url-w3)) + url args)) + +;;;###autoload (defun browse-url-netscape (url &optional new-window) "Ask the Netscape WWW browser to load URL. Default to the URL around or before point. The strings in variable @@ -765,6 +824,91 @@ (append browse-url-netscape-arguments (list "-remote" command))))) +;;;###autoload +(defun browse-url-mozilla (url &optional new-window) + "Ask the Mozilla WWW browser to load URL. +Default to the URL around or before point. The strings in variable +`browse-url-mozilla-arguments' are also passed to Mozilla. + +When called interactively, if variable `browse-url-new-window-flag' is +non-nil, load the document in a new Mozilla window, otherwise use a +random existing one. A non-nil interactive prefix argument reverses +the effect of `browse-url-new-window-flag'. + +When called non-interactively, optional second argument NEW-WINDOW is +used instead of `browse-url-new-window-flag'." + (interactive (browse-url-interactive-arg "URL: ")) + ;; URL encode any `confusing' characters in the URL. This needs to + ;; include at least commas; presumably also close parens. + (while (string-match "[,)]" url) + (setq url (replace-match + (format "%%%x" (string-to-char (match-string 0 url))) t t url))) + (let* ((process-environment (browse-url-process-environment)) + (process (apply 'start-process + (concat "mozilla " url) nil + browse-url-mozilla-program + (append + browse-url-mozilla-arguments + (list "-remote" + (concat "openURL(" + url + (if new-window ",new-window") + ")")))))) + (set-process-sentinel process + `(lambda (process change) + (browse-url-mozilla-sentinel process ,url))))) + +(defun browse-url-mozilla-sentinel (process url) + "Handle a change to the process communicating with Mozilla." + (or (eq (process-exit-status process) 0) + (let* ((process-environment (browse-url-process-environment))) + ;; Mozilla is not running - start it + (message "Starting Mozilla...") + (apply 'start-process (concat "mozilla " url) nil + browse-url-mozilla-program + (append browse-url-mozilla-startup-arguments (list url)))))) + +;;;###autoload +(defun browse-url-galeon (url &optional new-window) + "Ask the Galeon WWW browser to load URL. +Default to the URL around or before point. The strings in variable +`browse-url-galeon-arguments' are also passed to Galeon. + +When called interactively, if variable `browse-url-new-window-flag' is +non-nil, load the document in a new Galeon window, otherwise use a +random existing one. A non-nil interactive prefix argument reverses +the effect of `browse-url-new-window-flag'. + +When called non-interactively, optional second argument NEW-WINDOW is +used instead of `browse-url-new-window-flag'." + (interactive (browse-url-interactive-arg "URL: ")) + ;; URL encode any `confusing' characters in the URL. This needs to + ;; include at least commas; presumably also close parens. + (while (string-match "[,)]" url) + (setq url (replace-match + (format "%%%x" (string-to-char (match-string 0 url))) t t url))) + (let* ((process-environment (browse-url-process-environment)) + (process (apply 'start-process + (concat "galeon " url) nil + browse-url-galeon-program + (append + browse-url-galeon-arguments + (if new-window '("-w" "--noraise")) + (list "-x" url))))) + (set-process-sentinel process + `(lambda (process change) + (browse-url-galeon-sentinel process ,url))))) + +(defun browse-url-galeon-sentinel (process url) + "Handle a change to the process communicating with Galeon." + (or (eq (process-exit-status process) 0) + (let* ((process-environment (browse-url-process-environment))) + ;; Galeon is not running - start it + (message "Starting Galeon...") + (apply 'start-process (concat "galeon " url) nil + browse-url-galeon-program + (append browse-url-galeon-startup-arguments (list url)))))) + ;; GNOME means of invoking either Mozilla or Netrape. (defcustom browse-url-gnome-moz-arguments '()