Subject: bug#44929: closed (Re: bug#44929: 28.0.50; Info-next-reference skips next reference)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 28 Nov 2020 19:55:02 +0000

Your bug report

#44929: 28.0.50; Info-next-reference skips next reference

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
44929: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=44929
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#44929: 28.0.50; Info-next-reference skips next reference
From: Stephen Berman <[email-masked]>
To: Eli Zaretskii <[email-masked]>
Cc: [email-masked]
Date: Sat, 28 Nov 2020 20:54:17 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

On Sat, 28 Nov 2020 21:44:19 +0200 Eli Zaretskii <[email-masked]> wrote:

>> From: Stephen Berman <[email-masked]>
>> Date: Sat, 28 Nov 2020 20:21:50 +0100
>>
>> 0. emacs -Q
>> 1. C-h r (if emacs is installed, otherwise `C-u h i /path/to/emacs.info
>>    RET')
>> 2. Repeat `C-n' until the cursor is on the '*' before the first menu
>>    item 'Distrib'.
>> 3. Type TAB
>> => The cursor jumps over 'Distrib' and goes to the second menu item
>>    'Intro'.
>>
>> The same thing happens if the cursor is on the space between '*' and
>> 'Distrib' and you then press TAB.  In both cases, I expected the cursor
>> to go to the immediately following link instead of skipping it.
>
> AFAIU, your expectation is wrong: TAB runs the command
> Info-next-reference, where the "next" part means "not the current
> one".  For the "current" reference, press RET.

I didn't know that RET works anywhere on the line (or lines) of the menu
item, not just on the link, and it never occurred to me to try.  Thanks
for enlightening me.  Closing.

Steve Berman

Subject: 28.0.50; Info-next-reference skips next reference
From: Stephen Berman <[email-masked]>
To: [email-masked]
Date: Sat, 28 Nov 2020 20:21:50 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

0. emacs -Q
1. C-h r (if emacs is installed, otherwise `C-u h i /path/to/emacs.info
   RET')
2. Repeat `C-n' until the cursor is on the '*' before the first menu
   item 'Distrib'.
3. Type TAB
=> The cursor jumps over 'Distrib' and goes to the second menu item
   'Intro'.

The same thing happens if the cursor is on the space between '*' and
'Distrib' and you then press TAB.  In both cases, I expected the cursor
to go to the immediately following link instead of skipping it.  This
behavior annoys me every time I run into it, but I haven't debugged it
till now.  The attached patch fixes it.  (The code responsible for the
current behavior in Info-next-reference has not changed since the
command was added to Emacs, but I hope you'll nevertheless agree it's a
bug.)

In GNU Emacs 28.0.50 (build 42, x86_64-pc-linux-gnu, GTK+ Version 3.24.17, cairo version 1.17.3)
 of 2020-11-21 built on strobe-jhalfs
Repository revision: 0a8cd0116204354e95fbb4ebde64c58123502aa2
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12008000
System Description: Linux From Scratch SVN-20200401

Configured using:
 'configure --with-xwidgets 'CFLAGS=-Og -g3'
 PKG_CONFIG_PATH=/opt/qt5/lib/pkgconfig'

Configured features:
XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND DBUS GSETTINGS GLIB NOTIFY
INOTIFY ACL GNUTLS LIBXML2 FREETYPE HARFBUZZ ZLIB TOOLKIT_SCROLL_BARS
GTK3 X11 XDBE XIM MODULES THREADS XWIDGETS LIBSYSTEMD PDUMPER LCMS2

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

diff --git a/lisp/info.el b/lisp/info.el
index c3684deb96..5c383836c8 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -3148,6 +3148,12 @@ Info-next-reference
 	    (old-pt (point))
 	    (case-fold-search t))
 	(or (eobp) (forward-char 1))
+        ;; Don't jump over the cross-reference or menu item when the
+        ;; cursor is on the '*' or space in front of it.
+	(unless (looking-at " Menu:")
+	  (let ((lbp (line-beginning-position)))
+	    (when (looking-back "^\\* ?" lbp)
+	      (backward-char (if (looking-back "^\\* " lbp) 2 1)))))
 	(or (Info-next-reference-or-link pat 'link)
 	    (progn
 	      (goto-char (point-min))