emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r113189: Add bookmark support to eww


From: Lars Ingebrigtsen
Subject: [Emacs-diffs] trunk r113189: Add bookmark support to eww
Date: Wed, 26 Jun 2013 16:54:54 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 113189
revision-id: address@hidden
parent: address@hidden
committer: Lars Magne Ingebrigtsen <address@hidden>
branch nick: trunk
timestamp: Wed 2013-06-26 18:54:48 +0200
message:
  Add bookmark support to eww
  
  * net/eww.el (eww-mode): Undo isn't necessary in eww buffers,
  probably.
  (eww-mode-map): Add a menu bar.
  (eww-add-bookmark): New command.
  (eww-bookmark-mode): New mode and commands.
modified:
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/net/eww.el                eww.el-20130610114603-80ap3gwnw4x4m5ix-1
  lisp/url/ChangeLog             changelog-20091113204419-o5vbwnq5f7feedwu-3116
  lisp/url/url-cookie.el         
urlcookie.el-20091113204419-o5vbwnq5f7feedwu-2980
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-06-26 13:07:24 +0000
+++ b/lisp/ChangeLog    2013-06-26 16:54:48 +0000
@@ -3,6 +3,8 @@
        * net/eww.el (eww-mode): Undo isn't necessary in eww buffers,
        probably.
        (eww-mode-map): Add a menu bar.
+       (eww-add-bookmark): New command.
+       (eww-bookmark-mode): New mode and commands.
 
 2013-06-26  Glenn Morris  <address@hidden>
 

=== modified file 'lisp/net/eww.el'
--- a/lisp/net/eww.el   2013-06-26 13:07:24 +0000
+++ b/lisp/net/eww.el   2013-06-26 16:54:48 +0000
@@ -337,6 +337,11 @@
     (define-key map "w" 'eww-copy-page-url)
     (define-key map "C" 'url-cookie-list)
 
+    (define-key map "b" 'eww-add-bookmark)
+    (define-key map "B" 'eww-list-bookmarks)
+    (define-key map [(meta n)] 'eww-next-bookmark)
+    (define-key map [(meta p)] 'eww-previous-bookmark)
+
     (easy-menu-define nil map ""
       '("eww"
        ["Quit" eww-quit t]
@@ -348,6 +353,8 @@
        ["Browse with external browser" eww-browse-with-external-browser t]
        ["Download" eww-download t]
        ["Copy page URL" eww-copy-page-url t]
+       ["Add bookmark" eww-add-bookmark t]
+       ["List bookmarks" eww-copy-page-url t]
        ["List cookies" url-cookie-list t]))
     map))
 
@@ -366,6 +373,7 @@
 
 (defun eww-save-history ()
   (push (list :url eww-current-url
+             :title eww-current-title
              :point (point)
              :text (buffer-string))
        eww-history))
@@ -404,7 +412,8 @@
     (erase-buffer)
     (insert (plist-get elem :text))
     (goto-char (plist-get elem :point))
-    (setq eww-current-url (plist-get elem :url))))
+    (setq eww-current-url (plist-get elem :url)
+         eww-current-title (plist-get elem :title))))
 
 (defun eww-next-url ()
   "Go to the page marked `next'.
@@ -929,6 +938,169 @@
        (setq count (1+ count)))
       (expand-file-name file directory)))
 
