unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Drew Adams <drew.adams@oracle.com>
To: 42993@debbugs.gnu.org
Subject: bug#42993: 26.3; [PATCH] Let Info bookmarks go to current, not recorded, version of manual
Date: Sat, 22 Aug 2020 23:07:09 -0700 (PDT)	[thread overview]
Message-ID: <1e8dbcb9-e47f-48fd-a34a-f1cf304ba4cc@default> (raw)

[-- Attachment #1: Type: text/plain, Size: 2878 bytes --]

An Info bookmark, like most bookmarks, records the target file as an
absolute file name.  When you jump to an Info bookmark it jumps to the
recorded node in that Info file.

But what if you have Info bookmarks that were recorded for older Emacs
versions?  They typically have different absolute file names.  When you
jump to such a bookmark it will go to the manual for that older Emacs
version, if you still have it installed (and the Info files are at the
same locations as recorded by the bookmark).

This is a feature: you can have Info bookmarks to manuals for different
Emacs versions.  As long as those manuals are still available, bookmarks
to them continue to work.

But this behavior might not be what you want, in general.  In
particular, if an older, recorded Info file is no longer present, then
jumping to the bookmark just takes you to the top of Info (`dir') in the
manual that corresponds to the current Emacs session, and you're shown
an error message saying that the file in question doesn't exist.

The attached patch (from today's master) does two related things:

1. It adds a user option, `Info-bookmark-use-current-manual', which if
   non-nil makes Info bookmarks use the current manual, that is, the
   manual of the current Emacs session.

   The default value is nil, only for backward compatibility.  It gives
   you the behavior before the patch.

   I personally think the default value should be t, as I think the old
   behavior is essentially broken.  You decide.

2. If the option value is nil, and if the targeted Info file can't be
   found, then instead of raising an error you're taken to the target
   node in the current manual.

Another possibility would be to consider that users may often want to
toggle between the two behaviors, e.g., usually use the latest manuals
but sometimes use a recorded manual.  In that case, a non-option
variable might be better, along with a toggle command.

Still another possibility would be to give users a way to specify (when
creating an Info bookmark or later, by editing it), whether they want it
to go to the latest (current) manual or be tied to the recorded manual.
IOW, put the behavior specified by the variable in the bookmark instead.
IF a bookmark has some particular field value THEN respect its absolute
file name.  OTHERWISE, use the current Info manual.

That last possibility could be combined with the use of the variable, by
changing the OTHERWISE clause to follow the behavior specified by the
variable.

In GNU Emacs 26.3 (build 1, x86_64-w64-mingw32)
 of 2019-08-29
Repository revision: 96dd0196c28bc36779584e47fffcca433c9309cd
Windowing system distributor `Microsoft Corp.', version 10.0.18362
Configured using:
 `configure --without-dbus --host=x86_64-w64-mingw32
 --without-compress-install 'CFLAGS=-O2 -static -g3''

[-- Attachment #2: info-2020-08-22a.patch --]
[-- Type: application/octet-stream, Size: 1856 bytes --]

diff -u info.el info-2020-08-22a-PATCHED.el
--- info.el	2020-08-22 22:07:06.722986400 -0700
+++ info-2020-08-22a-PATCHED.el	2020-08-22 22:40:01.371990300 -0700
@@ -382,6 +382,12 @@
   :type 'hook
   :group 'info)
 
+(defcustom Info-bookmark-use-current-manual nil
+  "Non-nil means Info bookmarks use the manuals for this Emacs version.
+Otherwise they use the manuals whose absolute file names are recorded
+in the bookmarks."
+  :type 'boolean :group 'info)
+
 (defvar-local Info-current-file nil
   "Info file that Info is now looking at, or nil.
 This is the name that was specified in Info, not the actual file name.
@@ -5347,10 +5353,18 @@
 ;;;###autoload
 (defun Info-bookmark-jump (bmk)
   "This implements the `handler' function interface for the record
-type returned by `Info-bookmark-make-record', which see."
-  (let* ((file                   (bookmark-prop-get bmk 'filename))
+type returned by `Info-bookmark-make-record', which see.
+
+If `Info-bookmark-use-current-manual' is nil, and the recorded Info
+file exists, then use it.  If not, then go to the recorded Info node
+in the manual for the current Emacs version."
+  (let* ((absfile                (bookmark-prop-get bmk 'filename))
+         (file                   (if (or Info-bookmark-use-current-manual
+                                         (not (file-exists-p absfile)))
+                                     (file-name-nondirectory absfile)
+                                   absfile))
          (info-node              (bookmark-prop-get bmk 'info-node))
-         (buf (save-window-excursion    ;FIXME: doesn't work with frames!
+         (buf (save-window-excursion ; FIXME: doesn't work with frames!
                 (Info-find-node file info-node) (current-buffer))))
     ;; Use bookmark-default-handler to move to the appropriate location
     ;; within the node.

             reply	other threads:[~2020-08-23  6:07 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-23  6:07 Drew Adams [this message]
2020-08-23  6:26 ` bug#42993: 26.3; [PATCH] Let Info bookmarks go to current, not recorded, version of manual Eli Zaretskii
     [not found] <<1e8dbcb9-e47f-48fd-a34a-f1cf304ba4cc@default>
     [not found] ` <<83mu2l98tg.fsf@gnu.org>
2020-08-23 16:32   ` Drew Adams
2020-08-30 21:03     ` Drew Adams
2021-05-13  9:55       ` Lars Ingebrigtsen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1e8dbcb9-e47f-48fd-a34a-f1cf304ba4cc@default \
    --to=drew.adams@oracle.com \
    --cc=42993@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).