From: Gnus developers Date: Thu, 13 Jun 2013 06:07:43 +0000 (+0000) Subject: lisp/gnus/eww.el (eww): Prepend urls with http:// if scheme is missing X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~2016^2~135 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=d652f4d02f99bc1f5b2a32bf987678e146d1aa19;p=emacs.git 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 tag --- 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 + + * 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 + + * eww.el (eww-detect-charset): Detect charset from the tag. + 2013-06-12 Lars Magne Ingebrigtsen * 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 + "]*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))