aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGnus developers2013-06-13 06:07:43 +0000
committerKatsumi Yamaoka2013-06-13 06:07:43 +0000
commitd652f4d02f99bc1f5b2a32bf987678e146d1aa19 (patch)
tree4c4f41c4b58f151ee43d63b5d2c69c76e09650d3
parent5755011f76526d2ab57482d796a757ecfcfbb3a8 (diff)
downloademacs-d652f4d02f99bc1f5b2a32bf987678e146d1aa19.tar.gz
emacs-d652f4d02f99bc1f5b2a32bf987678e146d1aa19.zip
lisp/gnus/eww.el (eww): Prepend urls with http:// if scheme is missing
(eww-mode): Use `define-derived-mode' (eww-parse-headers): Parse headers from beginning of buffer so that file:// links work (eww-detect-charset): Detect charset from the <meta> tag
-rw-r--r--lisp/gnus/ChangeLog11
-rw-r--r--lisp/gnus/eww.el26
2 files changed, 30 insertions, 7 deletions
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index ce809ed468f..ff086ebffda 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,14 @@
12013-06-13 RĂ¼diger Sonderfeld <ruediger@c-plusplus.de>
2
3 * eww.el (eww): Prepend urls with http:// if scheme is missing.
4 (eww-mode): Use `define-derived-mode'.
5 (eww-parse-headers): Parse headers from beginning of buffer so that
6 file:// links work.
7
82013-06-13 Katsumi Yamaoka <yamaoka@jpl.org>
9
10 * eww.el (eww-detect-charset): Detect charset from the <meta> tag.
11
12013-06-12 Lars Magne Ingebrigtsen <larsi@gnus.org> 122013-06-12 Lars Magne Ingebrigtsen <larsi@gnus.org>
2 13
3 * shr.el (shr-tag-svg): Ignore SVG elements, because we don't know how 14 * shr.el (shr-tag-svg): Ignore SVG elements, because we don't know how
diff --git a/lisp/gnus/eww.el b/lisp/gnus/eww.el
index 3e799732ecb..3f0399ed258 100644
--- a/lisp/gnus/eww.el
+++ b/lisp/gnus/eww.el
@@ -36,8 +36,22 @@
36(defun eww (url) 36(defun eww (url)
37 "Fetch URL and render the page." 37 "Fetch URL and render the page."
38 (interactive "sUrl: ") 38 (interactive "sUrl: ")
39 (unless (string-match-p "\\`[a-zA-Z][-a-zA-Z0-9+.]*://" url)
40 (setq url (concat "http://" url)))
39 (url-retrieve url 'eww-render (list url))) 41 (url-retrieve url 'eww-render (list url)))
40 42
43(defun eww-detect-charset (html-p)
44 (let ((case-fold-search t)
45 (pt (point)))
46 (or (and html-p
47 (re-search-forward
48 "<meta[\t\n\r ]+[^>]*charset=\\([^\t\n\r \"/>]+\\)" nil t)
49 (goto-char pt)
50 (match-string 1))
51 (and (looking-at
52 "[\t\n\r ]*<\\?xml[\t\n\r ]+[^>]*encoding=\"\\([^\"]+\\)")
53 (match-string 1)))))
54
41(defun eww-render (status url &optional point) 55(defun eww-render (status url &optional point)
42 (let* ((headers (eww-parse-headers)) 56 (let* ((headers (eww-parse-headers))
43 (content-type 57 (content-type
@@ -47,6 +61,8 @@
47 (charset (intern 61 (charset (intern
48 (downcase 62 (downcase
49 (or (cdr (assq 'charset (cdr content-type))) 63 (or (cdr (assq 'charset (cdr content-type)))
64 (eww-detect-charset (equal (car content-type)
65 "text/html"))
50 "utf8")))) 66 "utf8"))))
51 (data-buffer (current-buffer))) 67 (data-buffer (current-buffer)))
52 (unwind-protect 68 (unwind-protect
@@ -64,6 +80,7 @@
64 80
65(defun eww-parse-headers () 81(defun eww-parse-headers ()
66 (let ((headers nil)) 82 (let ((headers nil))
83 (goto-char (point-min))
67 (while (and (not (eobp)) 84 (while (and (not (eobp))
68 (not (eolp))) 85 (not (eolp)))
69 (when (looking-at "\\([^:]+\\): *\\(.*\\)") 86 (when (looking-at "\\([^:]+\\): *\\(.*\\)")
@@ -129,17 +146,12 @@
129 ;;(define-key map "n" 'eww-next-url) 146 ;;(define-key map "n" 'eww-next-url)
130 map)) 147 map))
131 148
132(defun eww-mode () 149(define-derived-mode eww-mode nil "eww"
133 "Mode for browsing the web. 150 "Mode for browsing the web.
134 151
135\\{eww-mode-map}" 152\\{eww-mode-map}"
136 (interactive)
137 (setq major-mode 'eww-mode
138 mode-name "eww")
139 (set (make-local-variable 'eww-current-url) 'author) 153 (set (make-local-variable 'eww-current-url) 'author)
140 (set (make-local-variable 'browse-url-browser-function) 'eww-browse-url) 154 (set (make-local-variable 'browse-url-browser-function) 'eww-browse-url))
141 ;;(setq buffer-read-only t)
142 (use-local-map eww-mode-map))
143 155
144(defun eww-browse-url (url &optional new-window) 156(defun eww-browse-url (url &optional new-window)
145 (push (list eww-current-url (point)) 157 (push (list eww-current-url (point))