]> git.eshelyaron.com Git - emacs.git/commitdiff
lisp/gnus/eww.el (eww): Prepend urls with http:// if scheme is missing
authorGnus developers <ding@gnus.org.noreply>
Thu, 13 Jun 2013 06:07:43 +0000 (06:07 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Thu, 13 Jun 2013 06:07:43 +0000 (06:07 +0000)
(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

lisp/gnus/ChangeLog
lisp/gnus/eww.el

index ce809ed468f95731592b5819266af4cbfe2fda8b..ff086ebffda0f027d4bf61ec66ae68673955e6aa 100644 (file)
@@ -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
index 3e799732ecb4747cd9c85b03bba97631afa07f25..3f0399ed2581c54dff7e17d1e2fe4425631021e6 100644 (file)
 (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 "\\([^:]+\\): *\\(.*\\)")
     ;;(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))