diff options
| author | Gnus developers | 2013-06-13 06:07:43 +0000 |
|---|---|---|
| committer | Katsumi Yamaoka | 2013-06-13 06:07:43 +0000 |
| commit | d652f4d02f99bc1f5b2a32bf987678e146d1aa19 (patch) | |
| tree | 4c4f41c4b58f151ee43d63b5d2c69c76e09650d3 | |
| parent | 5755011f76526d2ab57482d796a757ecfcfbb3a8 (diff) | |
| download | emacs-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/ChangeLog | 11 | ||||
| -rw-r--r-- | lisp/gnus/eww.el | 26 |
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 @@ | |||
| 1 | 2013-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 | |||
| 8 | 2013-06-13 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 9 | |||
| 10 | * eww.el (eww-detect-charset): Detect charset from the <meta> tag. | ||
| 11 | |||
| 1 | 2013-06-12 Lars Magne Ingebrigtsen <larsi@gnus.org> | 12 | 2013-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)) |