+;;; Bookmarks code
+
+(defvar eww-bookmarks nil)
+
+(defun eww-add-bookmark ()
+  "Add the current page to the bookmarks."
+  (interactive)
+  (eww-read-bookmarks)
+  (dolist (bookmark eww-bookmarks)
+    (when (equal eww-current-url
+                (plist-get bookmark :url))
+      (error "Already bookmarked")))
+  (push (list :url eww-current-url
+             :title eww-current-title
+             :time (current-time-string))
+       eww-bookmarks)
+  (eww-write-bookmarks)
+  (message "Bookmarked %s (%s)" eww-current-url eww-current-title))
+
+(defun eww-write-bookmarks ()
+  (with-temp-file (expand-file-name "eww-bookmarks" user-emacs-directory)
+    (insert ";; Auto-generated file; don't edit\n")
+    (pp eww-bookmarks (current-buffer))))
+
+(defun eww-read-bookmarks ()
+  (with-temp-buffer
+    (insert-file-contents
+     (expand-file-name "eww-bookmarks" user-emacs-directory))
+    (setq eww-bookmarks (read (current-buffer)))))
+
+(defun eww-list-bookmarks ()
+  "Display the bookmarks."
+  (interactive)
+  (eww-bookmark-prepare)
+  (pop-to-buffer "*eww bookmarks*"))
+
+(defun eww-bookmark-prepare ()
+  (eww-read-bookmarks)
+  (when (null eww-bookmarks)
+    (error "No bookmarks are defined"))
+  (set-buffer (get-buffer-create "*eww bookmarks*"))
+  (eww-bookmark-mode)
+  (let ((format "%-40s %s")
+       (inhibit-read-only t)
+       start url)
+    (erase-buffer)
+    (setq header-line-format (concat " " (format format "URL" "Title")))
+    (dolist (bookmark eww-bookmarks)
+      (setq start (point))
+      (setq url (plist-get bookmark :url))
+      (when (> (length url) 40)
+       (setq url (substring url 0 40)))
+      (insert (format format url
+                     (plist-get bookmark :title))
+             "\n")
+      (put-text-property start (1+ start) 'eww-bookmark bookmark))
+    (goto-char (point-min))))
+
+(defvar eww-bookmark-kill-ring nil)
+
+(defun eww-bookmark-kill ()
+  "Kill the current bookmark."
+  (interactive)
+  (let* ((start (line-beginning-position))
+        (bookmark (get-text-property start 'eww-bookmark))
+        (inhibit-read-only t))
+    (unless bookmark
+      (error "No bookmark on the current line"))
+    (forward-line 1)
+    (push (buffer-substring start (point)) eww-bookmark-kill-ring)
+    (delete-region start (point))
+    (setq eww-bookmarks (delq bookmark eww-bookmarks))
+    (eww-write-bookmarks)))
+
+(defun eww-bookmark-yank ()
+  "Yank a previously killed bookmark to the current line."
+  (interactive)
+  (unless eww-bookmark-kill-ring
+    (error "No previously killed bookmark"))
+  (beginning-of-line)
+  (let ((inhibit-read-only t)
+       (start (point))
+       bookmark)
+    (insert (pop eww-bookmark-kill-ring))
+    (setq bookmark (get-text-property start 'eww-bookmark))
+    (if (= start (point-min))
+       (push bookmark eww-bookmarks)
+      (let ((line (count-lines start (point))))
+       (setcdr (nthcdr (1- line) eww-bookmarks)
+               (cons bookmark (nthcdr line eww-bookmarks)))))
+    (eww-write-bookmarks)))
+
+(defun eww-bookmark-quit ()
+  "Kill the current buffer."
+  (interactive)
+  (kill-buffer (current-buffer)))
+
+(defun eww-bookmark-browse ()
+  "Browse the bookmark under point in eww."
+  (interactive)
+  (let ((bookmark (get-text-property (line-beginning-position) 'eww-bookmark)))
+    (unless bookmark
+      (error "No bookmark on the current line"))
+    (delete-window)
+    (eww (plist-get bookmark :url))))
+
+(defun eww-next-bookmark ()
+  "Go to the next bookmark in the list."
+  (interactive)
+  (let ((first nil)
+       bookmark)
+    (unless (get-buffer "*eww bookmarks*")
+      (setq first t)
+      (eww-bookmark-prepare))
+    (with-current-buffer (get-buffer "*eww bookmarks*")
+      (when (and (not first)
+                (not (eobp)))
+       (forward-line 1))
+      (setq bookmark (get-text-property (line-beginning-position)
+                                       'eww-bookmark))
+      (unless bookmark
+       (error "No next bookmark")))
+    (eww-browse-url (plist-get bookmark :url))))
+
+(defun eww-previous-bookmark ()
+  "Go to the previous bookmark in the list."
+  (interactive)
+  (let ((first nil)
+       bookmark)
+    (unless (get-buffer "*eww bookmarks*")
+      (setq first t)
+      (eww-bookmark-prepare))
+    (with-current-buffer (get-buffer "*eww bookmarks*")
+      (if first
+         (goto-char (point-max))
+       (beginning-of-line))
+      ;; On the final line.
+      (when (eolp)
+       (forward-line -1))
+      (if (bobp)
+         (error "No previous bookmark")
+       (forward-line -1))
+      (setq bookmark (get-text-property (line-beginning-position)
+                                       'eww-bookmark)))
+    (eww-browse-url (plist-get bookmark :url))))
+
+(defvar eww-bookmark-mode-map
+  (let ((map (make-sparse-keymap)))
+    (suppress-keymap map)
+    (define-key map "q" 'eww-bookmark-quit)
+    (define-key map [(control k)] 'eww-bookmark-kill)
+    (define-key map [(control y)] 'eww-bookmark-yank)
+    (define-key map "\r" 'eww-bookmark-browse)
+    map))
+
+(define-derived-mode eww-bookmark-mode nil "eww bookmarks"
+  "Mode for listing bookmarks.
+
+\\{eww-bookmark-mode-map}"
+  (buffer-disable-undo)
+  (setq buffer-read-only t
+       truncate-lines t))
+
 (provide 'eww)
 
 ;;; eww.el ends here

=== modified file 'lisp/url/ChangeLog'
--- a/lisp/url/ChangeLog        2013-06-26 12:54:33 +0000
+++ b/lisp/url/ChangeLog        2013-06-26 16:54:48 +0000
@@ -2,6 +2,7 @@
 
        * url-cookie.el: Implement a command and mode for displaying and
        editing cookies.
+       (url-cookie-mode): Fix mode name.
 
 2013-06-21  Glenn Morris  <address@hidden>
 

=== modified file 'lisp/url/url-cookie.el'
--- a/lisp/url/url-cookie.el    2013-06-26 12:54:33 +0000
+++ b/lisp/url/url-cookie.el    2013-06-26 16:54:48 +0000
@@ -427,9 +427,10 @@
     (suppress-keymap map)
     (define-key map "q" 'url-cookie-quit)
     (define-key map [delete] 'url-cookie-delete)
+    (define-key map [(control k)] 'url-cookie-delete)
     map))
 
-(define-derived-mode url-cookie-mode nil "eww"
+(define-derived-mode url-cookie-mode nil "URL Cookie"
   "Mode for listing cookies.
 
 \\{url-cookie-mode-map}"


reply via email to

[Prev in Thread] Current Thread [Next in Thread]