aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Kotlarski2014-12-08 19:29:06 +0100
committerLars Magne Ingebrigtsen2014-12-08 19:29:06 +0100
commite40e63033bf7b961938c54b330137bc6bab08efe (patch)
treecee34975e46e5b0b6caa3d929838d2c6a230f1a2
parente63c720b728e627f86da825d42dc592186429cbc (diff)
downloademacs-e40e63033bf7b961938c54b330137bc6bab08efe.tar.gz
emacs-e40e63033bf7b961938c54b330137bc6bab08efe.zip
Commands and mode for managing multiple eww buffers
Fixes: debbugs:19131 * doc/misc/eww.texi (Basics): Document managing multiple eww buffers. * lisp/net/eww.el (eww-buffers-mode): New major mode. (eww-list-buffers, eww-buffer-select, eww-buffer-show-next) (eww-buffer-show-previous, eww-buffer-kill, eww-buffer-show): New commands/functions.
-rw-r--r--doc/misc/ChangeLog4
-rw-r--r--doc/misc/eww.texi7
-rw-r--r--lisp/ChangeLog7
-rw-r--r--lisp/net/eww.el130
4 files changed, 148 insertions, 0 deletions
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog
index 4d8f6901030..45ab7923b4b 100644
--- a/doc/misc/ChangeLog
+++ b/doc/misc/ChangeLog
@@ -1,3 +1,7 @@
12014-12-08 Andrey Kotlarski <m00naticus@gmail.com>
2
3 * eww.texi (Basics): Document managing multiple eww buffers.
4
12014-12-05 Lars Magne Ingebrigtsen <larsi@gnus.org> 52014-12-05 Lars Magne Ingebrigtsen <larsi@gnus.org>
2 6
3 * eww.texi (Basics): Document eww PDF viewing. 7 * eww.texi (Basics): Document eww PDF viewing.
diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi
index dd460cc4ecf..e6221ceb755 100644
--- a/doc/misc/eww.texi
+++ b/doc/misc/eww.texi
@@ -152,6 +152,13 @@ You can view stored bookmarks with @kbd{B}
152(@code{eww-list-bookmarks}). This will open the bookmark buffer 152(@code{eww-list-bookmarks}). This will open the bookmark buffer
153@file{*eww bookmarks*}. 153@file{*eww bookmarks*}.
154 154
155@findex eww-list-buffers
156@kindex S
157@cindex Multiple Buffers
158 To get summary of currently opened EWW buffers, press @kbd{S}
159(@code{eww-list-buffers}). The @file{*eww buffers*} buffer allows to
160quickly kill, flip through and switch to specific EWW buffer.
161
155@findex eww-browse-with-external-browser 162@findex eww-browse-with-external-browser
156@vindex shr-external-browser 163@vindex shr-external-browser
157@vindex eww-use-external-browser-for-content-type 164@vindex eww-use-external-browser-for-content-type
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 91d2bba2b52..1ca7c87ad94 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,10 @@
12014-12-06 Andrey Kotlarski <m00naticus@gmail.com>
2
3 * net/eww.el (eww-buffers-mode): New major mode.
4 (eww-list-buffers, eww-buffer-select, eww-buffer-show-next)
5 (eww-buffer-show-previous, eww-buffer-kill, eww-buffer-show): New
6 commands/functions (bug#19131).
7
12014-12-08 Lars Magne Ingebrigtsen <larsi@gnus.org> 82014-12-08 Lars Magne Ingebrigtsen <larsi@gnus.org>
2 9
3 * net/gnutls.el (gnutls-negotiate): Ignore files found via 10 * net/gnutls.el (gnutls-negotiate): Ignore files found via
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 58e0ff36f6a..ed88c00af7c 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -623,6 +623,7 @@ the like."
623 (define-key map "R" 'eww-readable) 623 (define-key map "R" 'eww-readable)
624 (define-key map "H" 'eww-list-histories) 624 (define-key map "H" 'eww-list-histories)
625 (define-key map "E" 'eww-set-character-encoding) 625 (define-key map "E" 'eww-set-character-encoding)
626 (define-key map "S" 'eww-list-buffers)
626 627
627 (define-key map "b" 'eww-add-bookmark) 628 (define-key map "b" 'eww-add-bookmark)
628 (define-key map "B" 'eww-list-bookmarks) 629 (define-key map "B" 'eww-list-bookmarks)
@@ -643,6 +644,7 @@ the like."
643 ["View page source" eww-view-source] 644 ["View page source" eww-view-source]
644 ["Copy page URL" eww-copy-page-url t] 645 ["Copy page URL" eww-copy-page-url t]
645 ["List histories" eww-list-histories t] 646 ["List histories" eww-list-histories t]
647 ["List buffers" eww-list-buffers t]
646 ["Add bookmark" eww-add-bookmark t] 648 ["Add bookmark" eww-add-bookmark t]
647 ["List bookmarks" eww-list-bookmarks t] 649 ["List bookmarks" eww-list-bookmarks t]
648 ["List cookies" url-cookie-list t] 650 ["List cookies" url-cookie-list t]
@@ -1652,6 +1654,134 @@ Differences in #targets are ignored."
1652 (setq buffer-read-only t 1654 (setq buffer-read-only t
1653 truncate-lines t)) 1655 truncate-lines t))
1654 1656
1657;;; eww buffers list
1658
1659(defun eww-list-buffers ()
1660 "Enlist eww buffers."
1661 (interactive)
1662 (let (buffers-info
1663 (current (current-buffer)))
1664 (dolist (buffer (buffer-list))
1665 (with-current-buffer buffer
1666 (when (derived-mode-p 'eww-mode)
1667 (push (vector buffer (plist-get eww-data :title)
1668 (plist-get eww-data :url))
1669 buffers-info))))
1670 (unless buffers-info
1671 (error "No eww buffers"))
1672 (setq buffers-info (nreverse buffers-info)) ;more recent on top
1673 (set-buffer (get-buffer-create "*eww buffers*"))
1674 (eww-buffers-mode)
1675 (let ((inhibit-read-only t)
1676 (domain-length 0)
1677 (title-length 0)
1678 url title format start)
1679 (erase-buffer)
1680 (dolist (buffer-info buffers-info)
1681 (setq title-length (max title-length
1682 (length (elt buffer-info 1)))
1683 domain-length (max domain-length
1684 (length (elt buffer-info 2)))))
1685 (setq format (format "%%-%ds %%-%ds" title-length domain-length)
1686 header-line-format
1687 (concat " " (format format "Title" "URL")))
1688 (let ((line 0)
1689 (current-buffer-line 1))
1690 (dolist (buffer-info buffers-info)
1691 (setq start (point)
1692 title (elt buffer-info 1)
1693 url (elt buffer-info 2)
1694 line (1+ line))
1695 (insert (format format title url))
1696 (insert "\n")
1697 (let ((buffer (elt buffer-info 0)))
1698 (put-text-property start (1+ start) 'eww-buffer
1699 buffer)
1700 (when (eq current buffer)
1701 (setq current-buffer-line line))))
1702 (goto-char (point-min))
1703 (forward-line (1- current-buffer-line)))))
1704 (pop-to-buffer "*eww buffers*"))
1705
1706(defun eww-buffer-select ()
1707 "Switch to eww buffer."
1708 (interactive)
1709 (let ((buffer (get-text-property (line-beginning-position)
1710 'eww-buffer)))
1711 (unless buffer
1712 (error "No buffer on current line"))
1713 (quit-window)
1714 (switch-to-buffer buffer)))
1715
1716(defun eww-buffer-show ()
1717 "Display buffer under point in eww buffer list."
1718 (let ((buffer (get-text-property (line-beginning-position)
1719 'eww-buffer)))
1720 (unless buffer
1721 (error "No buffer on current line"))
1722 (other-window -1)
1723 (switch-to-buffer buffer)
1724 (other-window 1)))
1725
1726(defun eww-buffer-show-next ()
1727 "Move to next eww buffer in the list and display it."
1728 (interactive)
1729 (forward-line)
1730 (when (eobp)
1731 (goto-char (point-min)))
1732 (eww-buffer-show))
1733
1734(defun eww-buffer-show-previous ()
1735 "Move to previous eww buffer in the list and display it."
1736 (interactive)
1737 (beginning-of-line)
1738 (when (bobp)
1739 (goto-char (point-max)))
1740 (forward-line -1)
1741 (eww-buffer-show))
1742
1743(defun eww-buffer-kill ()
1744 "Kill buffer from eww list."
1745 (interactive)
1746 (let* ((start (line-beginning-position))
1747 (buffer (get-text-property start 'eww-buffer))
1748 (inhibit-read-only t))
1749 (unless buffer
1750 (user-error "No buffer on the current line"))
1751 (kill-buffer buffer)
1752 (forward-line 1)
1753 (delete-region start (point)))
1754 (when (eobp)
1755 (forward-line -1))
1756 (eww-buffer-show))
1757
1758(defvar eww-buffers-mode-map
1759 (let ((map (make-sparse-keymap)))
1760 (suppress-keymap map)
1761 (define-key map "q" 'quit-window)
1762 (define-key map [(control k)] 'eww-buffer-kill)
1763 (define-key map "\r" 'eww-buffer-select)
1764 (define-key map "n" 'eww-buffer-show-next)
1765 (define-key map "p" 'eww-buffer-show-previous)
1766
1767 (easy-menu-define nil map
1768 "Menu for `eww-buffers-mode-map'."
1769 '("Eww Buffers"
1770 ["Exit" quit-window t]
1771 ["Select" eww-buffer-select
1772 :active (get-text-property (line-beginning-position) 'eww-buffer)]
1773 ["Kill" eww-buffer-kill
1774 :active (get-text-property (line-beginning-position) 'eww-buffer)]))
1775 map))
1776
1777(define-derived-mode eww-buffers-mode nil "eww buffers"
1778 "Mode for listing buffers.
1779
1780\\{eww-buffers-mode-map}"
1781 (buffer-disable-undo)
1782 (setq buffer-read-only t
1783 truncate-lines t))
1784
1655;;; Desktop support 1785;;; Desktop support
1656 1786
1657(defvar eww-desktop-data-save 1787(defvar eww-desktop-data-save