From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.bugs Subject: bug#73293: [PATCH] Add buffer-local register commands to doc-view Date: Sat, 21 Sep 2024 13:28:58 +0300 Message-ID: <865xqp47x1.fsf@gnu.org> References: <87y13rx0id.fsf@gmail.com> Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="7749"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 73293@debbugs.gnu.org To: Visuwesh , Tassilo Horn Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Sep 21 12:29:59 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1srxNG-0001qJ-JS for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 21 Sep 2024 12:29:58 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1srxN3-0001YQ-4d; Sat, 21 Sep 2024 06:29:45 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1srxN1-0001YF-Ck for bug-gnu-emacs@gnu.org; Sat, 21 Sep 2024 06:29:43 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1srxN0-0005D2-T8 for bug-gnu-emacs@gnu.org; Sat, 21 Sep 2024 06:29:43 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=References:In-Reply-To:From:Date:To:Subject; bh=e7aq0tVrdj+jw/A91+AipknNURcZBpAY3RqoxeqXVlk=; b=Eg3i2vjQUZ3dHsZI5zA7YL3JJ2T2kl+mTv2MOqX7+X5tw8P1KSg3HEGRaI6ZzAAv6iMPX6VVIKfWx5K7R91FYIPb4pfBCnHCSeJqjed/iawgz4C+bLehYpIfOhXWiG3dDJ/atFmqbdypQrhwF8u6+8pufOXXSonQBe7nHLDx/tYiGmG167b9oKg34sHKJrCmkm0gaxZl+Lc5/WEhZ2venPfc1aAhnQ0bmNCtDRwjfpCXnD1zfWhvPnxCayp4op5vTty1rbWm3L0QhlHHl7Q34QIMoWSJG1vWA1ELfqHyboEApROQerRLSM6TrebL2NSfS9CrqjNJ6jrfNixj+GKyHQ==; Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1srxNK-000685-St for bug-gnu-emacs@gnu.org; Sat, 21 Sep 2024 06:30:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 21 Sep 2024 10:30:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 73293 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 73293-submit@debbugs.gnu.org id=B73293.172691457123490 (code B ref 73293); Sat, 21 Sep 2024 10:30:02 +0000 Original-Received: (at 73293) by debbugs.gnu.org; 21 Sep 2024 10:29:31 +0000 Original-Received: from localhost ([127.0.0.1]:37365 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1srxMo-00066m-K7 for submit@debbugs.gnu.org; Sat, 21 Sep 2024 06:29:31 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:49066) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1srxMl-00066X-Ek for 73293@debbugs.gnu.org; Sat, 21 Sep 2024 06:29:28 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1srxML-0005Ax-SL; Sat, 21 Sep 2024 06:29:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=e7aq0tVrdj+jw/A91+AipknNURcZBpAY3RqoxeqXVlk=; b=gIggFVB25oUV Fwq/TKci7YhTWCgFpP1a6RclERKUjMwP+yIvKemZCiMkJsxrHwDlW4upJCTcYBuPnZA2uwzksdSsZ PXWxh72DtEJ6sOuVSyYSHYKRjxxqvHLwRgv9y3nwITxsPAwD9UrZ4LRlEuMfuvSuRTrKnXGGXVPLD Tq/uZGWOhg+RR2FONoQV0my+F30tJoZd2YHYDb+MyLSAT+t+cdIkGiFRYITFm9tWA/NXsuOF7MdJ3 GTUPaY23DnMDydHdc7f1aCujd5MtAo9je7dBHI+DHMLaoGWpfLhrGrr4xFpq3uGtBrkrMBH7fPedy hbtEa2Q9Y099V9H9SaCwiA==; In-Reply-To: <87y13rx0id.fsf@gmail.com> (message from Visuwesh on Mon, 16 Sep 2024 17:40:18 +0530) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:292175 Archived-At: > From: Visuwesh > Date: Mon, 16 Sep 2024 17:40:18 +0530 > > Attached patch adds buffer-local registers to doc-view-mode. I have > opted to make the registers buffer-local since I personally use the same > mnemonic to save pages to the register in multiple buffers. It is > something like folding a page or placing a pen in between to quickly go > to-and-fro between those pages. Thanks. Tassilo, any comments or suggestions? > In GNU Emacs 31.0.50 (build 7, x86_64-pc-linux-gnu, X toolkit, cairo > version 1.18.0, Xaw scroll bars) of 2024-09-09 built on astatine > Repository revision: 7d7aa65f63db78c5732f1580213fc3767b767a4a > Repository branch: master > Windowing system distributor 'The X.Org Foundation', version 11.0.12101011 > System Description: Debian GNU/Linux trixie/sid > > Configured using: > 'configure --with-sound=alsa --with-x-toolkit=lucid --without-xaw3d > --without-gconf --without-libsystemd --with-cairo' > > > >From 415f3ba0ad07f113858eaa45b60b9bd66b09c7da Mon Sep 17 00:00:00 2001 > From: Visuwesh > Date: Sun, 15 Sep 2024 13:56:21 +0530 > Subject: [PATCH] Add buffer-local register commands to doc-view > > * lisp/doc-view.el (doc-view-register-alist): New defvar to keep > track of buffer-local register-alist. > (doc-view-page-to-register, doc-view-jump-to-register): Add new > commands to set and jump to buffer-local registers. > (register-val-insert, register-val-describe) > (register-val-jump-to): Register defmethod to save and restore > doc-view registers. > (doc-view-mode-map): Bind the new commands. > * doc/emacs/misc.texi (DocView Navigation): Document the new > commands. > * etc/NEWS: Announce the change. > --- > doc/emacs/misc.texi | 10 +++++++++ > etc/NEWS | 6 +++++ > lisp/doc-view.el | 54 ++++++++++++++++++++++++++++++++++++++++++++- > 3 files changed, 69 insertions(+), 1 deletion(-) > > diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi > index eb157c146e7..e19e554fb26 100644 > --- a/doc/emacs/misc.texi > +++ b/doc/emacs/misc.texi > @@ -593,6 +593,16 @@ DocView Navigation > displayed using the variables @code{doc-view-imenu-format} and > @code{doc-view-imenu-flatten}. > > +@findex doc-view-page-to-register > +@findex doc-view-jump-to-register > +@kindex m @r{(DocView mode)} > +@kindex ' @r{(DocView mode)} > + You can save the current page to a register with @kbd{m} > +(@code{doc-view-page-to-register}) (@pxref{Registers}). However, these > +registers are not shared across buffers and stay local to the DocView > +buffer. You can later jump to the register with @kbd{'} > +(@code{doc-view-jump-to-register}). > + > @node DocView Searching > @subsection DocView Searching > > diff --git a/etc/NEWS b/etc/NEWS > index c6f8b0062e4..607665a71bb 100644 > --- a/etc/NEWS > +++ b/etc/NEWS > @@ -262,6 +262,12 @@ When switching to the plain text contents with 'doc-view-open-text', > DocView now creates a dedicated buffer to display it. 'C-c C-c' gets you > back to real DocView buffer if it still exists. > > ++++ > +*** New commands to save and restore pages in buffer local registers. > +Docview can store current page to buffer local registers with the new > +command 'doc-view-page-to-register' (bound to 'm'), and later can be > +restored with 'doc-view-jump-to-register' (bound to '''). > + > ** Tramp > > +++ > diff --git a/lisp/doc-view.el b/lisp/doc-view.el > index 0d89d63e03e..395993e6263 100644 > --- a/lisp/doc-view.el > +++ b/lisp/doc-view.el > @@ -556,7 +556,10 @@ doc-view-mode-map > "C-c C-c" #'doc-view-toggle-display > ;; Open a new buffer with doc's text contents > "C-c C-t" #'doc-view-open-text > - "r" #'revert-buffer) > + "r" #'revert-buffer > + ;; Registers > + "m" #'doc-view-page-to-register > + "'" #'doc-view-jump-to-register) > > (define-obsolete-function-alias 'doc-view-revert-buffer #'revert-buffer "27.1") > (defvar revert-buffer-preserve-modes) > @@ -2468,6 +2471,55 @@ doc-view-bookmark-jump > > (put 'doc-view-bookmark-jump 'bookmark-handler-type "DocView") > > +;;; Register integration > + > +(defvar-local doc-view-register-alist nil > + "Register alist containing only doc-view registers for current buffer. > +Each doc-view register entry is of the form (doc-view . ALIST) where > +ALIST has the keys `buffer', `file', and `page'. `buffer' is the buffer > +the `file' is visiting. `page' is the page number to be show.") > + > +(defun doc-view-page-to-register (register) > + "Store the current page to the register REGISTER." > + (interactive > + (let ((register-alist doc-view-register-alist)) > + (list (register-read-with-preview "Page to register: ")))) > + (let ((register-alist doc-view-register-alist)) > + (set-register register > + `(doc-view > + (buffer . ,(current-buffer)) > + (file . ,(buffer-file-name)) > + (page . ,(doc-view-current-page)))) > + (setq doc-view-register-alist register-alist))) > + > +(defun doc-view-jump-to-register (register) > + "Jump to the register REGISTER." > + (interactive > + (let ((register-alist doc-view-register-alist)) > + (list (register-read-with-preview "Jump to register: ")))) > + (let ((register-alist doc-view-register-alist)) > + (jump-to-register register))) > + > +(cl-defmethod register-val-insert ((val (head doc-view))) > + (prin1 val)) > + > +(cl-defmethod register-val-describe ((val (head doc-view)) _verbose) > + (let* ((alist (cdr val)) > + (name (or (file-name-nondirectory (alist-get 'file alist)) > + (buffer-name (alist-get 'buffer alist))))) > + (princ name) > + (princ " p. ") > + (princ (alist-get 'page alist)))) > + > +(cl-defmethod register-val-jump-to ((val (head doc-view)) _arg) > + (let* ((alist (cdr val)) > + (buffer (or (alist-get 'buffer alist) > + (find-buffer-visiting (alist-get 'file alist))))) > + (unless buffer > + (user-error "Cannot find the doc-view buffer to jump to")) > + (switch-to-buffer buffer) > + (doc-view-goto-page (alist-get 'page alist)))) > + > ;; Obsolete. > > (defun doc-view-intersection (l1 l2) > -- > 2.45.2 >