From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Andrey Kotlarski Newsgroups: gmane.emacs.bugs Subject: bug#19131: Acknowledgement (25.0.50; [PATCH] eww.el: Create simple mode to manage eww buffers) Date: Mon, 08 Dec 2014 15:01:27 +0200 Message-ID: <878uiiwb14.fsf@gmail.com> References: <87vbm9iib9.fsf@gmail.com> <87fvddihi1.fsf@gmail.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Trace: ger.gmane.org 1418043750 29436 80.91.229.3 (8 Dec 2014 13:02:30 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 8 Dec 2014 13:02:30 +0000 (UTC) Cc: 19131@debbugs.gnu.org To: Lars Magne Ingebrigtsen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Dec 08 14:02:19 2014 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1XxxxD-0007aN-IJ for geb-bug-gnu-emacs@m.gmane.org; Mon, 08 Dec 2014 14:02:19 +0100 Original-Received: from localhost ([::1]:34010 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XxxxC-0001l1-VX for geb-bug-gnu-emacs@m.gmane.org; Mon, 08 Dec 2014 08:02:18 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:53188) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xxxx3-0001kp-6z for bug-gnu-emacs@gnu.org; Mon, 08 Dec 2014 08:02:16 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Xxxww-0006Sj-47 for bug-gnu-emacs@gnu.org; Mon, 08 Dec 2014 08:02:09 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:59900) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xxxww-0006Se-0A for bug-gnu-emacs@gnu.org; Mon, 08 Dec 2014 08:02:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1Xxxwv-0004lp-K4 for bug-gnu-emacs@gnu.org; Mon, 08 Dec 2014 08:02:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Andrey Kotlarski Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 08 Dec 2014 13:02:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19131 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 19131-submit@debbugs.gnu.org id=B19131.141804370418312 (code B ref 19131); Mon, 08 Dec 2014 13:02:01 +0000 Original-Received: (at 19131) by debbugs.gnu.org; 8 Dec 2014 13:01:44 +0000 Original-Received: from localhost ([127.0.0.1]:57113 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XxxwZ-0004lC-R4 for submit@debbugs.gnu.org; Mon, 08 Dec 2014 08:01:43 -0500 Original-Received: from mail-wg0-f42.google.com ([74.125.82.42]:52107) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XxxwU-0004ky-1J for 19131@debbugs.gnu.org; Mon, 08 Dec 2014 08:01:38 -0500 Original-Received: by mail-wg0-f42.google.com with SMTP id z12so6178442wgg.29 for <19131@debbugs.gnu.org>; Mon, 08 Dec 2014 05:01:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-type:content-transfer-encoding; bh=ZH4FRe7Q1DZRuMjiv/ZpnWO8x39jj1+G6zJINaGNFRU=; b=UMDmTRGEZiVvEHE1S5d+LcYcUX7VaKC9aoisCop7qQVNZGJuJL9JZCvL5VUVESOtNr 6NRX3p3gQjoBr5JkKOfq1x53x8aqUIf+0ZaDAiJYyLJxeonfWZDhzgh04epgI9UFYhxe 7l7y+F0fKRbz+M0c7VpKFqEbZ/C+u8iTYvIkTBZO8NkJd5Lwp9Qa7jUCD/QiXdIi06XO ndzvFODaIMQc8TZAyEOgacJwdzmTbAqoR3G/Y2rDJ/l1QD3NsS2e2osdjaI4ZDZo7xwb 5CmlzbtsHTLWgAs1Yhj33oS0nohIQ+JhPjv6ZS99wYyhT2pVRNvE3DS17xQVG0JKcWXE V2Ag== X-Received: by 10.180.82.227 with SMTP id l3mr23997189wiy.0.1418043691924; Mon, 08 Dec 2014 05:01:31 -0800 (PST) Original-Received: from andrexhe ([79.100.238.209]) by mx.google.com with ESMTPSA id je12sm9698074wic.22.2014.12.08.05.01.29 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 Dec 2014 05:01:30 -0800 (PST) In-Reply-To: (Lars Magne Ingebrigtsen's message of "Sun, 07 Dec 2014 20:36:05 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:96990 Archived-At: [ 7 =D0=B4=D0=B5=D0=BA=D0=B5=D0=BC=D0=B2=D1=80=D0=B8 2014, 20:36 +0100, = =D0=BD=D0=B5=D0=B4=D0=B5=D0=BB=D1=8F ] Lars Magne Ingebrigtsen: > Looks good. Could you also document this in the eww manual? Sure. > I've got some tiny nit-picks for style. Here's updated patch: --- doc/misc/ChangeLog | 4 ++ doc/misc/eww.texi | 7 +++ lisp/ChangeLog | 7 +++ lisp/net/eww.el | 130 +++++++++++++++++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 148 insertions(+) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 4d8f690..45ab792 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,7 @@ +2014-12-08 Andrey Kotlarski + + * eww.texi (Basics): Document managing multiple eww buffers. + 2014-12-05 Lars Magne Ingebrigtsen =20 * eww.texi (Basics): Document eww PDF viewing. diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi index dd460cc..e6221ce 100644 --- a/doc/misc/eww.texi +++ b/doc/misc/eww.texi @@ -152,6 +152,13 @@ You can view stored bookmarks with @kbd{B} (@code{eww-list-bookmarks}). This will open the bookmark buffer @file{*eww bookmarks*}. =20 +@findex eww-list-buffers +@kindex S +@cindex Multiple Buffers + To get summary of currently opened EWW buffers, press @kbd{S} +(@code{eww-list-buffers}). The @file{*eww buffers*} buffer allows to +quickly kill, flip through and switch to specific EWW buffer. + @findex eww-browse-with-external-browser @vindex shr-external-browser @vindex eww-use-external-browser-for-content-type diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f695e1c..859c611 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2014-12-06 Andrey Kotlarski + + * 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. + 2014-12-06 Ulf Jasper =20 * net/newst-treeview.el (newsticker--treeview-list-add-item) diff --git a/lisp/net/eww.el b/lisp/net/eww.el index e88afb5..60aa7d2 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -620,6 +620,7 @@ the like." (define-key map "R" 'eww-readable) (define-key map "H" 'eww-list-histories) (define-key map "E" 'eww-set-character-encoding) + (define-key map "S" 'eww-list-buffers) =20 (define-key map "b" 'eww-add-bookmark) (define-key map "B" 'eww-list-bookmarks) @@ -640,6 +641,7 @@ the like." ["View page source" eww-view-source] ["Copy page URL" eww-copy-page-url t] ["List histories" eww-list-histories t] + ["List buffers" eww-list-buffers t] ["Add bookmark" eww-add-bookmark t] ["List bookmarks" eww-list-bookmarks t] ["List cookies" url-cookie-list t] @@ -1643,6 +1645,134 @@ Differences in #targets are ignored." (setq buffer-read-only t truncate-lines t)) =20 +;;; eww buffers list + +(defun eww-list-buffers () + "Enlist eww buffers." + (interactive) + (let (buffers-info + (current (current-buffer))) + (dolist (buffer (buffer-list)) + (with-current-buffer buffer + (when (derived-mode-p 'eww-mode) + (push (vector buffer (plist-get eww-data :title) + (plist-get eww-data :url)) + buffers-info)))) + (unless buffers-info + (error "No eww buffers")) + (setq buffers-info (nreverse buffers-info)) ;more recent on top + (set-buffer (get-buffer-create "*eww buffers*")) + (eww-buffers-mode) + (let ((inhibit-read-only t) + (domain-length 0) + (title-length 0) + url title format start) + (erase-buffer) + (dolist (buffer-info buffers-info) + (setq title-length (max title-length + (length (elt buffer-info 1))) + domain-length (max domain-length + (length (elt buffer-info 2))))) + (setq format (format "%%-%ds %%-%ds" title-length domain-length) + header-line-format + (concat " " (format format "Title" "URL"))) + (let ((line 0) + (current-buffer-line 1)) + (dolist (buffer-info buffers-info) + (setq start (point) + title (elt buffer-info 1) + url (elt buffer-info 2) + line (1+ line)) + (insert (format format title url)) + (insert "\n") + (let ((buffer (elt buffer-info 0))) + (put-text-property start (1+ start) 'eww-buffer + buffer) + (when (eq current buffer) + (setq current-buffer-line line)))) + (goto-char (point-min)) + (forward-line (1- current-buffer-line))))) + (pop-to-buffer "*eww buffers*")) + +(defun eww-buffer-select () + "Switch to eww buffer." + (interactive) + (let ((buffer (get-text-property (line-beginning-position) + 'eww-buffer))) + (unless buffer + (error "No buffer on current line")) + (quit-window) + (switch-to-buffer buffer))) + +(defun eww-buffer-show () + "Display buffer under point in eww buffer list." + (let ((buffer (get-text-property (line-beginning-position) + 'eww-buffer))) + (unless buffer + (error "No buffer on current line")) + (other-window -1) + (switch-to-buffer buffer) + (other-window 1))) + +(defun eww-buffer-show-next () + "Move to next eww buffer in the list and display it." + (interactive) + (forward-line) + (when (eobp) + (goto-char (point-min))) + (eww-buffer-show)) + +(defun eww-buffer-show-previous () + "Move to previous eww buffer in the list and display it." + (interactive) + (beginning-of-line) + (when (bobp) + (goto-char (point-max))) + (forward-line -1) + (eww-buffer-show)) + +(defun eww-buffer-kill () + "Kill buffer from eww list." + (interactive) + (let* ((start (line-beginning-position)) + (buffer (get-text-property start 'eww-buffer)) + (inhibit-read-only t)) + (unless buffer + (user-error "No buffer on the current line")) + (kill-buffer buffer) + (forward-line 1) + (delete-region start (point))) + (when (eobp) + (forward-line -1)) + (eww-buffer-show)) + +(defvar eww-buffers-mode-map + (let ((map (make-sparse-keymap))) + (suppress-keymap map) + (define-key map "q" 'quit-window) + (define-key map [(control k)] 'eww-buffer-kill) + (define-key map "\r" 'eww-buffer-select) + (define-key map "n" 'eww-buffer-show-next) + (define-key map "p" 'eww-buffer-show-previous) + + (easy-menu-define nil map + "Menu for `eww-buffers-mode-map'." + '("Eww Buffers" + ["Exit" quit-window t] + ["Select" eww-buffer-select + :active (get-text-property (line-beginning-position) 'eww-buffer)] + ["Kill" eww-buffer-kill + :active (get-text-property (line-beginning-position) 'eww-buffer)= ])) + map)) + +(define-derived-mode eww-buffers-mode nil "eww buffers" + "Mode for listing buffers. + +\\{eww-buffers-mode-map}" + (buffer-disable-undo) + (setq buffer-read-only t + truncate-lines t)) + ;;; Desktop support =20 (defvar eww-desktop-data-save --=20 2.1.3