summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-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 @@
+2013-06-13 RĂ¼diger Sonderfeld <ruediger@c-plusplus.de>
+
+ * 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.
+
+2013-06-13 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * eww.el (eww-detect-charset): Detect charset from the <meta> tag.
+
2013-06-12 Lars Magne Ingebrigtsen <larsi@gnus.org>
* 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 @@
(defun eww (url)
"Fetch URL and render the page."
(interactive "sUrl: ")
+ (unless (string-match-p "\\`[a-zA-Z][-a-zA-Z0-9+.]*://" url)
+ (setq url (concat "http://" url)))
(url-retrieve url 'eww-render (list url)))
+(defun eww-detect-charset (html-p)
+ (let ((case-fold-search t)
+ (pt (point)))
+ (or (and html-p
+ (re-search-forward
+ "<meta[\t\n\r ]+[^>]*charset=\\([^\t\n\r \"/>]+\\)" nil t)
+ (goto-char pt)
+ (match-string 1))
+ (and (looking-at
+ "[\t\n\r ]*<\\?xml[\t\n\r ]+[^>]*encoding=\"\\([^\"]+\\)")
+ (match-string 1)))))
+
(defun eww-render (status url &optional point)
(let* ((headers (eww-parse-headers))
(content-type
@@ -47,6 +61,8 @@
(charset (intern
(downcase
(or (cdr (assq 'charset (cdr content-type)))
+ (eww-detect-charset (equal (car content-type)
+ "text/html"))
"utf8"))))
(data-buffer (current-buffer)))
(unwind-protect
@@ -64,6 +80,7 @@
(defun eww-parse-headers ()
(let ((headers nil))
+ (goto-char (point-min))
(while (and (not (eobp))
(not (eolp)))
(when (looking-at "\\([^:]+\\): *\\(.*\\)")
@@ -129,17 +146,12 @@
;;(define-key map "n" 'eww-next-url)
map))
-(defun eww-mode ()
+(define-derived-mode eww-mode nil "eww"
"Mode for browsing the web.
\\{eww-mode-map}"
- (interactive)
- (setq major-mode 'eww-mode
- mode-name "eww")
(set (make-local-variable 'eww-current-url) 'author)
- (set (make-local-variable 'browse-url-browser-function) 'eww-browse-url)
- ;;(setq buffer-read-only t)
- (use-local-map eww-mode-map))
+ (set (make-local-variable 'browse-url-browser-function) 'eww-browse-url))
(defun eww-browse-url (url &optional new-window)
(push (list eww-current-url (point))