diff options
| author | Andrey Kotlarski | 2014-12-08 19:29:06 +0100 |
|---|---|---|
| committer | Lars Magne Ingebrigtsen | 2014-12-08 19:29:06 +0100 |
| commit | e40e63033bf7b961938c54b330137bc6bab08efe (patch) | |
| tree | cee34975e46e5b0b6caa3d929838d2c6a230f1a2 | |
| parent | e63c720b728e627f86da825d42dc592186429cbc (diff) | |
| download | emacs-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/ChangeLog | 4 | ||||
| -rw-r--r-- | doc/misc/eww.texi | 7 | ||||
| -rw-r--r-- | lisp/ChangeLog | 7 | ||||
| -rw-r--r-- | lisp/net/eww.el | 130 |
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 @@ | |||
| 1 | 2014-12-08 Andrey Kotlarski <m00naticus@gmail.com> | ||
| 2 | |||
| 3 | * eww.texi (Basics): Document managing multiple eww buffers. | ||
| 4 | |||
| 1 | 2014-12-05 Lars Magne Ingebrigtsen <larsi@gnus.org> | 5 | 2014-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 | ||
| 160 | quickly 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 @@ | |||
| 1 | 2014-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 | |||
| 1 | 2014-12-08 Lars Magne Ingebrigtsen <larsi@gnus.org> | 8 | 2014-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 |