+;;;----- URL viewing --------------------------------------------------------
+
+(defun mdw-w3m-browse-url (url &optional new-session-p)
+ "Invoke w3m on the URL in its current window, or at least a different one.
+If NEW-SESSION-P, start a new session."
+ (interactive "sURL: \nP")
+ (save-excursion
+ (select-window (or (and (not new-session-p)
+ (get-buffer-window "*w3m*"))
+ (progn
+ (if (one-window-p t) (split-window))
+ (get-lru-window))))
+ (w3m-browse-url url new-session-p)))
+
+(defvar mdw-good-url-browsers
+ '((w3m . mdw-w3m-browse-url)
+ browse-url-w3
+ browse-url-mozilla)
+ "List of good browsers for mdw-good-url-browsers; each item is a browser
+function name, or a cons (CHECK . FUNC). A symbol FOO stands for (FOO
+. FOO).")
+
+(defun mdw-good-url-browser ()
+ "Return a good URL browser. Trundle the list of such things, finding the
+first item for which CHECK is fboundp, and returning the correponding FUNC."
+ (let ((bs mdw-good-url-browsers) b check func answer)
+ (while (and bs (not answer))
+ (setq b (car bs)
+ bs (cdr bs))
+ (if (consp b)
+ (setq check (car b) func (cdr b))
+ (setq check b func b))
+ (if (fboundp check)
+ (setq answer func)))
+ answer))
+