38436
|
1 ;;; browse-url.el --- pass a URL to a WWW browser
|
28210
|
2
|
64701
|
3 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
106815
|
4 ;; 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
28210
|
5
|
|
6 ;; Author: Denis Howe <dbh@doc.ic.ac.uk>
|
41282
|
7 ;; Maintainer: FSF
|
28210
|
8 ;; Created: 03 Apr 1995
|
|
9 ;; Keywords: hypertext, hypermedia, mouse
|
|
10
|
|
11 ;; This file is part of GNU Emacs.
|
|
12
|
94677
|
13 ;; GNU Emacs is free software: you can redistribute it and/or modify
|
28210
|
14 ;; it under the terms of the GNU General Public License as published by
|
94677
|
15 ;; the Free Software Foundation, either version 3 of the License, or
|
|
16 ;; (at your option) any later version.
|
28210
|
17
|
|
18 ;; GNU Emacs is distributed in the hope that it will be useful,
|
|
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
21 ;; GNU General Public License for more details.
|
|
22
|
|
23 ;; You should have received a copy of the GNU General Public License
|
94677
|
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
28210
|
25
|
|
26 ;;; Commentary:
|
|
27
|
|
28 ;; This package provides functions which read a URL (Uniform Resource
|
|
29 ;; Locator) from the minibuffer, defaulting to the URL around point,
|
|
30 ;; and ask a World-Wide Web browser to load it. It can also load the
|
|
31 ;; URL associated with the current buffer. Different browsers use
|
|
32 ;; different methods of remote control so there is one function for
|
|
33 ;; each supported browser. If the chosen browser is not running, it
|
30798
|
34 ;; is started. Currently there is support for the following browsers,
|
|
35 ;; some of them probably now obsolete:
|
28210
|
36
|
30798
|
37 ;; Function Browser Earliest version
|
41282
|
38 ;; browse-url-mozilla Mozilla Don't know
|
63572
|
39 ;; browse-url-firefox Firefox Don't know (tried with 1.0.1)
|
41282
|
40 ;; browse-url-galeon Galeon Don't know
|
51798
|
41 ;; browse-url-epiphany Epiphany Don't know
|
30798
|
42 ;; browse-url-netscape Netscape 1.1b1
|
|
43 ;; browse-url-mosaic XMosaic/mMosaic <= 2.4
|
|
44 ;; browse-url-cci XMosaic 2.5
|
|
45 ;; browse-url-w3 w3 0
|
|
46 ;; browse-url-w3-gnudoit w3 remotely
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
47 ;; browse-url-text-* Any text browser 0
|
30798
|
48 ;; browse-url-generic arbitrary
|
|
49 ;; browse-url-default-windows-browser MS-Windows browser
|
50574
|
50 ;; browse-url-default-macosx-browser Mac OS X browser
|
32246
|
51 ;; browse-url-gnome-moz GNOME interface to Mozilla
|
37803
|
52 ;; browse-url-kde KDE konqueror (kfm)
|
84361
|
53 ;; browse-url-elinks Elinks Don't know (tried with 0.12.GIT)
|
28210
|
54
|
|
55 ;; [A version of the Netscape browser is now free software
|
|
56 ;; <URL:http://www.mozilla.org/>, albeit not GPLed, so it is
|
|
57 ;; reasonable to have that as the default.]
|
|
58
|
|
59 ;; Note that versions of Netscape before 1.1b1 did not have remote
|
|
60 ;; control. <URL:http://www.netscape.com/newsref/std/x-remote.html>.
|
|
61
|
|
62 ;; Browsers can cache Web pages so it may be necessary to tell them to
|
|
63 ;; reload the current page if it has changed (e.g. if you have edited
|
|
64 ;; it). There is currently no perfect automatic solution to this.
|
|
65
|
|
66 ;; Netscape allows you to specify the id of the window you want to
|
|
67 ;; control but which window DO you want to control and how do you
|
|
68 ;; discover its id?
|
|
69
|
84623
|
70 ;; William M. Perry's excellent "w3" WWW browser for
|
28210
|
71 ;; Emacs <URL:ftp://cs.indiana.edu/pub/elisp/w3/>
|
|
72 ;; has a function w3-follow-url-at-point, but that
|
|
73 ;; doesn't let you edit the URL like browse-url.
|
|
74 ;; The `gnuserv' package that can be used to control it in another
|
|
75 ;; Emacs process is available from
|
|
76 ;; <URL:ftp://ftp.splode.com/pub/users/friedman/packages/>.
|
|
77
|
|
78 ;; Lynx is now distributed by the FSF. See also
|
|
79 ;; <URL:http://lynx.browser.org/>.
|
|
80
|
|
81 ;; Free graphical browsers that could be used by `browse-url-generic'
|
|
82 ;; include Chimera <URL:ftp://ftp.cs.unlv.edu/pub/chimera> and
|
|
83 ;; <URL:http://www.unlv.edu/chimera/>, Arena
|
|
84 ;; <URL:ftp://ftp.yggdrasil.com/pub/dist/web/arena> and Amaya
|
|
85 ;; <URL:ftp://ftp.w3.org/pub/amaya>. mMosaic
|
48801
|
86 ;; <URL:ftp://ftp.enst.fr/pub/mbone/mMosaic/>,
|
|
87 ;; <URL:http://www.enst.fr/~dauphin/mMosaic/> (with development
|
28210
|
88 ;; support for Java applets and multicast) can be used like Mosaic by
|
|
89 ;; setting `browse-url-mosaic-program' appropriately.
|
|
90
|
|
91 ;; I [Denis Howe, not Dave Love] recommend Nelson Minar
|
|
92 ;; <nelson@santafe.edu>'s excellent html-helper-mode.el for editing
|
|
93 ;; HTML and thank Nelson for his many useful comments on this code.
|
|
94 ;; <URL:http://www.santafe.edu/%7Enelson/hhm-beta/>
|
|
95
|
|
96 ;; See also hm--html-menus <URL:http://www.tnt.uni-hannover.de/%7Emuenkel/
|
|
97 ;; software/own/hm--html-menus/>. For composing correct HTML see also
|
|
98 ;; PSGML the general SGML structure editor package
|
|
99 ;; <URL:ftp://ftp.lysator.liu.se/pub/sgml>; hm--html-menus can be used
|
|
100 ;; with this.
|
|
101
|
|
102 ;; This package generalises function html-previewer-process in Marc
|
|
103 ;; Andreessen's html-mode (LCD modes/html-mode.el.Z). See also the
|
|
104 ;; ffap.el package. The huge hyperbole package also contains similar
|
|
105 ;; functions.
|
|
106
|
|
107 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
108 ;; Help!
|
|
109
|
|
110 ;; Can you write and test some code for the Macintrash and Windoze
|
|
111 ;; Netscape remote control APIs? (See the URL above).
|
|
112
|
|
113 ;; Do any other browsers have remote control?
|
|
114
|
|
115 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
116 ;; Usage
|
|
117
|
|
118 ;; To display the URL at or before point:
|
|
119 ;; M-x browse-url-at-point RET
|
|
120 ;; or, similarly but with the opportunity to edit the URL extracted from
|
|
121 ;; the buffer, use:
|
|
122 ;; M-x browse-url
|
|
123
|
|
124 ;; To display a URL by shift-clicking on it, put this in your ~/.emacs
|
|
125 ;; file:
|
|
126 ;; (global-set-key [S-mouse-2] 'browse-url-at-mouse)
|
|
127 ;; (Note that using Shift-mouse-1 is not desirable because
|
|
128 ;; that event has a standard meaning in Emacs.)
|
|
129
|
|
130 ;; To display the current buffer in a web browser:
|
|
131 ;; M-x browse-url-of-buffer RET
|
|
132
|
|
133 ;; To display the current region in a web browser:
|
|
134 ;; M-x browse-url-of-region RET
|
|
135
|
|
136 ;; In Dired, to display the file named on the current line:
|
|
137 ;; M-x browse-url-of-dired-file RET
|
|
138
|
|
139 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
140 ;; Customisation (~/.emacs)
|
|
141
|
|
142 ;; To see what variables are available for customization, type
|
|
143 ;; `M-x set-variable browse-url TAB'. Better, use
|
|
144 ;; `M-x customize-group browse-url'.
|
|
145
|
|
146 ;; Bind the browse-url commands to keys with the `C-c C-z' prefix
|
|
147 ;; (as used by html-helper-mode):
|
|
148 ;; (global-set-key "\C-c\C-z." 'browse-url-at-point)
|
|
149 ;; (global-set-key "\C-c\C-zb" 'browse-url-of-buffer)
|
|
150 ;; (global-set-key "\C-c\C-zr" 'browse-url-of-region)
|
|
151 ;; (global-set-key "\C-c\C-zu" 'browse-url)
|
|
152 ;; (global-set-key "\C-c\C-zv" 'browse-url-of-file)
|
|
153 ;; (add-hook 'dired-mode-hook
|
|
154 ;; (lambda ()
|
|
155 ;; (local-set-key "\C-c\C-zf" 'browse-url-of-dired-file)))
|
|
156
|
30798
|
157 ;; Browse URLs in mail messages under RMAIL by clicking mouse-2:
|
28210
|
158 ;; (add-hook 'rmail-mode-hook (lambda () ; rmail-mode startup
|
|
159 ;; (define-key rmail-mode-map [mouse-2] 'browse-url-at-mouse)))
|
30798
|
160 ;; Alternatively, add `goto-address' to `rmail-show-message-hook'.
|
28210
|
161
|
30798
|
162 ;; Gnus provides a standard feature to activate URLs in article
|
|
163 ;; buffers for invocation of browse-url.
|
28210
|
164
|
|
165 ;; Use the Emacs w3 browser when not running under X11:
|
|
166 ;; (or (eq window-system 'x)
|
|
167 ;; (setq browse-url-browser-function 'browse-url-w3))
|
|
168
|
|
169 ;; To always save modified buffers before displaying the file in a browser:
|
|
170 ;; (setq browse-url-save-file t)
|
|
171
|
|
172 ;; To get round the Netscape caching problem, you could EITHER have
|
|
173 ;; write-file in html-helper-mode make Netscape reload the document:
|
|
174 ;;
|
|
175 ;; (autoload 'browse-url-netscape-reload "browse-url"
|
|
176 ;; "Ask a WWW browser to redisplay the current file." t)
|
|
177 ;; (add-hook 'html-helper-mode-hook
|
|
178 ;; (lambda ()
|
|
179 ;; (add-hook 'local-write-file-hooks
|
|
180 ;; (lambda ()
|
|
181 ;; (let ((local-write-file-hooks))
|
|
182 ;; (save-buffer))
|
|
183 ;; (browse-url-netscape-reload)
|
|
184 ;; t) ; => file written by hook
|
|
185 ;; t))) ; append to l-w-f-hooks
|
|
186 ;;
|
|
187 ;; OR have browse-url-of-file ask Netscape to load and then reload the
|
|
188 ;; file:
|
|
189 ;;
|
|
190 ;; (add-hook 'browse-url-of-file-hook 'browse-url-netscape-reload)
|
|
191
|
|
192 ;; You may also want to customise browse-url-netscape-arguments, e.g.
|
|
193 ;; (setq browse-url-netscape-arguments '("-install"))
|
|
194 ;;
|
|
195 ;; or similarly for the other browsers.
|
|
196
|
|
197 ;; To invoke different browsers for different URLs:
|
|
198 ;; (setq browse-url-browser-function '(("^mailto:" . browse-url-mail)
|
|
199 ;; ("." . browse-url-netscape)))
|
|
200
|
|
201 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
202 ;;; Code:
|
|
203
|
|
204 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
205 ;; Variables
|
|
206
|
84398
|
207 (eval-when-compile (require 'cl)
|
|
208 (require 'thingatpt)
|
28210
|
209 (require 'term)
|
|
210 (require 'dired)
|
41282
|
211 (require 'executable)
|
28210
|
212 (require 'w3-auto nil t))
|
|
213
|
|
214 (defgroup browse-url nil
|
|
215 "Use a web browser to look at a URL."
|
|
216 :prefix "browse-url-"
|
28330
|
217 :link '(emacs-commentary-link "browse-url")
|
28210
|
218 :group 'hypermedia)
|
|
219
|
|
220 ;;;###autoload
|
|
221 (defcustom browse-url-browser-function
|
50574
|
222 (cond
|
|
223 ((memq system-type '(windows-nt ms-dos cygwin))
|
|
224 'browse-url-default-windows-browser)
|
|
225 ((memq system-type '(darwin)) 'browse-url-default-macosx-browser)
|
|
226 (t 'browse-url-default-browser))
|
78640
|
227 "Function to display the current buffer in a WWW browser.
|
28210
|
228 This is used by the `browse-url-at-point', `browse-url-at-mouse', and
|
|
229 `browse-url-of-file' commands.
|
|
230
|
|
231 If the value is not a function it should be a list of pairs
|
28330
|
232 \(REGEXP . FUNCTION). In this case the function called will be the one
|
28210
|
233 associated with the first REGEXP which matches the current URL. The
|
|
234 function is passed the URL and any other args of `browse-url'. The last
|
|
235 regexp should probably be \".\" to specify a default browser."
|
|
236 :type '(choice
|
28330
|
237 (function-item :tag "Emacs W3" :value browse-url-w3)
|
|
238 (function-item :tag "W3 in another Emacs via `gnudoit'"
|
|
239 :value browse-url-w3-gnudoit)
|
41282
|
240 (function-item :tag "Mozilla" :value browse-url-mozilla)
|
63572
|
241 (function-item :tag "Firefox" :value browse-url-firefox)
|
41282
|
242 (function-item :tag "Galeon" :value browse-url-galeon)
|
51798
|
243 (function-item :tag "Epiphany" :value browse-url-epiphany)
|
28330
|
244 (function-item :tag "Netscape" :value browse-url-netscape)
|
|
245 (function-item :tag "Mosaic" :value browse-url-mosaic)
|
|
246 (function-item :tag "Mosaic using CCI" :value browse-url-cci)
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
247 (function-item :tag "Text browser in an xterm window"
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
248 :value browse-url-text-xterm)
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
249 (function-item :tag "Text browser in an Emacs window"
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
250 :value browse-url-text-emacs)
|
37803
|
251 (function-item :tag "KDE" :value browse-url-kde)
|
84361
|
252 (function-item :tag "Elinks" :value browse-url-elinks)
|
28330
|
253 (function-item :tag "Specified by `Browse Url Generic Program'"
|
|
254 :value browse-url-generic)
|
|
255 (function-item :tag "Default Windows browser"
|
32246
|
256 :value browse-url-default-windows-browser)
|
50574
|
257 (function-item :tag "Default Mac OS X browser"
|
|
258 :value browse-url-default-macosx-browser)
|
32246
|
259 (function-item :tag "GNOME invoking Mozilla"
|
|
260 :value browse-url-gnome-moz)
|
41282
|
261 (function-item :tag "Default browser"
|
|
262 :value browse-url-default-browser)
|
28330
|
263 (function :tag "Your own function")
|
|
264 (alist :tag "Regexp/function association list"
|
|
265 :key-type regexp :value-type function))
|
33417
|
266 :version "21.1"
|
28210
|
267 :group 'browse-url)
|
|
268
|
|
269 (defcustom browse-url-netscape-program "netscape"
|
|
270 ;; Info about netscape-remote from Karl Berry.
|
78640
|
271 "The name by which to invoke Netscape.
|
28210
|
272
|
|
273 The free program `netscape-remote' from
|
|
274 <URL:http://home.netscape.com/newsref/std/remote.c> is said to start
|
|
275 up very much quicker than `netscape'. Reported to compile on a GNU
|
|
276 system, given vroot.h from the same directory, with cc flags
|
|
277 -DSTANDALONE -L/usr/X11R6/lib -lXmu -lX11."
|
|
278 :type 'string
|
|
279 :group 'browse-url)
|
|
280
|
|
281 (defcustom browse-url-netscape-arguments nil
|
78640
|
282 "A list of strings to pass to Netscape as arguments."
|
28210
|
283 :type '(repeat (string :tag "Argument"))
|
|
284 :group 'browse-url)
|
|
285
|
|
286 (defcustom browse-url-netscape-startup-arguments browse-url-netscape-arguments
|
78640
|
287 "A list of strings to pass to Netscape when it starts up.
|
28210
|
288 Defaults to the value of `browse-url-netscape-arguments' at the time
|
|
289 `browse-url' is loaded."
|
|
290 :type '(repeat (string :tag "Argument"))
|
|
291 :group 'browse-url)
|
|
292
|
41282
|
293 (defcustom browse-url-browser-display nil
|
78640
|
294 "The X display for running the browser, if not same as Emacs'."
|
41282
|
295 :type '(choice string (const :tag "Default" nil))
|
|
296 :group 'browse-url)
|
|
297
|
|
298 (defcustom browse-url-mozilla-program "mozilla"
|
78640
|
299 "The name by which to invoke Mozilla."
|
41282
|
300 :type 'string
|
|
301 :group 'browse-url)
|
|
302
|
|
303 (defcustom browse-url-mozilla-arguments nil
|
78640
|
304 "A list of strings to pass to Mozilla as arguments."
|
41282
|
305 :type '(repeat (string :tag "Argument"))
|
|
306 :group 'browse-url)
|
|
307
|
|
308 (defcustom browse-url-mozilla-startup-arguments browse-url-mozilla-arguments
|
78640
|
309 "A list of strings to pass to Mozilla when it starts up.
|
41282
|
310 Defaults to the value of `browse-url-mozilla-arguments' at the time
|
|
311 `browse-url' is loaded."
|
|
312 :type '(repeat (string :tag "Argument"))
|
|
313 :group 'browse-url)
|
|
314
|
63572
|
315 ;;;###autoload
|
105870
|
316 (defcustom browse-url-firefox-program (purecopy "firefox")
|
78640
|
317 "The name by which to invoke Firefox."
|
63572
|
318 :type 'string
|
|
319 :group 'browse-url)
|
|
320
|
|
321 (defcustom browse-url-firefox-arguments nil
|
78640
|
322 "A list of strings to pass to Firefox as arguments."
|
63572
|
323 :type '(repeat (string :tag "Argument"))
|
|
324 :group 'browse-url)
|
|
325
|
|
326 (defcustom browse-url-firefox-startup-arguments browse-url-firefox-arguments
|
78640
|
327 "A list of strings to pass to Firefox when it starts up.
|
63572
|
328 Defaults to the value of `browse-url-firefox-arguments' at the time
|
|
329 `browse-url' is loaded."
|
|
330 :type '(repeat (string :tag "Argument"))
|
|
331 :group 'browse-url)
|
|
332
|
|
333 ;;;###autoload
|
105870
|
334 (defcustom browse-url-galeon-program (purecopy "galeon")
|
78640
|
335 "The name by which to invoke Galeon."
|
41282
|
336 :type 'string
|
|
337 :group 'browse-url)
|
|
338
|
|
339 (defcustom browse-url-galeon-arguments nil
|
78640
|
340 "A list of strings to pass to Galeon as arguments."
|
41282
|
341 :type '(repeat (string :tag "Argument"))
|
|
342 :group 'browse-url)
|
|
343
|
|
344 (defcustom browse-url-galeon-startup-arguments browse-url-galeon-arguments
|
78640
|
345 "A list of strings to pass to Galeon when it starts up.
|
41282
|
346 Defaults to the value of `browse-url-galeon-arguments' at the time
|
|
347 `browse-url' is loaded."
|
|
348 :type '(repeat (string :tag "Argument"))
|
|
349 :group 'browse-url)
|
|
350
|
51798
|
351 (defcustom browse-url-epiphany-program "epiphany"
|
78640
|
352 "The name by which to invoke Epiphany."
|
51798
|
353 :type 'string
|
|
354 :group 'browse-url)
|
|
355
|
|
356 (defcustom browse-url-epiphany-arguments nil
|
78640
|
357 "A list of strings to pass to Epiphany as arguments."
|
51798
|
358 :type '(repeat (string :tag "Argument"))
|
|
359 :group 'browse-url)
|
|
360
|
|
361 (defcustom browse-url-epiphany-startup-arguments browse-url-epiphany-arguments
|
78640
|
362 "A list of strings to pass to Epiphany when it starts up.
|
51798
|
363 Defaults to the value of `browse-url-epiphany-arguments' at the time
|
|
364 `browse-url' is loaded."
|
|
365 :type '(repeat (string :tag "Argument"))
|
|
366 :group 'browse-url)
|
|
367
|
58006
|
368 ;; GNOME means of invoking either Mozilla or Netrape.
|
|
369 (defvar browse-url-gnome-moz-program "gnome-moz-remote")
|
|
370
|
|
371 (defcustom browse-url-gnome-moz-arguments '()
|
78640
|
372 "A list of strings passed to the GNOME mozilla viewer as arguments."
|
58006
|
373 :version "21.1"
|
|
374 :type '(repeat (string :tag "Argument"))
|
|
375 :group 'browse-url)
|
|
376
|
47844
|
377 (defcustom browse-url-mozilla-new-window-is-tab nil
|
78640
|
378 "Whether to open up new windows in a tab or a new window.
|
47844
|
379 If non-nil, then open the URL in a new tab rather than a new window if
|
|
380 `browse-url-mozilla' is asked to open it in a new window."
|
|
381 :type 'boolean
|
|
382 :group 'browse-url)
|
|
383
|
63572
|
384 (defcustom browse-url-firefox-new-window-is-tab nil
|
78640
|
385 "Whether to open up new windows in a tab or a new window.
|
63572
|
386 If non-nil, then open the URL in a new tab rather than a new window if
|
|
387 `browse-url-firefox' is asked to open it in a new window.
|
|
388
|
|
389 This option is currently ignored on MS-Windows, since the necessary
|
|
390 functionality is not available there."
|
|
391 :type 'boolean
|
|
392 :group 'browse-url)
|
|
393
|
41460
|
394 (defcustom browse-url-galeon-new-window-is-tab nil
|
78640
|
395 "Whether to open up new windows in a tab or a new window.
|
41460
|
396 If non-nil, then open the URL in a new tab rather than a new window if
|
|
397 `browse-url-galeon' is asked to open it in a new window."
|
|
398 :type 'boolean
|
|
399 :group 'browse-url)
|
|
400
|
51798
|
401 (defcustom browse-url-epiphany-new-window-is-tab nil
|
78640
|
402 "Whether to open up new windows in a tab or a new window.
|
51798
|
403 If non-nil, then open the URL in a new tab rather than a new window if
|
|
404 `browse-url-epiphany' is asked to open it in a new window."
|
|
405 :type 'boolean
|
|
406 :group 'browse-url)
|
|
407
|
60208
|
408 (defcustom browse-url-netscape-new-window-is-tab nil
|
78640
|
409 "Whether to open up new windows in a tab or a new window.
|
60208
|
410 If non-nil, then open the URL in a new tab rather than a new
|
|
411 window if `browse-url-netscape' is asked to open it in a new
|
|
412 window."
|
|
413 :type 'boolean
|
|
414 :group 'browse-url)
|
|
415
|
37378
|
416 (defcustom browse-url-new-window-flag nil
|
84623
|
417 "Non-nil means always open a new browser window with appropriate browsers.
|
28210
|
418 Passing an interactive argument to \\[browse-url], or specific browser
|
|
419 commands reverses the effect of this variable. Requires Netscape version
|
|
420 1.1N or later or XMosaic version 2.5 or later if using those browsers."
|
|
421 :type 'boolean
|
|
422 :group 'browse-url)
|
|
423
|
|
424 (defcustom browse-url-mosaic-program "xmosaic"
|
78640
|
425 "The name by which to invoke Mosaic (or mMosaic)."
|
28210
|
426 :type 'string
|
|
427 :version "20.3"
|
|
428 :group 'browse-url)
|
|
429
|
|
430 (defcustom browse-url-mosaic-arguments nil
|
78640
|
431 "A list of strings to pass to Mosaic as arguments."
|
28210
|
432 :type '(repeat (string :tag "Argument"))
|
|
433 :group 'browse-url)
|
|
434
|
43980
|
435 (defcustom browse-url-mosaic-pidfile "~/.mosaicpid"
|
78640
|
436 "The name of the pidfile created by Mosaic."
|
43980
|
437 :type 'string
|
|
438 :group 'browse-url)
|
|
439
|
28210
|
440 (defcustom browse-url-filename-alist
|
78640
|
441 `(("^/\\(ftp@\\|anonymous@\\)?\\([^:]+\\):/*" . "ftp://\\2/")
|
28210
|
442 ;; The above loses the username to avoid the browser prompting for
|
|
443 ;; it in anonymous cases. If it's not anonymous the next regexp
|
|
444 ;; applies.
|
|
445 ("^/\\([^:@]+@\\)?\\([^:]+\\):/*" . "ftp://\\1\\2/")
|
78640
|
446 ,@(if (memq system-type '(windows-nt ms-dos cygwin))
|
106208
c89e7ab6a9d6
* net/browse-url.el (browse-url-filename-alist): On Windows, add
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
447 '(("^\\([a-zA-Z]:\\)[\\/]" . "file:///\\1/")
|
78640
|
448 ("^[\\/][\\/]+" . "file://")))
|
102984
3c287035dd2c
* net/browse-url.el (browse-url-filename-alist): Correct file
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
449 ("^/+" . "file:///"))
|
78640
|
450 "An alist of (REGEXP . STRING) pairs used by `browse-url-of-file'.
|
28210
|
451 Any substring of a filename matching one of the REGEXPs is replaced by
|
|
452 the corresponding STRING using `replace-match', not treating STRING
|
|
453 literally. All pairs are applied in the order given. The default
|
49240
|
454 value converts ange-ftp/EFS-style file names into ftp URLs and prepends
|
|
455 `file:' to any file name beginning with `/'.
|
28210
|
456
|
|
457 For example, adding to the default a specific translation of an ange-ftp
|
|
458 address to an HTTP URL:
|
|
459
|
|
460 (setq browse-url-filename-alist
|
|
461 '((\"/webmaster@webserver:/home/www/html/\" .
|
|
462 \"http://www.acme.co.uk/\")
|
|
463 (\"^/\\(ftp@\\|anonymous@\\)?\\([^:]+\\):/*\" . \"ftp://\\2/\")
|
|
464 (\"^/\\([^:@]+@\\)?\\([^:]+\\):/*\" . \"ftp://\\1\\2/\")
|
78640
|
465 (\"^/+\" . \"file:/\")))"
|
28210
|
466 :type '(repeat (cons :format "%v"
|
|
467 (regexp :tag "Regexp")
|
|
468 (string :tag "Replacement")))
|
102997
16c9c375ab15
browse-url.el (browse-url-filename-alist): Update :version for last change.
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
469 :version "23.1"
|
28210
|
470 :group 'browse-url)
|
|
471
|
|
472 (defcustom browse-url-save-file nil
|
78640
|
473 "If non-nil, save the buffer before displaying its file.
|
28210
|
474 Used by the `browse-url-of-file' command."
|
|
475 :type 'boolean
|
|
476 :group 'browse-url)
|
|
477
|
|
478 (defcustom browse-url-of-file-hook nil
|
78640
|
479 "Run after `browse-url-of-file' has asked a browser to load a file.
|
28210
|
480
|
|
481 Set this to `browse-url-netscape-reload' to force Netscape to load the
|
|
482 file rather than displaying a cached copy."
|
|
483 :type 'hook
|
|
484 :options '(browse-url-netscape-reload)
|
|
485 :group 'browse-url)
|
|
486
|
|
487 (defcustom browse-url-CCI-port 3003
|
78640
|
488 "Port to access XMosaic via CCI.
|
28210
|
489 This can be any number between 1024 and 65535 but must correspond to
|
|
490 the value set in the browser."
|
|
491 :type 'integer
|
|
492 :group 'browse-url)
|
|
493
|
|
494 (defcustom browse-url-CCI-host "localhost"
|
78640
|
495 "Host to access XMosaic via CCI.
|
28210
|
496 This should be the host name of the machine running XMosaic with CCI
|
|
497 enabled. The port number should be set in `browse-url-CCI-port'."
|
|
498 :type 'string
|
|
499 :group 'browse-url)
|
|
500
|
|
501 (defvar browse-url-temp-file-name nil)
|
|
502 (make-variable-buffer-local 'browse-url-temp-file-name)
|
96547
75ac143d2aa1
* net/browse-url.el (browse-url-default-browser): Fix argument list in lambda.
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
503
|
28210
|
504 (defcustom browse-url-xterm-program "xterm"
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
505 "The name of the terminal emulator used by `browse-url-text-xterm'.
|
63272
|
506 This might, for instance, be a separate color version of xterm."
|
28210
|
507 :type 'string
|
|
508 :group 'browse-url)
|
|
509
|
|
510 (defcustom browse-url-xterm-args nil
|
78640
|
511 "A list of strings defining options for `browse-url-xterm-program'.
|
28210
|
512 These might set its size, for instance."
|
|
513 :type '(repeat (string :tag "Argument"))
|
|
514 :group 'browse-url)
|
|
515
|
|
516 (defcustom browse-url-gnudoit-program "gnudoit"
|
78640
|
517 "The name of the `gnudoit' program used by `browse-url-w3-gnudoit'."
|
28210
|
518 :type 'string
|
|
519 :group 'browse-url)
|
|
520
|
|
521 (defcustom browse-url-gnudoit-args '("-q")
|
78640
|
522 "A list of strings defining options for `browse-url-gnudoit-program'.
|
28210
|
523 These might set the port, for instance."
|
|
524 :type '(repeat (string :tag "Argument"))
|
|
525 :group 'browse-url)
|
|
526
|
|
527 (defcustom browse-url-generic-program nil
|
78640
|
528 "The name of the browser program used by `browse-url-generic'."
|
28210
|
529 :type '(choice string (const :tag "None" nil))
|
|
530 :group 'browse-url)
|
|
531
|
|
532 (defcustom browse-url-generic-args nil
|
78640
|
533 "A list of strings defining options for `browse-url-generic-program'."
|
28210
|
534 :type '(repeat (string :tag "Argument"))
|
|
535 :group 'browse-url)
|
|
536
|
|
537 (defcustom browse-url-temp-dir temporary-file-directory
|
78640
|
538 "The name of a directory for browse-url's temporary files.
|
28210
|
539 Such files are generated by functions like `browse-url-of-region'.
|
|
540 You might want to set this to somewhere with restricted read permissions
|
|
541 for privacy's sake."
|
|
542 :type 'string
|
|
543 :group 'browse-url)
|
|
544
|
78640
|
545 (defcustom browse-url-netscape-version 3
|
|
546 "The version of Netscape you are using.
|
28210
|
547 This affects how URL reloading is done; the mechanism changed
|
|
548 incompatibly at version 4."
|
|
549 :type 'number
|
|
550 :group 'browse-url)
|
|
551
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
552 (defcustom browse-url-text-browser "lynx"
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
553 "The name of the text browser to invoke."
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
554 :type 'string
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
555 :group 'browse-url
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
556 :version "23.1")
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
557
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
558 (defcustom browse-url-text-emacs-args (and (not window-system)
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
559 '("-show_cursor"))
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
560 "A list of strings defining options for a text browser in an Emacs buffer.
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
561
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
562 The default is none in a window system, otherwise `-show_cursor' to
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
563 indicate the position of the current link in the absence of
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
564 highlighting, assuming the normal default for showing the cursor."
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
565 :type '(repeat (string :tag "Argument"))
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
566 :version "23.1"
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
567 :group 'browse-url)
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
568
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
569 (defcustom browse-url-text-input-field 'avoid
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
570 "Action on selecting an existing text browser buffer at an input field.
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
571 What to do when sending a new URL to an existing text browser buffer in Emacs
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
572 if the browser cursor is on an input field (in which case the `g' command
|
28210
|
573 would be entered as data). Such fields are recognized by the
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
574 underlines ____. Allowed values: nil: disregard it, `warn': warn the
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
575 user and don't emit the URL, `avoid': try to avoid the field by moving
|
28210
|
576 down (this *won't* always work)."
|
|
577 :type '(choice (const :tag "Move to try to avoid field" :value avoid)
|
|
578 (const :tag "Disregard" :value nil)
|
|
579 (const :tag "Warn, don't emit URL" :value warn))
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
580 :version "23.1"
|
28210
|
581 :group 'browse-url)
|
|
582
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
583 (defcustom browse-url-text-input-attempts 10
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
584 "How many times to try to move down from a series of text browser input fields."
|
46615
|
585 :type 'integer
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
586 :version "23.1"
|
46615
|
587 :group 'browse-url)
|
28210
|
588
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
589 (defcustom browse-url-text-input-delay 0.2
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
590 "Seconds to wait for a text browser between moves down from an input field."
|
46615
|
591 :type 'number
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
592 :version "23.1"
|
46615
|
593 :group 'browse-url)
|
28210
|
594
|
37803
|
595 (defcustom browse-url-kde-program "kfmclient"
|
78640
|
596 "The name by which to invoke the KDE web browser."
|
37803
|
597 :type 'string
|
|
598 :version "21.1"
|
|
599 :group 'browse-url)
|
|
600
|
|
601 (defcustom browse-url-kde-args '("openURL")
|
78640
|
602 "A list of strings defining options for `browse-url-kde-program'."
|
37803
|
603 :type '(repeat (string :tag "Argument"))
|
|
604 :group 'browse-url)
|
|
605
|
84361
|
606 (defcustom browse-url-elinks-wrapper '("xterm" "-e")
|
|
607 "*Wrapper command prepended to the Elinks command-line."
|
|
608 :type '(repeat (string :tag "Wrapper"))
|
|
609 :group 'browse-url)
|
|
610
|
|
611 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
612 ;; URL encoding
|
|
613
|
84623
|
614 (defun browse-url-url-encode-chars (text chars)
|
|
615 "URL-encode the chars in TEXT that match CHARS.
|
106717
15eb515afd85
* net/browse-url.el (browse-url-encode-url): Don't escape commas.
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
616 CHARS is a regexp-like character alternative (e.g., \"[)$]\")."
|
84648
ea4647942299
(browse-url-url-encode-chars): Use the right parameter name in the function body.
Michaël Cadilhac <michael.cadilhac@lrde.org>
diff
changeset
|
617 (let ((encoded-text (copy-sequence text))
|
84508
|
618 (s 0))
|
84648
ea4647942299
(browse-url-url-encode-chars): Use the right parameter name in the function body.
Michaël Cadilhac <michael.cadilhac@lrde.org>
diff
changeset
|
619 (while (setq s (string-match chars encoded-text s))
|
ea4647942299
(browse-url-url-encode-chars): Use the right parameter name in the function body.
Michaël Cadilhac <michael.cadilhac@lrde.org>
diff
changeset
|
620 (setq encoded-text
|
84361
|
621 (replace-match (format "%%%x"
|
84648
ea4647942299
(browse-url-url-encode-chars): Use the right parameter name in the function body.
Michaël Cadilhac <michael.cadilhac@lrde.org>
diff
changeset
|
622 (string-to-char (match-string 0 encoded-text)))
|
ea4647942299
(browse-url-url-encode-chars): Use the right parameter name in the function body.
Michaël Cadilhac <michael.cadilhac@lrde.org>
diff
changeset
|
623 t t encoded-text)
|
84508
|
624 s (1+ s)))
|
84648
ea4647942299
(browse-url-url-encode-chars): Use the right parameter name in the function body.
Michaël Cadilhac <michael.cadilhac@lrde.org>
diff
changeset
|
625 encoded-text))
|
84361
|
626
|
84623
|
627 (defun browse-url-encode-url (url)
|
|
628 "Escape annoying characters in URL.
|
106717
15eb515afd85
* net/browse-url.el (browse-url-encode-url): Don't escape commas.
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
629 The annoying characters are those that can mislead a web browser
|
15eb515afd85
* net/browse-url.el (browse-url-encode-url): Don't escape commas.
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
630 regarding its parameter treatment."
|
15eb515afd85
* net/browse-url.el (browse-url-encode-url): Don't escape commas.
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
631 ;; FIXME: Is there an actual example of a web browser getting
|
15eb515afd85
* net/browse-url.el (browse-url-encode-url): Don't escape commas.
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
632 ;; confused? (This used to encode commas, but at least Firefox
|
15eb515afd85
* net/browse-url.el (browse-url-encode-url): Don't escape commas.
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
633 ;; handles commas correctly and doesn't accept encoded commas.)
|
15eb515afd85
* net/browse-url.el (browse-url-encode-url): Don't escape commas.
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
634 (browse-url-url-encode-chars url "[)$]"))
|
84623
|
635
|
28210
|
636 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
637 ;; URL input
|
|
638
|
58937
|
639 ;;;###autoload
|
28210
|
640 (defun browse-url-url-at-point ()
|
|
641 (let ((url (thing-at-point 'url)))
|
|
642 (set-text-properties 0 (length url) nil url)
|
|
643 url))
|
|
644
|
|
645 ;; Having this as a separate function called by the browser-specific
|
|
646 ;; functions allows them to be stand-alone commands, making it easier
|
|
647 ;; to switch between browsers.
|
|
648
|
|
649 (defun browse-url-interactive-arg (prompt)
|
|
650 "Read a URL from the minibuffer, prompting with PROMPT.
|
55757
5806629f9848
(browse-url-interactive-arg): Enable user to explicitly select the text to
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
651 If `transient-mark-mode' is non-nil and the mark is active,
|
55830
|
652 it defaults to the current region, else to the URL at or before
|
|
653 point. If invoked with a mouse button, it moves point to the
|
|
654 position clicked before acting.
|
|
655
|
|
656 This function returns a list (URL NEW-WINDOW-FLAG)
|
|
657 for use in `interactive'."
|
28210
|
658 (let ((event (elt (this-command-keys) 0)))
|
|
659 (and (listp event) (mouse-set-point event)))
|
55757
5806629f9848
(browse-url-interactive-arg): Enable user to explicitly select the text to
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
660 (list (read-string prompt (or (and transient-mark-mode mark-active
|
5806629f9848
(browse-url-interactive-arg): Enable user to explicitly select the text to
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
661 ;; rfc2396 Appendix E.
|
5806629f9848
(browse-url-interactive-arg): Enable user to explicitly select the text to
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
662 (replace-regexp-in-string
|
5806629f9848
(browse-url-interactive-arg): Enable user to explicitly select the text to
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
663 "[\t\r\f\n ]+" ""
|
5806629f9848
(browse-url-interactive-arg): Enable user to explicitly select the text to
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
664 (buffer-substring-no-properties
|
5806629f9848
(browse-url-interactive-arg): Enable user to explicitly select the text to
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
665 (region-beginning) (region-end))))
|
5806629f9848
(browse-url-interactive-arg): Enable user to explicitly select the text to
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
666 (browse-url-url-at-point)))
|
37378
|
667 (not (eq (null browse-url-new-window-flag)
|
28210
|
668 (null current-prefix-arg)))))
|
|
669
|
57934
|
670 ;; called-interactive-p needs to be called at a function's top-level, hence
|
|
671 ;; this macro. We use that rather than interactive-p because
|
|
672 ;; use in a keyboard macro should not change this behavior.
|
28274
|
673 (defmacro browse-url-maybe-new-window (arg)
|
105371
|
674 `(if (or noninteractive (not (called-interactively-p 'any)))
|
28274
|
675 ,arg
|
37378
|
676 browse-url-new-window-flag))
|
28274
|
677
|
28210
|
678 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
679 ;; Browse current buffer
|
|
680
|
|
681 ;;;###autoload
|
|
682 (defun browse-url-of-file (&optional file)
|
|
683 "Ask a WWW browser to display FILE.
|
|
684 Display the current buffer's file if FILE is nil or if called
|
|
685 interactively. Turn the filename into a URL with function
|
|
686 `browse-url-file-url'. Pass the URL to a browser using the
|
|
687 `browse-url' function then run `browse-url-of-file-hook'."
|
|
688 (interactive)
|
|
689 (or file
|
|
690 (setq file (buffer-file-name))
|
|
691 (error "Current buffer has no file"))
|
|
692 (let ((buf (get-file-buffer file)))
|
|
693 (if buf
|
78620
|
694 (with-current-buffer buf
|
28210
|
695 (cond ((not (buffer-modified-p)))
|
|
696 (browse-url-save-file (save-buffer))
|
|
697 (t (message "%s modified since last save" file))))))
|
|
698 (browse-url (browse-url-file-url file))
|
|
699 (run-hooks 'browse-url-of-file-hook))
|
|
700
|
|
701 (defun browse-url-file-url (file)
|
|
702 "Return the URL corresponding to FILE.
|
|
703 Use variable `browse-url-filename-alist' to map filenames to URLs."
|
106208
c89e7ab6a9d6
* net/browse-url.el (browse-url-filename-alist): On Windows, add
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
704 ;; De-munge Cygwin filenames before passing them to Windows browser.
|
c89e7ab6a9d6
* net/browse-url.el (browse-url-filename-alist): On Windows, add
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
705 (if (eq system-type 'cygwin)
|
c89e7ab6a9d6
* net/browse-url.el (browse-url-filename-alist): On Windows, add
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
706 (let ((winfile (with-output-to-string
|
c89e7ab6a9d6
* net/browse-url.el (browse-url-filename-alist): On Windows, add
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
707 (call-process "cygpath" nil standard-output
|
c89e7ab6a9d6
* net/browse-url.el (browse-url-filename-alist): On Windows, add
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
708 nil "-m" file))))
|
c89e7ab6a9d6
* net/browse-url.el (browse-url-filename-alist): On Windows, add
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
709 (setq file (substring winfile 0 -1))))
|
104772
|
710 (let ((coding (and (default-value 'enable-multibyte-characters)
|
70762
65f2c33d043f
(browse-url-file-url): Encode file name on conversion to URL.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
711 (or file-name-coding-system
|
65f2c33d043f
(browse-url-file-url): Encode file name on conversion to URL.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
712 default-file-name-coding-system))))
|
65f2c33d043f
(browse-url-file-url): Encode file name on conversion to URL.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
diff
changeset
|
713 (if coding (setq file (encode-coding-string file coding))))
|
84623
|
714 (setq file (browse-url-url-encode-chars file "[*\"()',=;?% ]"))
|
31909
|
715 (dolist (map browse-url-filename-alist)
|
|
716 (when (and map (string-match (car map) file))
|
|
717 (setq file (replace-match (cdr map) t nil file))))
|
28210
|
718 file)
|
|
719
|
|
720 ;;;###autoload
|
|
721 (defun browse-url-of-buffer (&optional buffer)
|
|
722 "Ask a WWW browser to display BUFFER.
|
|
723 Display the current buffer if BUFFER is nil. Display only the
|
|
724 currently visible part of BUFFER (from a temporary file) if buffer is
|
|
725 narrowed."
|
|
726 (interactive)
|
|
727 (save-excursion
|
|
728 (and buffer (set-buffer buffer))
|
|
729 (let ((file-name
|
|
730 ;; Ignore real name if restricted
|
|
731 (and (= (- (point-max) (point-min)) (buffer-size))
|
|
732 (or buffer-file-name
|
|
733 (and (boundp 'dired-directory) dired-directory)))))
|
|
734 (or file-name
|
|
735 (progn
|
|
736 (or browse-url-temp-file-name
|
|
737 (setq browse-url-temp-file-name
|
|
738 (convert-standard-filename
|
|
739 (make-temp-file
|
66438
|
740 (expand-file-name "burl" browse-url-temp-dir)
|
|
741 nil ".html"))))
|
28210
|
742 (setq file-name browse-url-temp-file-name)
|
|
743 (write-region (point-min) (point-max) file-name nil 'no-message)))
|
|
744 (browse-url-of-file file-name))))
|
|
745
|
|
746 (defun browse-url-delete-temp-file (&optional temp-file-name)
|
|
747 ;; Delete browse-url-temp-file-name from the file system
|
|
748 ;; If optional arg TEMP-FILE-NAME is non-nil, delete it instead
|
|
749 (let ((file-name (or temp-file-name browse-url-temp-file-name)))
|
|
750 (if (and file-name (file-exists-p file-name))
|
|
751 (delete-file file-name))))
|
|
752
|
|
753 (add-hook 'kill-buffer-hook 'browse-url-delete-temp-file)
|
|
754
|
|
755 ;;;###autoload
|
|
756 (defun browse-url-of-dired-file ()
|
|
757 "In Dired, ask a WWW browser to display the file named on this line."
|
|
758 (interactive)
|
|
759 (browse-url-of-file (dired-get-filename)))
|
|
760
|
|
761 ;;;###autoload
|
|
762 (defun browse-url-of-region (min max)
|
|
763 "Ask a WWW browser to display the current region."
|
|
764 (interactive "r")
|
|
765 (save-excursion
|
|
766 (save-restriction
|
|
767 (narrow-to-region min max)
|
|
768 (browse-url-of-buffer))))
|
|
769
|
|
770 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
771 ;; Browser-independent commands
|
|
772
|
|
773 ;; A generic command to call the current browse-url-browser-function
|
|
774
|
|
775 ;;;###autoload
|
|
776 (defun browse-url (url &rest args)
|
|
777 "Ask a WWW browser to load URL.
|
|
778 Prompts for a URL, defaulting to the URL at or before point. Variable
|
|
779 `browse-url-browser-function' says which browser to use."
|
|
780 (interactive (browse-url-interactive-arg "URL: "))
|
105372
|
781 (unless (called-interactively-p 'interactive)
|
37378
|
782 (setq args (or args (list browse-url-new-window-flag))))
|
74483
|
783 (let ((process-environment (copy-sequence process-environment)))
|
|
784 ;; When connected to various displays, be careful to use the display of
|
|
785 ;; the currently selected frame, rather than the original start display,
|
|
786 ;; which may not even exist any more.
|
|
787 (if (stringp (frame-parameter (selected-frame) 'display))
|
|
788 (setenv "DISPLAY" (frame-parameter (selected-frame) 'display)))
|
105667
|
789 (if (and (consp browse-url-browser-function)
|
|
790 (not (functionp browse-url-browser-function)))
|
|
791 ;; The `function' can be an alist; look down it for first match
|
|
792 ;; and apply the function (which might be a lambda).
|
|
793 (catch 'done
|
|
794 (dolist (bf browse-url-browser-function)
|
|
795 (when (string-match (car bf) url)
|
|
796 (apply (cdr bf) url args)
|
|
797 (throw 'done t)))
|
|
798 (error "No browse-url-browser-function matching URL %s"
|
|
799 url))
|
|
800 ;; Unbound symbols go down this leg, since void-function from
|
|
801 ;; apply is clearer than wrong-type-argument from dolist.
|
|
802 (apply browse-url-browser-function url args))))
|
28210
|
803
|
|
804 ;;;###autoload
|
28274
|
805 (defun browse-url-at-point (&optional arg)
|
28210
|
806 "Ask a WWW browser to load the URL at or before point.
|
|
807 Doesn't let you edit the URL like `browse-url'. Variable
|
|
808 `browse-url-browser-function' says which browser to use."
|
28274
|
809 (interactive "P")
|
30798
|
810 (let ((url (browse-url-url-at-point)))
|
|
811 (if url
|
|
812 (browse-url url (if arg
|
37378
|
813 (not browse-url-new-window-flag)
|
|
814 browse-url-new-window-flag))
|
30798
|
815 (error "No URL found"))))
|
28210
|
816
|
|
817 ;;;###autoload
|
|
818 (defun browse-url-at-mouse (event)
|
|
819 "Ask a WWW browser to load a URL clicked with the mouse.
|
|
820 The URL is the one around or before the position of the mouse click
|
|
821 but point is not changed. Doesn't let you edit the URL like
|
|
822 `browse-url'. Variable `browse-url-browser-function' says which browser
|
|
823 to use."
|
|
824 (interactive "e")
|
|
825 (save-excursion
|
30798
|
826 (mouse-set-point event)
|
45943
b699a283b3fa
(browse-url-at-mouse): Don't pass an arg to browse-url-at-point.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
827 ;; This handles browse-url-new-window-flag properly
|
b699a283b3fa
(browse-url-at-mouse): Don't pass an arg to browse-url-at-point.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
828 ;; when it gets no arg.
|
b699a283b3fa
(browse-url-at-mouse): Don't pass an arg to browse-url-at-point.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
829 (browse-url-at-point)))
|
28210
|
830
|
|
831 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
832 ;; Browser-specific commands
|
|
833
|
|
834 ;; --- Default MS-Windows browser ---
|
|
835
|
63946
|
836 (defvar dos-windows-version)
|
86289
|
837 (declare-function w32-shell-execute "w32fns.c") ;; Defined in C.
|
63946
|
838
|
28210
|
839 (defun browse-url-default-windows-browser (url &optional new-window)
|
|
840 (interactive (browse-url-interactive-arg "URL: "))
|
106176
64f03bed7d67
* net/browse-url.el (browse-url-default-windows-browser): Use
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
841 (cond ((eq system-type 'ms-dos)
|
64f03bed7d67
* net/browse-url.el (browse-url-default-windows-browser): Use
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
842 (if dos-windows-version
|
64f03bed7d67
* net/browse-url.el (browse-url-default-windows-browser): Use
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
843 (shell-command (concat "start " (shell-quote-argument url)))
|
64f03bed7d67
* net/browse-url.el (browse-url-default-windows-browser): Use
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
844 (error "Browsing URLs is not supported on this system")))
|
64f03bed7d67
* net/browse-url.el (browse-url-default-windows-browser): Use
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
845 ((eq system-type 'cygwin)
|
106208
c89e7ab6a9d6
* net/browse-url.el (browse-url-filename-alist): On Windows, add
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
846 (call-process "cygstart" nil nil nil url))
|
106176
64f03bed7d67
* net/browse-url.el (browse-url-default-windows-browser): Use
Chong Yidong <cyd@stupidchicken.com>
diff
changeset
|
847 (t (w32-shell-execute "open" url))))
|
28210
|
848
|
50574
|
849 (defun browse-url-default-macosx-browser (url &optional new-window)
|
|
850 (interactive (browse-url-interactive-arg "URL: "))
|
|
851 (start-process (concat "open " url) nil "open" url))
|
|
852
|
28210
|
853 ;; --- Netscape ---
|
|
854
|
|
855 (defun browse-url-process-environment ()
|
41282
|
856 "Set DISPLAY in the environment to the X display the browser will use.
|
|
857 This is either the value of variable `browse-url-browser-display' if
|
28210
|
858 non-nil, or the same display as Emacs if different from the current
|
|
859 environment, otherwise just use the current environment."
|
41282
|
860 (let ((display (or browse-url-browser-display (browse-url-emacs-display))))
|
28210
|
861 (if display
|
|
862 (cons (concat "DISPLAY=" display) process-environment)
|
|
863 process-environment)))
|
|
864
|
|
865 (defun browse-url-emacs-display ()
|
|
866 "Return the X display Emacs is running on.
|
|
867 This is nil if the display is the same as the DISPLAY environment variable.
|
|
868
|
|
869 Actually Emacs could be using several displays; this just returns the
|
|
870 one showing the selected frame."
|
|
871 (let ((display (cdr-safe (assq 'display (frame-parameters)))))
|
|
872 (and (not (equal display (getenv "DISPLAY")))
|
|
873 display)))
|
|
874
|
|
875 ;;;###autoload
|
41282
|
876 (defun browse-url-default-browser (url &rest args)
|
|
877 "Find a suitable browser and ask it to load URL.
|
|
878 Default to the URL around or before point.
|
|
879
|
|
880 When called interactively, if variable `browse-url-new-window-flag' is
|
|
881 non-nil, load the document in a new window, if possible, otherwise use
|
|
882 a random existing one. A non-nil interactive prefix argument reverses
|
|
883 the effect of `browse-url-new-window-flag'.
|
|
884
|
|
885 When called non-interactively, optional second argument NEW-WINDOW is
|
|
886 used instead of `browse-url-new-window-flag'.
|
|
887
|
63572
|
888 The order attempted is gnome-moz-remote, Mozilla, Firefox,
|
79228
|
889 Galeon, Konqueror, Netscape, Mosaic, Lynx in an xterm, and then W3."
|
41282
|
890 (apply
|
84623
|
891 (cond
|
|
892 ((executable-find browse-url-gnome-moz-program) 'browse-url-gnome-moz)
|
|
893 ((executable-find browse-url-mozilla-program) 'browse-url-mozilla)
|
|
894 ((executable-find browse-url-firefox-program) 'browse-url-firefox)
|
|
895 ((executable-find browse-url-galeon-program) 'browse-url-galeon)
|
|
896 ((executable-find browse-url-kde-program) 'browse-url-kde)
|
|
897 ((executable-find browse-url-netscape-program) 'browse-url-netscape)
|
|
898 ((executable-find browse-url-mosaic-program) 'browse-url-mosaic)
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
899 ((executable-find browse-url-xterm-program) 'browse-url-text-xterm)
|
84623
|
900 ((locate-library "w3") 'browse-url-w3)
|
|
901 (t
|
96547
75ac143d2aa1
* net/browse-url.el (browse-url-default-browser): Fix argument list in lambda.
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
902 (lambda (&rest ignore) (error "No usable browser found"))))
|
84623
|
903 url args))
|
41282
|
904
|
|
905 ;;;###autoload
|
28210
|
906 (defun browse-url-netscape (url &optional new-window)
|
|
907 "Ask the Netscape WWW browser to load URL.
|
|
908 Default to the URL around or before point. The strings in variable
|
|
909 `browse-url-netscape-arguments' are also passed to Netscape.
|
|
910
|
37378
|
911 When called interactively, if variable `browse-url-new-window-flag' is
|
28210
|
912 non-nil, load the document in a new Netscape window, otherwise use a
|
|
913 random existing one. A non-nil interactive prefix argument reverses
|
37378
|
914 the effect of `browse-url-new-window-flag'.
|
28210
|
915
|
60208
|
916 If `browse-url-netscape-new-window-is-tab' is non-nil, then
|
|
917 whenever a document would otherwise be loaded in a new window, it
|
|
918 is loaded in a new tab in an existing window instead.
|
|
919
|
28210
|
920 When called non-interactively, optional second argument NEW-WINDOW is
|
37378
|
921 used instead of `browse-url-new-window-flag'."
|
32245
|
922 (interactive (browse-url-interactive-arg "URL: "))
|
84361
|
923 (setq url (browse-url-encode-url url))
|
28210
|
924 (let* ((process-environment (browse-url-process-environment))
|
60208
|
925 (process
|
|
926 (apply 'start-process
|
|
927 (concat "netscape " url) nil
|
|
928 browse-url-netscape-program
|
|
929 (append
|
|
930 browse-url-netscape-arguments
|
|
931 (if (eq window-system 'w32)
|
|
932 (list url)
|
|
933 (append
|
|
934 (if new-window '("-noraise"))
|
|
935 (list "-remote"
|
|
936 (concat "openURL(" url
|
|
937 (if (browse-url-maybe-new-window
|
|
938 new-window)
|
|
939 (if browse-url-netscape-new-window-is-tab
|
|
940 ",new-tab"
|
|
941 ",new-window"))
|
|
942 ")"))))))))
|
28210
|
943 (set-process-sentinel process
|
30798
|
944 `(lambda (process change)
|
|
945 (browse-url-netscape-sentinel process ,url)))))
|
28210
|
946
|
|
947 (defun browse-url-netscape-sentinel (process url)
|
|
948 "Handle a change to the process communicating with Netscape."
|
|
949 (or (eq (process-exit-status process) 0)
|
|
950 (let* ((process-environment (browse-url-process-environment)))
|
|
951 ;; Netscape not running - start it
|
55197
|
952 (message "Starting %s..." browse-url-netscape-program)
|
28210
|
953 (apply 'start-process (concat "netscape" url) nil
|
|
954 browse-url-netscape-program
|
|
955 (append browse-url-netscape-startup-arguments (list url))))))
|
|
956
|
|
957 (defun browse-url-netscape-reload ()
|
|
958 "Ask Netscape to reload its current document.
|
|
959 How depends on `browse-url-netscape-version'."
|
|
960 (interactive)
|
|
961 ;; Backwards incompatibility reported by
|
|
962 ;; <peter.kruse@psychologie.uni-regensburg.de>.
|
|
963 (browse-url-netscape-send (if (>= browse-url-netscape-version 4)
|
|
964 "xfeDoCommand(reload)"
|
84623
|
965 "reload")))
|
28210
|
966
|
|
967 (defun browse-url-netscape-send (command)
|
|
968 "Send a remote control command to Netscape."
|
|
969 (let* ((process-environment (browse-url-process-environment)))
|
|
970 (apply 'start-process "netscape" nil
|
|
971 browse-url-netscape-program
|
|
972 (append browse-url-netscape-arguments
|
|
973 (list "-remote" command)))))
|
|
974
|
41282
|
975 ;;;###autoload
|
|
976 (defun browse-url-mozilla (url &optional new-window)
|
|
977 "Ask the Mozilla WWW browser to load URL.
|
|
978 Default to the URL around or before point. The strings in variable
|
|
979 `browse-url-mozilla-arguments' are also passed to Mozilla.
|
|
980
|
|
981 When called interactively, if variable `browse-url-new-window-flag' is
|
|
982 non-nil, load the document in a new Mozilla window, otherwise use a
|
|
983 random existing one. A non-nil interactive prefix argument reverses
|
|
984 the effect of `browse-url-new-window-flag'.
|
|
985
|
47844
|
986 If `browse-url-mozilla-new-window-is-tab' is non-nil, then whenever a
|
|
987 document would otherwise be loaded in a new window, it is loaded in a
|
|
988 new tab in an existing window instead.
|
|
989
|
41282
|
990 When called non-interactively, optional second argument NEW-WINDOW is
|
|
991 used instead of `browse-url-new-window-flag'."
|
|
992 (interactive (browse-url-interactive-arg "URL: "))
|
84361
|
993 (setq url (browse-url-encode-url url))
|
41282
|
994 (let* ((process-environment (browse-url-process-environment))
|
47844
|
995 (process
|
|
996 (apply 'start-process
|
|
997 (concat "mozilla " url) nil
|
|
998 browse-url-mozilla-program
|
|
999 (append
|
|
1000 browse-url-mozilla-arguments
|
|
1001 (list "-remote"
|
|
1002 (concat "openURL("
|
|
1003 url
|
|
1004 (if (browse-url-maybe-new-window
|
|
1005 new-window)
|
|
1006 (if browse-url-mozilla-new-window-is-tab
|
51286
cd10528c7910
(browse-url-mozilla): Correct the conditionals for using ,new-window.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1007 ",new-tab"
|
cd10528c7910
(browse-url-mozilla): Correct the conditionals for using ,new-window.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1008 ",new-window"))
|
47844
|
1009 ")"))))))
|
41282
|
1010 (set-process-sentinel process
|
|
1011 `(lambda (process change)
|
|
1012 (browse-url-mozilla-sentinel process ,url)))))
|
|
1013
|
|
1014 (defun browse-url-mozilla-sentinel (process url)
|
|
1015 "Handle a change to the process communicating with Mozilla."
|
|
1016 (or (eq (process-exit-status process) 0)
|
|
1017 (let* ((process-environment (browse-url-process-environment)))
|
|
1018 ;; Mozilla is not running - start it
|
55197
|
1019 (message "Starting %s..." browse-url-mozilla-program)
|
41282
|
1020 (apply 'start-process (concat "mozilla " url) nil
|
|
1021 browse-url-mozilla-program
|
|
1022 (append browse-url-mozilla-startup-arguments (list url))))))
|
|
1023
|
|
1024 ;;;###autoload
|
63572
|
1025 (defun browse-url-firefox (url &optional new-window)
|
|
1026 "Ask the Firefox WWW browser to load URL.
|
|
1027 Default to the URL around or before point. The strings in
|
|
1028 variable `browse-url-firefox-arguments' are also passed to
|
|
1029 Firefox.
|
|
1030
|
|
1031 When called interactively, if variable
|
|
1032 `browse-url-new-window-flag' is non-nil, load the document in a
|
|
1033 new Firefox window, otherwise use a random existing one. A
|
|
1034 non-nil interactive prefix argument reverses the effect of
|
|
1035 `browse-url-new-window-flag'.
|
|
1036
|
|
1037 If `browse-url-firefox-new-window-is-tab' is non-nil, then
|
|
1038 whenever a document would otherwise be loaded in a new window, it
|
|
1039 is loaded in a new tab in an existing window instead.
|
|
1040
|
|
1041 When called non-interactively, optional second argument
|
|
1042 NEW-WINDOW is used instead of `browse-url-new-window-flag'.
|
|
1043
|
|
1044 On MS-Windows systems the optional `new-window' parameter is
|
|
1045 ignored. Firefox for Windows does not support the \"-remote\"
|
|
1046 command line parameter. Therefore, the
|
|
1047 `browse-url-new-window-flag' and `browse-url-firefox-new-window-is-tab'
|
|
1048 are ignored as well. Firefox on Windows will always open the requested
|
|
1049 URL in a new window."
|
|
1050 (interactive (browse-url-interactive-arg "URL: "))
|
84361
|
1051 (setq url (browse-url-encode-url url))
|
63572
|
1052 (let* ((process-environment (browse-url-process-environment))
|
|
1053 (process
|
|
1054 (apply 'start-process
|
|
1055 (concat "firefox " url) nil
|
|
1056 browse-url-firefox-program
|
|
1057 (append
|
|
1058 browse-url-firefox-arguments
|
|
1059 (if (or (featurep 'dos-w32)
|
|
1060 (string-match "win32" system-configuration))
|
|
1061 (list url)
|
|
1062 (list "-remote"
|
|
1063 (concat "openURL("
|
|
1064 url
|
|
1065 (if (browse-url-maybe-new-window
|
|
1066 new-window)
|
|
1067 (if browse-url-firefox-new-window-is-tab
|
|
1068 ",new-tab"
|
|
1069 ",new-window"))
|
|
1070 ")")))))))
|
|
1071 (set-process-sentinel process
|
|
1072 `(lambda (process change)
|
|
1073 (browse-url-firefox-sentinel process ,url)))))
|
|
1074
|
|
1075 (defun browse-url-firefox-sentinel (process url)
|
|
1076 "Handle a change to the process communicating with Firefox."
|
|
1077 (or (eq (process-exit-status process) 0)
|
|
1078 (let* ((process-environment (browse-url-process-environment)))
|
|
1079 ;; Firefox is not running - start it
|
|
1080 (message "Starting Firefox...")
|
|
1081 (apply 'start-process (concat "firefox " url) nil
|
|
1082 browse-url-firefox-program
|
|
1083 (append browse-url-firefox-startup-arguments (list url))))))
|
|
1084
|
|
1085 ;;;###autoload
|
41282
|
1086 (defun browse-url-galeon (url &optional new-window)
|
|
1087 "Ask the Galeon WWW browser to load URL.
|
|
1088 Default to the URL around or before point. The strings in variable
|
|
1089 `browse-url-galeon-arguments' are also passed to Galeon.
|
|
1090
|
|
1091 When called interactively, if variable `browse-url-new-window-flag' is
|
|
1092 non-nil, load the document in a new Galeon window, otherwise use a
|
|
1093 random existing one. A non-nil interactive prefix argument reverses
|
|
1094 the effect of `browse-url-new-window-flag'.
|
|
1095
|
43778
21f583da1eac
(browse-url-galeon): Specify --existing for an existing window.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1096 If `browse-url-galeon-new-window-is-tab' is non-nil, then whenever a
|
21f583da1eac
(browse-url-galeon): Specify --existing for an existing window.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1097 document would otherwise be loaded in a new window, it is loaded in a
|
21f583da1eac
(browse-url-galeon): Specify --existing for an existing window.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1098 new tab in an existing window instead.
|
21f583da1eac
(browse-url-galeon): Specify --existing for an existing window.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1099
|
41282
|
1100 When called non-interactively, optional second argument NEW-WINDOW is
|
|
1101 used instead of `browse-url-new-window-flag'."
|
|
1102 (interactive (browse-url-interactive-arg "URL: "))
|
84398
|
1103 (setq url (browse-url-encode-url url))
|
41282
|
1104 (let* ((process-environment (browse-url-process-environment))
|
|
1105 (process (apply 'start-process
|
51798
|
1106 (concat "galeon " url)
|
|
1107 nil
|
41282
|
1108 browse-url-galeon-program
|
|
1109 (append
|
|
1110 browse-url-galeon-arguments
|
41460
|
1111 (if (browse-url-maybe-new-window new-window)
|
|
1112 (if browse-url-galeon-new-window-is-tab
|
|
1113 '("--new-tab")
|
43778
21f583da1eac
(browse-url-galeon): Specify --existing for an existing window.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1114 '("--new-window" "--noraise"))
|
21f583da1eac
(browse-url-galeon): Specify --existing for an existing window.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1115 '("--existing"))
|
21f583da1eac
(browse-url-galeon): Specify --existing for an existing window.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1116 (list url)))))
|
41282
|
1117 (set-process-sentinel process
|
|
1118 `(lambda (process change)
|
|
1119 (browse-url-galeon-sentinel process ,url)))))
|
|
1120
|
|
1121 (defun browse-url-galeon-sentinel (process url)
|
|
1122 "Handle a change to the process communicating with Galeon."
|
|
1123 (or (eq (process-exit-status process) 0)
|
|
1124 (let* ((process-environment (browse-url-process-environment)))
|
|
1125 ;; Galeon is not running - start it
|
55197
|
1126 (message "Starting %s..." browse-url-galeon-program)
|
41282
|
1127 (apply 'start-process (concat "galeon " url) nil
|
|
1128 browse-url-galeon-program
|
|
1129 (append browse-url-galeon-startup-arguments (list url))))))
|
|
1130
|
51798
|
1131 (defun browse-url-epiphany (url &optional new-window)
|
|
1132 "Ask the Epiphany WWW browser to load URL.
|
|
1133 Default to the URL around or before point. The strings in variable
|
|
1134 `browse-url-galeon-arguments' are also passed to Epiphany.
|
|
1135
|
|
1136 When called interactively, if variable `browse-url-new-window-flag' is
|
|
1137 non-nil, load the document in a new Epiphany window, otherwise use a
|
|
1138 random existing one. A non-nil interactive prefix argument reverses
|
|
1139 the effect of `browse-url-new-window-flag'.
|
|
1140
|
52096
|
1141 If `browse-url-epiphany-new-window-is-tab' is non-nil, then whenever a
|
51798
|
1142 document would otherwise be loaded in a new window, it is loaded in a
|
|
1143 new tab in an existing window instead.
|
|
1144
|
|
1145 When called non-interactively, optional second argument NEW-WINDOW is
|
|
1146 used instead of `browse-url-new-window-flag'."
|
|
1147 (interactive (browse-url-interactive-arg "URL: "))
|
84361
|
1148 (setq url (browse-url-encode-url url))
|
51798
|
1149 (let* ((process-environment (browse-url-process-environment))
|
|
1150 (process (apply 'start-process
|
|
1151 (concat "epiphany " url)
|
|
1152 nil
|
|
1153 browse-url-epiphany-program
|
|
1154 (append
|
|
1155 browse-url-epiphany-arguments
|
|
1156 (if (browse-url-maybe-new-window new-window)
|
|
1157 (if browse-url-epiphany-new-window-is-tab
|
|
1158 '("--new-tab")
|
|
1159 '("--new-window" "--noraise"))
|
|
1160 '("--existing"))
|
|
1161 (list url)))))
|
|
1162 (set-process-sentinel process
|
|
1163 `(lambda (process change)
|
|
1164 (browse-url-epiphany-sentinel process ,url)))))
|
|
1165
|
|
1166 (defun browse-url-epiphany-sentinel (process url)
|
|
1167 "Handle a change to the process communicating with Epiphany."
|
|
1168 (or (eq (process-exit-status process) 0)
|
|
1169 (let* ((process-environment (browse-url-process-environment)))
|
|
1170 ;; Epiphany is not running - start it
|
55197
|
1171 (message "Starting %s..." browse-url-epiphany-program)
|
51798
|
1172 (apply 'start-process (concat "epiphany " url) nil
|
|
1173 browse-url-epiphany-program
|
|
1174 (append browse-url-epiphany-startup-arguments (list url))))))
|
|
1175
|
85686
|
1176 (defvar url-handler-regexp)
|
|
1177
|
32246
|
1178 ;;;###autoload
|
78620
|
1179 (defun browse-url-emacs (url &optional new-window)
|
|
1180 "Ask Emacs to load URL into a buffer and show it in another window."
|
|
1181 (interactive (browse-url-interactive-arg "URL: "))
|
|
1182 (require 'url-handlers)
|
|
1183 (let ((file-name-handler-alist
|
|
1184 (cons (cons url-handler-regexp 'url-file-handler)
|
|
1185 file-name-handler-alist)))
|
|
1186 ;; Ignore `new-window': with all other browsers the URL is always shown
|
|
1187 ;; in another window than the current Emacs one since it's shown in
|
|
1188 ;; another application's window.
|
|
1189 ;; (if new-window (find-file-other-window url) (find-file url))
|
|
1190 (find-file-other-window url)))
|
|
1191
|
|
1192 ;;;###autoload
|
32245
|
1193 (defun browse-url-gnome-moz (url &optional new-window)
|
|
1194 "Ask Mozilla/Netscape to load URL via the GNOME program `gnome-moz-remote'.
|
|
1195 Default to the URL around or before point. The strings in variable
|
|
1196 `browse-url-gnome-moz-arguments' are also passed.
|
|
1197
|
37378
|
1198 When called interactively, if variable `browse-url-new-window-flag' is
|
32245
|
1199 non-nil, load the document in a new browser window, otherwise use an
|
|
1200 existing one. A non-nil interactive prefix argument reverses the
|
37378
|
1201 effect of `browse-url-new-window-flag'.
|
32245
|
1202
|
|
1203 When called non-interactively, optional second argument NEW-WINDOW is
|
37378
|
1204 used instead of `browse-url-new-window-flag'."
|
49549
|
1205 (interactive (browse-url-interactive-arg "URL: "))
|
32245
|
1206 (apply 'start-process (concat "gnome-moz-remote " url)
|
|
1207 nil
|
50574
|
1208 browse-url-gnome-moz-program
|
32245
|
1209 (append
|
|
1210 browse-url-gnome-moz-arguments
|
|
1211 (if (browse-url-maybe-new-window new-window)
|
84623
|
1212 '("--newwin"))
|
32245
|
1213 (list "--raise" url))))
|
|
1214
|
28210
|
1215 ;; --- Mosaic ---
|
|
1216
|
|
1217 ;;;###autoload
|
|
1218 (defun browse-url-mosaic (url &optional new-window)
|
|
1219 "Ask the XMosaic WWW browser to load URL.
|
|
1220
|
|
1221 Default to the URL around or before point. The strings in variable
|
|
1222 `browse-url-mosaic-arguments' are also passed to Mosaic and the
|
|
1223 program is invoked according to the variable
|
|
1224 `browse-url-mosaic-program'.
|
|
1225
|
37378
|
1226 When called interactively, if variable `browse-url-new-window-flag' is
|
28210
|
1227 non-nil, load the document in a new Mosaic window, otherwise use a
|
|
1228 random existing one. A non-nil interactive prefix argument reverses
|
37378
|
1229 the effect of `browse-url-new-window-flag'.
|
28210
|
1230
|
|
1231 When called non-interactively, optional second argument NEW-WINDOW is
|
37378
|
1232 used instead of `browse-url-new-window-flag'."
|
28210
|
1233 (interactive (browse-url-interactive-arg "Mosaic URL: "))
|
43980
|
1234 (let ((pidfile (expand-file-name browse-url-mosaic-pidfile))
|
28210
|
1235 pid)
|
|
1236 (if (file-readable-p pidfile)
|
|
1237 (save-excursion
|
|
1238 (find-file pidfile)
|
|
1239 (goto-char (point-min))
|
|
1240 (setq pid (read (current-buffer)))
|
|
1241 (kill-buffer nil)))
|
|
1242 (if (and pid (zerop (signal-process pid 0))) ; Mosaic running
|
|
1243 (save-excursion
|
|
1244 (find-file (format "/tmp/Mosaic.%d" pid))
|
|
1245 (erase-buffer)
|
28274
|
1246 (insert (if (browse-url-maybe-new-window new-window)
|
28210
|
1247 "newwin\n"
|
|
1248 "goto\n")
|
|
1249 url "\n")
|
|
1250 (save-buffer)
|
|
1251 (kill-buffer nil)
|
|
1252 ;; Send signal SIGUSR to Mosaic
|
63626
|
1253 (message "Signaling Mosaic...")
|
50574
|
1254 (signal-process pid 'SIGUSR1)
|
28210
|
1255 ;; Or you could try:
|
|
1256 ;; (call-process "kill" nil 0 nil "-USR1" (int-to-string pid))
|
63626
|
1257 (message "Signaling Mosaic...done")
|
28210
|
1258 )
|
|
1259 ;; Mosaic not running - start it
|
55197
|
1260 (message "Starting %s..." browse-url-mosaic-program)
|
28210
|
1261 (apply 'start-process "xmosaic" nil browse-url-mosaic-program
|
|
1262 (append browse-url-mosaic-arguments (list url)))
|
55197
|
1263 (message "Starting %s...done" browse-url-mosaic-program))))
|
28210
|
1264
|
|
1265 ;; --- Mosaic using CCI ---
|
|
1266
|
|
1267 ;;;###autoload
|
|
1268 (defun browse-url-cci (url &optional new-window)
|
|
1269 "Ask the XMosaic WWW browser to load URL.
|
|
1270 Default to the URL around or before point.
|
|
1271
|
|
1272 This function only works for XMosaic version 2.5 or later. You must
|
|
1273 select `CCI' from XMosaic's File menu, set the CCI Port Address to the
|
|
1274 value of variable `browse-url-CCI-port', and enable `Accept requests'.
|
|
1275
|
37378
|
1276 When called interactively, if variable `browse-url-new-window-flag' is
|
28210
|
1277 non-nil, load the document in a new browser window, otherwise use a
|
|
1278 random existing one. A non-nil interactive prefix argument reverses
|
37378
|
1279 the effect of `browse-url-new-window-flag'.
|
28210
|
1280
|
|
1281 When called non-interactively, optional second argument NEW-WINDOW is
|
37378
|
1282 used instead of `browse-url-new-window-flag'."
|
28210
|
1283 (interactive (browse-url-interactive-arg "Mosaic URL: "))
|
|
1284 (open-network-stream "browse-url" " *browse-url*"
|
|
1285 browse-url-CCI-host browse-url-CCI-port)
|
|
1286 ;; Todo: start browser if fails
|
|
1287 (process-send-string "browse-url"
|
|
1288 (concat "get url (" url ") output "
|
28274
|
1289 (if (browse-url-maybe-new-window new-window)
|
28210
|
1290 "new"
|
|
1291 "current")
|
|
1292 "\r\n"))
|
|
1293 (process-send-string "browse-url" "disconnect\r\n")
|
|
1294 (delete-process "browse-url"))
|
|
1295
|
|
1296 ;; --- W3 ---
|
|
1297
|
86814
|
1298 ;; External.
|
|
1299 (declare-function w3-fetch-other-window "ext:w3m" (&optional url))
|
|
1300 (declare-function w3-fetch "ext:w3m" (&optional url target))
|
|
1301
|
28210
|
1302 ;;;###autoload
|
|
1303 (defun browse-url-w3 (url &optional new-window)
|
|
1304 "Ask the w3 WWW browser to load URL.
|
|
1305 Default to the URL around or before point.
|
|
1306
|
37378
|
1307 When called interactively, if variable `browse-url-new-window-flag' is
|
28210
|
1308 non-nil, load the document in a new window. A non-nil interactive
|
37378
|
1309 prefix argument reverses the effect of `browse-url-new-window-flag'.
|
28210
|
1310
|
|
1311 When called non-interactively, optional second argument NEW-WINDOW is
|
37378
|
1312 used instead of `browse-url-new-window-flag'."
|
28210
|
1313 (interactive (browse-url-interactive-arg "W3 URL: "))
|
84623
|
1314 (require 'w3) ; w3-fetch-other-window not autoloaded
|
28274
|
1315 (if (browse-url-maybe-new-window new-window)
|
28210
|
1316 (w3-fetch-other-window url)
|
|
1317 (w3-fetch url)))
|
|
1318
|
|
1319 ;;;###autoload
|
|
1320 (defun browse-url-w3-gnudoit (url &optional new-window)
|
|
1321 ;; new-window ignored
|
|
1322 "Ask another Emacs running gnuserv to load the URL using the W3 browser.
|
|
1323 The `browse-url-gnudoit-program' program is used with options given by
|
|
1324 `browse-url-gnudoit-args'. Default to the URL around or before point."
|
|
1325 (interactive (browse-url-interactive-arg "W3 URL: "))
|
84623
|
1326 (apply 'start-process (concat "gnudoit:" url) nil
|
|
1327 browse-url-gnudoit-program
|
|
1328 (append browse-url-gnudoit-args
|
|
1329 (list (concat "(w3-fetch \"" url "\")")
|
|
1330 "(raise-frame)"))))
|
28210
|
1331
|
|
1332 ;; --- Lynx in an xterm ---
|
|
1333
|
|
1334 ;;;###autoload
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1335 (defun browse-url-text-xterm (url &optional new-window)
|
28210
|
1336 ;; new-window ignored
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1337 "Ask a text browser to load URL.
|
96547
75ac143d2aa1
* net/browse-url.el (browse-url-default-browser): Fix argument list in lambda.
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1338 URL defaults to the URL around or before point.
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1339 This runs the text browser specified by `browse-url-text-browser'.
|
28210
|
1340 in an Xterm window using the Xterm program named by `browse-url-xterm-program'
|
|
1341 with possible additional arguments `browse-url-xterm-args'."
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1342 (interactive (browse-url-interactive-arg "Text browser URL: "))
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1343 (apply #'start-process `(,(concat browse-url-text-browser url)
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1344 nil ,browse-url-xterm-program
|
92877
|
1345 ,@browse-url-xterm-args "-e" ,browse-url-text-browser
|
84623
|
1346 ,url)))
|
28210
|
1347
|
|
1348 ;; --- Lynx in an Emacs "term" window ---
|
|
1349
|
|
1350 ;;;###autoload
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1351 (defun browse-url-text-emacs (url &optional new-buffer)
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1352 "Ask a text browser to load URL.
|
96547
75ac143d2aa1
* net/browse-url.el (browse-url-default-browser): Fix argument list in lambda.
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1353 URL defaults to the URL around or before point.
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1354 This runs the text browser specified by `browse-url-text-browser'.
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1355 With a prefix argument, it runs a new browser process in a new buffer.
|
28210
|
1356
|
37378
|
1357 When called interactively, if variable `browse-url-new-window-flag' is
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1358 non-nil, load the document in a new browser process in a new term window,
|
28210
|
1359 otherwise use any existing one. A non-nil interactive prefix argument
|
37378
|
1360 reverses the effect of `browse-url-new-window-flag'.
|
28210
|
1361
|
|
1362 When called non-interactively, optional second argument NEW-WINDOW is
|
37378
|
1363 used instead of `browse-url-new-window-flag'."
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1364 (interactive (browse-url-interactive-arg "Text browser URL: "))
|
84623
|
1365 (let* ((system-uses-terminfo t) ; Lynx uses terminfo
|
28210
|
1366 ;; (term-term-name "vt100") ; ??
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1367 (buf (get-buffer "*text browser*"))
|
28210
|
1368 (proc (and buf (get-buffer-process buf)))
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1369 (n browse-url-text-input-attempts))
|
28274
|
1370 (if (and (browse-url-maybe-new-window new-buffer) buf)
|
28210
|
1371 ;; Rename away the OLD buffer. This isn't very polite, but
|
|
1372 ;; term insists on working in a buffer named *lynx* and would
|
|
1373 ;; choke on *lynx*<1>
|
|
1374 (progn (set-buffer buf)
|
|
1375 (rename-uniquely)))
|
28274
|
1376 (if (or (browse-url-maybe-new-window new-buffer)
|
28210
|
1377 (not buf)
|
|
1378 (not proc)
|
|
1379 (not (memq (process-status proc) '(run stop))))
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1380 ;; start a new text browser
|
28210
|
1381 (progn
|
|
1382 (setq buf
|
|
1383 (apply #'make-term
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1384 `(,browse-url-text-browser
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1385 ,browse-url-text-browser
|
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1386 nil ,@browse-url-text-emacs-args
|
28274
|
1387 ,url)))
|
28210
|
1388 (switch-to-buffer buf)
|
|
1389 (term-char-mode)
|
|
1390 (set-process-sentinel
|
|
1391 (get-buffer-process buf)
|
|
1392 ;; Don't leave around a dead one (especially because of its
|
|
1393 ;; munged keymap.)
|
|
1394 (lambda (process event)
|
|
1395 (if (not (memq (process-status process) '(run stop)))
|
|
1396 (let ((buf (process-buffer process)))
|
|
1397 (if buf (kill-buffer buf)))))))
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1398 ;; Send the url to the text browser in the old buffer
|
28210
|
1399 (let ((win (get-buffer-window buf t)))
|
|
1400 (if win
|
|
1401 (select-window win)
|
|
1402 (switch-to-buffer buf)))
|
|
1403 (if (eq (following-char) ?_)
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1404 (cond ((eq browse-url-text-input-field 'warn)
|
38436
|
1405 (error "Please move out of the input field first"))
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1406 ((eq browse-url-text-input-field 'avoid)
|
28210
|
1407 (while (and (eq (following-char) ?_) (> n 0))
|
84623
|
1408 (term-send-down) ; down arrow
|
85759
906f71611b65
(browse-url-text-xterm): Renamed from browse-url-lynx-xterm and made generic.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1409 (sit-for browse-url-text-input-delay))
|
28210
|
1410 (if (eq (following-char) ?_)
|
38436
|
1411 (error "Cannot move out of the input field, sorry")))))
|
84623
|
1412 (term-send-string proc (concat "g" ; goto
|
28210
|
1413 "\C-u" ; kill default url
|
|
1414 url
|
|
1415 "\r")))))
|
|
1416
|
|
1417 ;; --- mailto ---
|
|
1418
|
54305
|
1419 (autoload 'rfc2368-parse-mailto-url "rfc2368")
|
|
1420
|
28210
|
1421 ;;;###autoload
|
|
1422 (defun browse-url-mail (url &optional new-window)
|
54305
|
1423 "Open a new mail message buffer within Emacs for the RFC 2368 URL.
|
28210
|
1424 Default to using the mailto: URL around or before point as the
|
|
1425 recipient's address. Supplying a non-nil interactive prefix argument
|
|
1426 will cause the mail to be composed in another window rather than the
|
|
1427 current one.
|
|
1428
|
37378
|
1429 When called interactively, if variable `browse-url-new-window-flag' is
|
28210
|
1430 non-nil use `compose-mail-other-window', otherwise `compose-mail'. A
|
|
1431 non-nil interactive prefix argument reverses the effect of
|
37378
|
1432 `browse-url-new-window-flag'.
|
28210
|
1433
|
|
1434 When called non-interactively, optional second argument NEW-WINDOW is
|
37378
|
1435 used instead of `browse-url-new-window-flag'."
|
28210
|
1436 (interactive (browse-url-interactive-arg "Mailto URL: "))
|
|
1437 (save-excursion
|
54305
|
1438 (let* ((alist (rfc2368-parse-mailto-url url))
|
|
1439 (to (assoc "To" alist))
|
|
1440 (subject (assoc "Subject" alist))
|
|
1441 (body (assoc "Body" alist))
|
|
1442 (rest (delete to (delete subject (delete body alist))))
|
|
1443 (to (cdr to))
|
|
1444 (subject (cdr subject))
|
|
1445 (body (cdr body))
|
|
1446 (mail-citation-hook (unless body mail-citation-hook)))
|
28274
|
1447 (if (browse-url-maybe-new-window new-window)
|
54305
|
1448 (compose-mail-other-window to subject rest nil
|
|
1449 (if body
|
|
1450 (list 'insert body)
|
|
1451 (list 'insert-buffer (current-buffer))))
|
|
1452 (compose-mail to subject rest nil nil
|
|
1453 (if body
|
|
1454 (list 'insert body)
|
|
1455 (list 'insert-buffer (current-buffer))))))))
|
28210
|
1456
|
|
1457 ;; --- Random browser ---
|
|
1458
|
|
1459 ;;;###autoload
|
|
1460 (defun browse-url-generic (url &optional new-window)
|
|
1461 ;; new-window ignored
|
|
1462 "Ask the WWW browser defined by `browse-url-generic-program' to load URL.
|
|
1463 Default to the URL around or before point. A fresh copy of the
|
|
1464 browser is started up in a new process with possible additional arguments
|
|
1465 `browse-url-generic-args'. This is appropriate for browsers which
|
|
1466 don't offer a form of remote control."
|
|
1467 (interactive (browse-url-interactive-arg "URL: "))
|
|
1468 (if (not browse-url-generic-program)
|
84623
|
1469 (error "No browser defined (`browse-url-generic-program')"))
|
54681
|
1470 (apply 'call-process browse-url-generic-program nil
|
|
1471 0 nil
|
28210
|
1472 (append browse-url-generic-args (list url))))
|
|
1473
|
37803
|
1474 ;;;###autoload
|
|
1475 (defun browse-url-kde (url &optional new-window)
|
|
1476 "Ask the KDE WWW browser to load URL.
|
|
1477 Default to the URL around or before point."
|
|
1478 (interactive (browse-url-interactive-arg "KDE URL: "))
|
|
1479 (message "Sending URL to KDE...")
|
50574
|
1480 (apply #'start-process (concat "KDE " url) nil browse-url-kde-program
|
84623
|
1481 (append browse-url-kde-args (list url))))
|
37803
|
1482
|
84650
|
1483 (defun browse-url-elinks-new-window (url)
|
|
1484 "Ask the Elinks WWW browser to load URL in a new window."
|
96547
75ac143d2aa1
* net/browse-url.el (browse-url-default-browser): Fix argument list in lambda.
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
1485 (let ((process-environment (browse-url-process-environment)))
|
84650
|
1486 (apply #'start-process
|
|
1487 (append (list (concat "elinks:" url)
|
|
1488 nil)
|
|
1489 browse-url-elinks-wrapper
|
|
1490 (list "elinks" url)))))
|
|
1491
|
84361
|
1492 ;;;###autoload
|
84650
|
1493 (defun browse-url-elinks (url &optional new-window)
|
84361
|
1494 "Ask the Elinks WWW browser to load URL.
|
|
1495 Default to the URL around the point.
|
|
1496
|
|
1497 The document is loaded in a new tab of a running Elinks or, if
|
|
1498 none yet running, a newly started instance.
|
|
1499
|
|
1500 The Elinks command will be prepended by the program+arguments
|
84650
|
1501 from `browse-url-elinks-wrapper'."
|
84361
|
1502 (interactive (browse-url-interactive-arg "URL: "))
|
|
1503 (setq url (browse-url-encode-url url))
|
84650
|
1504 (if new-window
|
|
1505 (browse-url-elinks-new-window url)
|
|
1506 (let ((process-environment (browse-url-process-environment))
|
|
1507 (elinks-ping-process (start-process "elinks-ping" nil
|
|
1508 "elinks" "-remote" "ping()")))
|
|
1509 (set-process-sentinel elinks-ping-process
|
|
1510 `(lambda (process change)
|
|
1511 (browse-url-elinks-sentinel process ,url))))))
|
84361
|
1512
|
|
1513 (defun browse-url-elinks-sentinel (process url)
|
|
1514 "Determines if Elinks is running or a new one has to be started."
|
84650
|
1515 (let ((exit-status (process-exit-status process)))
|
84361
|
1516 ;; Try to determine if an instance is running or if we have to
|
|
1517 ;; create a new one.
|
|
1518 (case exit-status
|
84623
|
1519 (5
|
|
1520 ;; No instance, start a new one.
|
84650
|
1521 (browse-url-elinks-new-window url))
|
84623
|
1522 (0
|
|
1523 ;; Found an instance, open URL in new tab.
|
84650
|
1524 (let ((process-environment (browse-url-process-environment)))
|
|
1525 (start-process (concat "elinks:" url) nil
|
|
1526 "elinks" "-remote"
|
|
1527 (concat "openURL(\"" url "\",new-tab)"))))
|
84623
|
1528 (otherwise
|
84650
|
1529 (error "Unrecognized exit-code %d of process `elinks'"
|
|
1530 exit-status)))))
|
37803
|
1531
|
28210
|
1532 (provide 'browse-url)
|
|
1533
|
78620
|
1534 ;; arch-tag: d2079573-5c06-4097-9598-f550fba19430
|
28210
|
1535 ;;; browse-url.el ends here
|