(eww-previous-url): New command.
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Mon, 10 Jun 2013 09:47:26 +0000 (11:47 +0200)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Mon, 10 Jun 2013 09:47:26 +0000 (11:47 +0200)
lisp/ChangeLog
lisp/eww.el

index 8064dcd..0bd0fe8 100644 (file)
@@ -1,6 +1,7 @@
 2013-06-10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * eww.el: Start writing a new, tiny web browser.
+       (eww-previous-url): New command.
 
 2013-06-10  Albert Krewinkel  <krewinkel@moltkeplatz.de>
 
index e23e390..b43586b 100644 (file)
 (require 'cl-lib)
 
 (defvar eww-current-url nil)
+(defvar eww-history nil)
+(defvar eww-current-page nil)
 
 (defun eww (url)
   "Fetch URL and render the page."
   (interactive "sUrl: ")
   (url-retrieve url 'eww-render (list url)))
 
-(defun eww-render (status url)
+(defun eww-render (status url &optional point)
   (let* ((headers (eww-parse-headers))
         (content-type
          (mail-header-parse-content-type
                        "utf8"))))
         (data-buffer (current-buffer)))
     (unwind-protect
-       (cond
-        ((equal (car content-type) "text/html")
-         (eww-display-html charset url))
-        ((string-match "^image/" (car content-type))
-         (eww-display-image))
-        (t
-         (eww-display-raw charset)))
+       (progn
+         (cond
+          ((equal (car content-type) "text/html")
+           (eww-display-html charset url))
+          ((string-match "^image/" (car content-type))
+           (eww-display-image))
+          (t
+           (eww-display-raw charset)))
+         (when point
+           (goto-char point)))
       (kill-buffer data-buffer))))
 
 (defun eww-parse-headers ()
 (defvar eww-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map "q" 'eww-quit)
+    (define-key map [tab] 'widget-forward)
+    (define-key map [backtab] 'widget-backward)
+    (define-key map "p" 'eww-previous-url)
+    ;;(define-key map "n" 'eww-next-url)
     map))
 
 (defun eww-mode ()
   (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)
   (use-local-map eww-mode-map))
 
+(defun eww-browse-url (url &optional new-window)
+  (push (list eww-current-url (point))
+       eww-history)
+  (eww url))
+
+(defun eww-previous-url ()
+  "Go to the previously displayed page."
+  (interactive)
+  (when (zerop (length eww-history))
+    (error "No previous page"))
+  (let ((prev (pop eww-history)))
+    (url-retrieve (car prev) 'eww-render (list (car prev) (cadr prev)))))
+
 (provide 'eww)
 
 ;;; eww.el ends here