GNU bug report logs - #81645
32.0.50; Annotations break *Completions* navigation in vertical format

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Reported by: Stephen Berman <stephen.berman@HIDDEN>; dated Mon, 17 Aug 2026 14:07:02 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 81645 <at> debbugs.gnu.org:


Received: (at 81645) by debbugs.gnu.org; 21 Aug 2026 15:02:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Aug 21 11:02:30 2026
Received: from localhost ([127.0.0.1]:46661 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1wxQlJ-0001rQ-CV
	for submit <at> debbugs.gnu.org; Fri, 21 Aug 2026 11:02:30 -0400
Received: from mout.gmx.net ([212.227.15.15]:44791)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <stephen.berman@HIDDEN>)
 id 1wxQlG-0001rB-Aj
 for 81645 <at> debbugs.gnu.org; Fri, 21 Aug 2026 11:02:27 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net;
 s=s31663417; t=1787324535; x=1787929335; i=stephen.berman@HIDDEN;
 bh=YZzwUGGzjMqxfRq/tNoJEKByUgXOuhq6HIQmmGATeh8=;
 h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date:
 Message-ID:MIME-Version:Content-Type:cc:content-transfer-encoding:
 content-type:date:from:message-id:mime-version:reply-to:subject:
 to;
 b=tbIBVFR0KT+pvnBAKO00czkkhAfmCfgxdhkUWvKbnRNKBWntSWQpOUX0JSBq90h4
 dJ4St+xgcMP+rhDQwt6/16KNFjZafN/U3HJBdaFLBGrMMoPZksTrDiTyE4QKKjSe9
 Uykw4M9iFQCdkTISWwVYOH5SE4QNCQHbz5w10ivD3vR/LokwLHHn/bjI7lyCDy/Jf
 qjQjedHKj2B6ngAzC2edNtX7lWmiFmyxuACxAl7OVJ4XbAmNhrMdwdKDDJVR9NSBW
 b7ZzqSdxLBVSTvCyylabUcE/ZVxFRMjtelu52CVGrRGpi7e/xjfLq3Y04mI8ONzF4
 K1HGKtkDyjwHeR3vCg==
X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a
Received: from client.hidden.invalid by mail.gmx.net (mrgmx005
 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MpDJd-1wbHD604qN-00eajP; Fri, 21
 Aug 2026 17:02:15 +0200
From: Stephen Berman <stephen.berman@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#81645: 32.0.50; Annotations break *Completions* navigation
 in vertical format
In-Reply-To: <86lda11i17.fsf@HIDDEN>
References: <87a4qkhmep.fsf@HIDDEN> <86v7983js6.fsf@HIDDEN>
 <87lda3raxx.fsf@HIDDEN> <86lda11i17.fsf@HIDDEN>
Date: Fri, 21 Aug 2026 17:02:14 +0200
Message-ID: <87bjavldop.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Provags-ID: V03:K1:EVi+It0BIakTNt0vT3meM5B2343iji+G60lVcwqmw1/Pl0f/m/E
 lgaIECBVA1GMcq15K6sEWxlf7GdhI24yUjo4SKjFCBQzmv5b1aXBjIeFSADM6qDV2ocMdxl
 FC8Fkz5HAMqtMTam0e4arce5+YEGPMdhIIXY4ovH09NkLPb0ARjQh5pybT3UUI3Erg8l2eX
 SZTkmvbbDuO2cH3IPjTEg==
X-Spam-Flag: NO
UI-OutboundReport: notjunk:1;M01:P0:RXN27Pt0iwE=;Lz9+edZxaxRxFSiwQDpw3JRrrxR
 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
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 81645
Cc: 81645 <at> debbugs.gnu.org, Sean Whitton <spwhitton@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

--=-=-=
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

On Thu, 20 Aug 2026 08:24:04 +0300 Eli Zaretskii <eliz@HIDDEN> wrote:

>> From: Sean Whitton <spwhitton@HIDDEN>
>> Cc: 81645 <at> debbugs.gnu.org
>> Date: Tue, 18 Aug 2026 11:15:54 +0100
>>=20
>> Eli Zaretskii [17/Aug  5:26pm +03] wrote:
>> >> Cc: Eli Zaretskii <eliz@HIDDEN>, Sean Whitton <spwhitton@spwhitton.=
name>
>> >> From: Stephen Berman <stephen.berman@HIDDEN>
>> >> Date: Mon, 17 Aug 2026 16:06:06 +0200
>> >>
>> >> 0. emacs -Q
>> >> 1. (setopt completions-format 'vertical)
>> >> 2. Sanity check: Typing `M-x auto- TAB' pops up the *Completions* bu=
ffer
>> >>    and you can navigate up and down through each column by typing
>> >>    `M-<DOWN>' and `M-<UP>' with wrapping from the last to the first
>> >>    candidate and vice versa.
>> >> 3. Now type `M-x abbrev- TAB', then repeatedly type `M-<DOWN>': afte=
r
>> >>    the last candidate point wraps to the second instead of the first
>> >>    candidate.
>> >> 4. Now type `M-x dabbrev- TAB'.  Now typing `M-<DOWN>' once moves to
>> >>    last candidate, but repeating `M-<DOWN>' does not move point (in
>> >>    particular, no wrapping).  Now typing `M-<UP>' moves point back t=
o
>> >>    the first candidate, but typing `M-<UP>' again move point not to =
the
>> >>    beginning of the last candidate but to the middle of the annotati=
on
>> >>    "(M-/)" affixed to the candidate.
>> >>
>> >> The problems in 3 and 4 are due to the annotations in the *Completio=
ns*
>> >> buffer.  The attached patch fixes these problems, so that navigation=
 in
>> >> 3 and 4 work as in 2 according to my testing.  I think this patch sh=
ould
>> >> be applied to the release branch because the type of navigation in
>> >> vertical format illustrated by 2 was introduced in Emacs 31 by commi=
t
>> >> 77ca60b48d01, which, however, failed to take annotations into accoun=
t.
>> >
>> > I think this is fine to install on the emacs-31 release branch,
>> > because the code it changes is specific to the 'vertical'
>> > completions-format, which is new in Emacs 31.
>> >
>> > Sean?
>>=20
>> Okay with me too.
>
> Thanks.  Stephen, please install on the release branch when you have
> time.

Thanks for the go-ahead, but in the mean time there's a complication.  I
wrote some tests for completions with annotations (augmenting the
function `completions-format-navigation--tests' I added in 77ca60b48d01,
which tests navigation with and without wrapping in both the horizontal
and vertical formats), but I found that some of the tests failed with
the patch I posted for `last-completion'.  I was able to fix the
failures by replacing the text property `mouse-face' by the
text-property `completion--string' (completion candidate annotations
have the latter but not the former) in numerous places; see the attached
patch.  With this patch all minibuffer-tests pass, but these changes may
still be considered too risky for the release branch.  If so, we could
install just my first patch for `last-completion' in emacs-31, omitting
the new tests, and install the more extensive changes and the tests in
master.  What do you two think?

Steve Berman

--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment
Content-Description: patch for bug#81645
Content-Transfer-Encoding: quoted-printable

diff --git a/lisp/simple.el b/lisp/simple.el
index 7ea287fd6ff..37ceeef9543 100644
=2D-- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -10173,9 +10173,8 @@ last-completion
           (col (current-column))
           (last-col (progn
                       (first-completion)
-                      (goto-char (pos-eol))
-                      (goto-char (previous-single-property-change
-                                  (point) 'mouse-face))
+                      (goto-char (1- (pos-eol)))
+                      (completion--move-to-candidate-start)
                       (current-column))))
       (if (zerop last-col)
           ;; If there is only one column of completions, the last
@@ -10209,18 +10208,20 @@ previous-column-completion
   (next-column-completion (- n)))
=20
 (defun completion--move-to-candidate-start ()
-  "If in a completion candidate, move point to its start."
-  (when (and (get-text-property (point) 'mouse-face)
+  "If in a completion candidate, move point to its start.
+If the candidate has a prefixed annotation, move to the start of the
+annotation."
+  (when (and (get-text-property (point) 'completion--string)
              (not (bobp))
-             (get-text-property (1- (point)) 'mouse-face))
-    (goto-char (previous-single-property-change (point) 'mouse-face))))
+             (get-text-property (1- (point)) 'completion--string))
+    (goto-char (previous-single-property-change (point) 'completion--stri=
ng))))
=20
 (defun completion--move-to-candidate-end ()
   "If in a completion candidate, move point to its end.
 More precisely, point moves the the position immediately after the last
-character of the completion candidate."
-  (when (get-text-property (point) 'mouse-face)
-    (goto-char (or (next-single-property-change (point) 'mouse-face)
+character of the completion candidate (including any annotations)."
+  (when (get-text-property (point) 'completion--string)
+    (goto-char (or (next-single-property-change (point) 'completion--stri=
ng)
                    (point-max)))))
=20
 (defun next-column-completion (n)
@@ -10353,24 +10354,24 @@ next-line-completion
   (let (line column pos found last first)
     (when (and (bobp)
                (> n 0)
-               (get-text-property (point) 'mouse-face)
+               (get-text-property (point) 'completion--string)
                (not (get-text-property (point) 'first-completion)))
       (let ((inhibit-read-only t))
         (add-text-properties (point) (1+ (point)) '(first-completion t)))
       (setq n (1- n)))
=20
-    (if (get-text-property (point) 'mouse-face)
+    (if (get-text-property (point) 'completion--string)
         ;; If in a completion, move to the start of it.
         (completion--move-to-candidate-start)
       ;; Try to move to the previous completion.
-      (setq pos (previous-single-property-change (point) 'mouse-face))
+      (setq pos (previous-single-property-change (point) 'completion--str=
ing))
       (if pos
           ;; Move to the start of the previous completion.
           (progn
             (goto-char pos)
-            (unless (get-text-property (point) 'mouse-face)
+            (unless (get-text-property (point) 'completion--string)
               (goto-char (previous-single-property-change
-                          (point) 'mouse-face nil (point-min)))))
+                          (point) 'completion--string nil (point-min)))))
         (cond ((> n 0) (setq n (1- n)) (first-completion))
               ((< n 0) (first-completion)))))
=20
@@ -10386,12 +10387,12 @@ next-line-completion
                     (eq (forward-line 1) 0)
                     (not (eobp))
                     (move-to-column column))
-          (when (get-text-property (point) 'mouse-face)
+          (when (get-text-property (point) 'completion--string)
             (setq found t)))
         (when (not found)
           (if (and (not completion-auto-wrap)
                    (if (eq completions-format 'vertical)
-                       (and (or last (get-text-property (point) 'mouse-fa=
ce))
+                       (and (or last (get-text-property (point) 'completi=
on--string))
                             (last-completion))
                      (goto-char pos)))
               t
@@ -10399,12 +10400,12 @@ next-line-completion
               (setq pos nil)
               (goto-char (point-min))
               (when (and (eq (move-to-column column) column)
-                         (get-text-property (point) 'mouse-face))
+                         (get-text-property (point) 'completion--string))
                 (setq pos (point)))
               (while (and (not pos) (> line (line-number-at-pos)))
                 (forward-line 1)
                 (when (and (eq (move-to-column column) column)
-                           (get-text-property (point) 'mouse-face))
+                           (get-text-property (point) 'completion--string=
))
                   (setq pos (point)))))
             (if pos (goto-char pos))
             (when (eq completions-format 'vertical)
@@ -10422,13 +10423,13 @@ next-line-completion
         (while (and (not found)
                     (eq (forward-line -1) 0)
                     (move-to-column column))
-          (when (get-text-property (point) 'mouse-face)
+          (when (get-text-property (point) 'completion--string)
             (setq found t)))
         (when (not found)
           (if (and (not completion-auto-wrap)
                    (if (eq completions-format 'vertical)
                        (and (or last first
-                                (get-text-property (point) 'mouse-face))
+                                (get-text-property (point) 'completion--s=
tring))
                             first (first-completion))
                      (goto-char pos)))
               t
@@ -10436,12 +10437,12 @@ next-line-completion
               (setq pos nil)
               (goto-char (point-max))
               (when (and (eq (move-to-column column) column)
-                         (get-text-property (point) 'mouse-face))
+                         (get-text-property (point) 'completion--string))
                 (setq pos (point)))
               (while (and (not pos) (< line (line-number-at-pos)))
                 (forward-line -1)
                 (when (and (eq (move-to-column column) column)
-                           (get-text-property (point) 'mouse-face))
+                           (get-text-property (point) 'completion--string=
))
                   (setq pos (point)))))
             (if pos (goto-char pos))
             (when (eq completions-format 'vertical)
diff --git a/test/lisp/minibuffer-tests.el b/test/lisp/minibuffer-tests.el
index 2f70d248711..fd8702b4a65 100644
=2D-- a/test/lisp/minibuffer-tests.el
+++ b/test/lisp/minibuffer-tests.el
@@ -873,7 +873,20 @@ completions-format-navigation--tests
                         (dotimes (_ x)
                           (push (concat (car comps) (pop letters)) comps)=
)
                         (nreverse comps))))
-         (completions (funcall gen-compl n))
+         (completions
+          (pcase n
+            ('annot2 '("dabbrev-"
+                       ("dabbrev-completion" ""
+                        #(" (C-M-/)" 0 8 (face completions-annotations)))
+                       ("dabbrev-expand" ""
+                        #(" (M-/)" 0 6 (face completions-annotations)))))
+            ('annot5 '("abbrev-"
+                       ("abbrev-edit-save-buffer" "" "")
+                       ("abbrev-edit-save-to-file" "" "") ("abbrev-mode" =
"" "")
+                       ("abbrev-prefix-mark"
+                        "" #(" (M-')" 0 6 (face completions-annotations))=
)
+                       ("abbrev-suggest-show-report" "" "")))
+            (_ (funcall gen-compl n))))
=20
          ;; Navigation tests.
          ;; (i) For both horizontal and vertical formats.
@@ -889,8 +902,26 @@ completions-format-navigation--tests
                              ('line 'previous-line-completion))))
               (completing-read-with-minibuffer-setup completions
                 (insert (car completions))
-                (minibuffer-completion-help)
-                (switch-to-completions)
+                (pcase n
+                  ((or 'annot2 'annot5)
+                   (progn
+                     (with-help-window "*Completions*"
+                       (display-completion-list (cdr completions)))
+                     (switch-to-buffer "*Completions*")
+                     (first-completion)))
+                  (_ (progn
+                       (minibuffer-completion-help)
+                       (switch-to-completions))))
+                (let ((completions (pcase n
+                                     ('annot2 '("dabbrev-completion"
+                                                "dabbrev-expand"))
+                                     ('annot5 '("abbrev-edit-save-buffer"
+                                                "abbrev-edit-save-to-file=
"
+                                                "abbrev-mode"
+                                                "abbrev-prefix-mark"
+                                                "abbrev-suggest-show-repo=
rt"))
+                                     (_ n completions)))
+                      (n (pcase n ('annot2 2) ('annot5 5) (_ n))))
                 ;; Sanity check that we're on first completion candidate.
                 (should
                  (equal (car completions)
@@ -947,7 +978,7 @@ completions-format-navigation--tests
                       (should
                        (equal (car completions)
                               (get-text-property (point)
-                                                 'completion--string)))))=
)))))
+                                                 'completion--string)))))=
))))))
=20
          ;; (ii) Only for horizontal format.
          (within-column
@@ -1015,12 +1046,29 @@ completions-format-navigation--tests
           (lambda ()
             (completing-read-with-minibuffer-setup completions
               (insert (car completions))
-              (minibuffer-completion-help)
-              (switch-to-completions)
-              (let ((one-col (save-excursion
-                                (first-completion)
-                                (completion--move-to-candidate-end)
-                                (eolp))))
+              (pcase n
+                ((or 'annot2 'annot5 5)
+                 (progn
+                   (with-help-window "*Completions*"
+                     (display-completion-list (cdr completions)))
+                   (switch-to-buffer "*Completions*")
+                   (first-completion)))
+                (_ (progn
+                     (minibuffer-completion-help)
+                     (switch-to-completions))))
+              (let ((completions (pcase n
+                                   ('annot2 '("dabbrev-completion"
+                                              "dabbrev-expand"))
+                                   ('annot5 '("abbrev-edit-save-buffer"
+                                              "abbrev-edit-save-to-file"
+                                              "abbrev-mode"
+                                              "abbrev-prefix-mark"
+                                              "abbrev-suggest-show-report=
"))
+                                   (_ n completions)))
+                    (one-col (save-excursion
+                               (first-completion)
+                               (completion--move-to-candidate-end)
+                               (eolp))))
                 (while (not (eobp))
                   (let ((first (get-text-property (point) 'completion--st=
ring))
                          last pos)
@@ -1150,6 +1198,12 @@ completions-format-navigation-test-15
 (ert-deftest completions-format-navigation-test-16 ()
   (completions-format-navigation--tests 16))
=20
+(ert-deftest completions-format-navigation-test-annot2 ()
+  (completions-format-navigation--tests 'annot2))
+
+(ert-deftest completions-format-navigation-test-annot5 ()
+  (completions-format-navigation--tests 'annot5))
+
 (ert-deftest completion-cycle ()
   (completing-read-with-minibuffer-setup '("aaa" "bbb" "ccc")
     (let ((completion-cycle-threshold t))

--=-=-=--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#81645; Package emacs. Full text available.

Message received at 81645 <at> debbugs.gnu.org:


Received: (at 81645) by debbugs.gnu.org; 20 Aug 2026 05:24:15 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Aug 20 01:24:14 2026
Received: from localhost ([127.0.0.1]:43427 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1wwvGA-0001VC-FQ
	for submit <at> debbugs.gnu.org; Thu, 20 Aug 2026 01:24:14 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:52100)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1wwvG8-0001Uz-Fd
 for 81645 <at> debbugs.gnu.org; Thu, 20 Aug 2026 01:24:12 -0400
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 <eliz@HIDDEN>)
 id 1wwvG2-0008RJ-Ts; Thu, 20 Aug 2026 01:24:06 -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=ivydSBsIsumMt29HlSgfgmushOMszTNlnxjrzrkZDeY=; b=jz/NFfyhd6YK
 MZaLkOGy0j39xQ5pgM7Za5EwZcXNPdGjjOWeh9tHhfK+QlAiYduL0vN6dDU2JLYnWNPMeM4LVv8DX
 seHAMgtZ3C/HrszXKqxdLnxS36s43kKTW2cZ2ra98Vop045ICMj+2l/NtFMQR2IArLoprC7RerelI
 v168j3c7KSDl+KPQsdX7OjLMRA3qfpgEpDLsNsyeHFa6QFYEWyxu42xPONXNWi/19fW3D717oiaLx
 8WaTBA7Vh3jzfzvhDeQHGCERgW6qmMx8+tjp2PGvxsuzUKSWg7m6aTT71MBy/U9bObQqduKjWDm1S
 eadxoTjYegqsurQ/vEOnzw==;
Date: Thu, 20 Aug 2026 08:24:04 +0300
Message-Id: <86lda11i17.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Sean Whitton <spwhitton@HIDDEN>
In-Reply-To: <87lda3raxx.fsf@HIDDEN> (message from Sean
 Whitton on Tue, 18 Aug 2026 11:15:54 +0100)
Subject: Re: bug#81645: 32.0.50; Annotations break *Completions* navigation
 in vertical format
References: <87a4qkhmep.fsf@HIDDEN> <86v7983js6.fsf@HIDDEN>
 <87lda3raxx.fsf@HIDDEN>
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 81645
Cc: 81645 <at> debbugs.gnu.org, stephen.berman@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

> From: Sean Whitton <spwhitton@HIDDEN>
> Cc: 81645 <at> debbugs.gnu.org
> Date: Tue, 18 Aug 2026 11:15:54 +0100
> 
> Eli Zaretskii [17/Aug  5:26pm +03] wrote:
> >> Cc: Eli Zaretskii <eliz@HIDDEN>, Sean Whitton <spwhitton@HIDDEN>
> >> From: Stephen Berman <stephen.berman@HIDDEN>
> >> Date: Mon, 17 Aug 2026 16:06:06 +0200
> >>
> >> 0. emacs -Q
> >> 1. (setopt completions-format 'vertical)
> >> 2. Sanity check: Typing `M-x auto- TAB' pops up the *Completions* buffer
> >>    and you can navigate up and down through each column by typing
> >>    `M-<DOWN>' and `M-<UP>' with wrapping from the last to the first
> >>    candidate and vice versa.
> >> 3. Now type `M-x abbrev- TAB', then repeatedly type `M-<DOWN>': after
> >>    the last candidate point wraps to the second instead of the first
> >>    candidate.
> >> 4. Now type `M-x dabbrev- TAB'.  Now typing `M-<DOWN>' once moves to
> >>    last candidate, but repeating `M-<DOWN>' does not move point (in
> >>    particular, no wrapping).  Now typing `M-<UP>' moves point back to
> >>    the first candidate, but typing `M-<UP>' again move point not to the
> >>    beginning of the last candidate but to the middle of the annotation
> >>    "(M-/)" affixed to the candidate.
> >>
> >> The problems in 3 and 4 are due to the annotations in the *Completions*
> >> buffer.  The attached patch fixes these problems, so that navigation in
> >> 3 and 4 work as in 2 according to my testing.  I think this patch should
> >> be applied to the release branch because the type of navigation in
> >> vertical format illustrated by 2 was introduced in Emacs 31 by commit
> >> 77ca60b48d01, which, however, failed to take annotations into account.
> >
> > I think this is fine to install on the emacs-31 release branch,
> > because the code it changes is specific to the 'vertical'
> > completions-format, which is new in Emacs 31.
> >
> > Sean?
> 
> Okay with me too.

Thanks.  Stephen, please install on the release branch when you have
time.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#81645; Package emacs. Full text available.

Message received at 81645 <at> debbugs.gnu.org:


Received: (at 81645) by debbugs.gnu.org; 18 Aug 2026 10:16:03 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Aug 18 06:16:03 2026
Received: from localhost ([127.0.0.1]:48837 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1wwGrS-0002kA-O5
	for submit <at> debbugs.gnu.org; Tue, 18 Aug 2026 06:16:03 -0400
Received: from fout-a8-smtp.messagingengine.com ([103.168.172.151]:46835)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <spwhitton@HIDDEN>)
 id 1wwGrR-0002jV-3n
 for 81645 <at> debbugs.gnu.org; Tue, 18 Aug 2026 06:16:01 -0400
Received: from phl-compute-03.internal (phl-compute-03.internal [10.202.2.43])
 by mailfout.phl.internal (Postfix) with ESMTP id EE431EC0294;
 Tue, 18 Aug 2026 06:15:55 -0400 (EDT)
Received: from phl-frontend-03 ([10.202.2.162])
 by phl-compute-03.internal (MEProxy); Tue, 18 Aug 2026 06:15:55 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=spwhitton.name;
 h=cc:cc:content-type:content-type:date:date:from:from
 :in-reply-to:in-reply-to:message-id:mime-version:references
 :reply-to:subject:subject:to:to; s=fm2; t=1787048155; x=
 1787134555; bh=Ds8cSrE5Qi8c5U2XPAQ4z344Uu4X5NtZVJtW6lRTpUY=; b=m
 4zZcPHp7pqmZKXNCzSdXsRu7OVqLyBisisD7bNN+HTAfCYKRMr4POezVg9ANOOOx
 lKK3AuYYJoXkogv7CJf/GYtZWI9kxObeQRJjggRoYnAe1MqJYZAzXRNYhOpLZLwS
 h0rd0pUWkGMEvURJteHhwNIhA+wDOUTF5zt+gVqNTT8c+qkoaVygTSd5gZxd8NrH
 76kshXNC8aQghCza1vFvHx34MHhKv3VcTWiEweWa0dzZtzvxeXGtRfalBDgcOWuA
 8AHlhi2s+MPG34IH6bucnudJzv8mAG/6oboYkZHzhCRYs41FOssqYiw1zIdgcaxJ
 T3HkSHRLaRwrSdfqqGYbQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-type:content-type:date:date
 :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to
 :message-id:mime-version:references:reply-to:subject:subject:to
 :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=
 1787048155; x=1787134555; bh=Ds8cSrE5Qi8c5U2XPAQ4z344Uu4X5NtZVJt
 W6lRTpUY=; b=VVMDdzxzCkHpb4FYqToL9rXdIX6XIJgBCjHNkuqPN0Lqj7uv9Xu
 whjc+Dq0ZdPsKe8l7l2YItnfeEiru4NXrEeX3Lzw5AZF90W8wGDMOHSmr0t/aA5t
 3fv7BEe3mavCX6WcrUp/xTH6QS9MVIEoaqcGV6L+L5roQFWLEfmFFwVQlwNblKee
 RzzpkxW5nj/tctvlR0KXCdlXA8q2UFgFvuQQ52eoUVQqQUXlc/hSEA4wqMQgSnop
 B5qVTv22REAy84ITvMD+B1p7AroQj0ioeYvG15mbqg2JY5wmxEWB9RHJ2tJpRwX3
 k9D1djWsTb51AGf1f83B3K7ZoYgt9G137MQ==
X-ME-Sender: <xms:2zCEamwPF-ezSWu5HvJxbzqAMR5hU1VY6HRr9_GRRwIBCDY4NtVtLw>
 <xme:2zCEapuQDq5SNDmR7HZ9QYpkT_vMWUfwVJ4nQ7VmTvnDcESR31hYpAP7gp7-7Pegy
 9di8-XZil9Zb58Z867pyuedxzxo6EcOTzaQL_gNfLgUYu0NFGMhiL4>
X-ME-Received: <xmr:2zCEalvcgB9sD2NJTFXhWBUZdcyzpo8N7m-SQp_xtwwZ9V5F_4OVZrNPcmaSD2HgexYMgjx5XGkY>
X-ME-Proxy-Cause: dmFkZTFtBJuR/Xm56WP7xqBJByq+9PlCl/wC2RHXV4Gm+O3IY0bsCazlOpg/GbXpFlh472
 BuVxtLvHnk0zhb1Q6tds+5Lm+simmkXpmCHvKst4pgwWfvFSIPQyhdG7YwVsJun3Nj3KTU
 qb+gbSH+FKdl+PyMlH0fnH+W/BoSGS+S0xYNawWp38jfbzJORtqoSfwALJpcqOXbDt5y0h
 a/WydMT6Zy1w5i0MLcNsRS2GYHlgHMuGqDva1w+59zHHz2J74CU+Xw/nxP12A3ngeJj8tn
 /+yWV0S3aSbJDaUuRNilqO2vGt+pkhw7e5HGOZ9NFt8tldKBTYhABkeW6KMNGI0McalVWv
 ATytH1bRa/rY/iisOXcbhHNnQOOxmG2hCOEnhrjXKdplejoHW8f7raYowNoP1HtoQJpQ+p
 lM+Yz8fU6U+Nn0wvpmIEXGjIgxN+Z92eHth6MXIBrXumcYvRlu8RWMJ70ssLu4OrxZsifO
 TA1KPt+UMnFIbhklW0DOphb5Xyyfr000dVp1hhyq67pKhYtdx81ARfFusiG10AVTUeQTI/
 l9SZrfLicPZ45D/FjVjJkSrAyyUOVkWqt4LgcrR4E/c0N8dhuSoRzHGDy9P9KJMUitIWkr
 lZvn1d/vlBF0oYT8UwvGJ6ttPCZ+j0oUR1IEfku0OL5eQMcs/PGcf3a6QpRA
X-ME-Proxy: <xmx:2zCEamMYhibvqYmmLm_h8hYcrYVPDESxSVFtcaQekSCELFiPNTUyeg>
 <xmx:2zCEar3PpqA-YqLbypvK78RPmH3qXYuuQsjyYMtUcsXSndSjcIR-Vw>
 <xmx:2zCEaqPCd7jZMLJv_DOmMzumfjZ37jTAkse6wucF_HwSGMfV9QIFMw>
 <xmx:2zCEaj1b81nns2n7243t-qEhJH7j_DQXztVyD4120mP9IYS45rA-IA>
 <xmx:2zCEasfClS8LKt60vEhuUvBWmFiv19tTmqvdB9st6DSYQEKGM8ZQoiFg>
Feedback-ID: i62564b17:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue,
 18 Aug 2026 06:15:55 -0400 (EDT)
Received: by melete.silentflame.com (Postfix, from userid 1000)
 id 6C9597E666A; Tue, 18 Aug 2026 11:15:54 +0100 (BST)
From: Sean Whitton <spwhitton@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>, Stephen Berman <stephen.berman@HIDDEN>
Subject: Re: bug#81645: 32.0.50; Annotations break *Completions* navigation
 in vertical format
In-Reply-To: <86v7983js6.fsf@HIDDEN>
References: <87a4qkhmep.fsf@HIDDEN> <86v7983js6.fsf@HIDDEN>
Date: Tue, 18 Aug 2026 11:15:54 +0100
Message-ID: <87lda3raxx.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 81645
Cc: 81645 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

Eli Zaretskii [17/Aug  5:26pm +03] wrote:
>> Cc: Eli Zaretskii <eliz@HIDDEN>, Sean Whitton <spwhitton@HIDDEN>
>> From: Stephen Berman <stephen.berman@HIDDEN>
>> Date: Mon, 17 Aug 2026 16:06:06 +0200
>>
>> 0. emacs -Q
>> 1. (setopt completions-format 'vertical)
>> 2. Sanity check: Typing `M-x auto- TAB' pops up the *Completions* buffer
>>    and you can navigate up and down through each column by typing
>>    `M-<DOWN>' and `M-<UP>' with wrapping from the last to the first
>>    candidate and vice versa.
>> 3. Now type `M-x abbrev- TAB', then repeatedly type `M-<DOWN>': after
>>    the last candidate point wraps to the second instead of the first
>>    candidate.
>> 4. Now type `M-x dabbrev- TAB'.  Now typing `M-<DOWN>' once moves to
>>    last candidate, but repeating `M-<DOWN>' does not move point (in
>>    particular, no wrapping).  Now typing `M-<UP>' moves point back to
>>    the first candidate, but typing `M-<UP>' again move point not to the
>>    beginning of the last candidate but to the middle of the annotation
>>    "(M-/)" affixed to the candidate.
>>
>> The problems in 3 and 4 are due to the annotations in the *Completions*
>> buffer.  The attached patch fixes these problems, so that navigation in
>> 3 and 4 work as in 2 according to my testing.  I think this patch should
>> be applied to the release branch because the type of navigation in
>> vertical format illustrated by 2 was introduced in Emacs 31 by commit
>> 77ca60b48d01, which, however, failed to take annotations into account.
>
> I think this is fine to install on the emacs-31 release branch,
> because the code it changes is specific to the 'vertical'
> completions-format, which is new in Emacs 31.
>
> Sean?

Okay with me too.

-- 
Sean Whitton




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#81645; Package emacs. Full text available.

Message received at 81645 <at> debbugs.gnu.org:


Received: (at 81645) by debbugs.gnu.org; 17 Aug 2026 14:26:45 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Aug 17 10:26:45 2026
Received: from localhost ([127.0.0.1]:40033 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1wvyIX-0003Ia-Gb
	for submit <at> debbugs.gnu.org; Mon, 17 Aug 2026 10:26:45 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:35120)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1wvyIV-0003IL-5T
 for 81645 <at> debbugs.gnu.org; Mon, 17 Aug 2026 10:26:43 -0400
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 <eliz@HIDDEN>)
 id 1wvyIP-0004N6-Ci; Mon, 17 Aug 2026 10:26:37 -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=3GlHRlYODF2V/NioBv3q8aCbYmuZg28/pbY3V6lChwY=; b=nmPp4VzyjSyT
 VzX0gEQwud9V9an3pEkxpv2WkVitEbqBvCB49qaz2hrxpYR/hSrpjVSbra/ZzUwh9C+iAfcOphKh4
 LYT/phjzOYAbqN98Cc1GIAKcIMEKL21F+fCPfTS2H4AxINN4a6a+Q+MSqVq9GNsfpyGF2JfxdUZ/H
 3qiUsKjCaDRAcGqaYzvwAkkWzRNKr2NEHiQI2YfrOCISaEVeavnlO+62bs7KnsN5dOMi53yqcA/GE
 WEXdy1Hwg2BHbKyBDz/1/Ij8qHZLAk5u091jL1GpIDwzkRH99pKN2mPYEP0m1bXYgXCWFQddZ3zUk
 Gkak5gWdwwbjuGdYm6jQnA==;
Date: Mon, 17 Aug 2026 17:26:33 +0300
Message-Id: <86v7983js6.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Stephen Berman <stephen.berman@HIDDEN>
In-Reply-To: <87a4qkhmep.fsf@HIDDEN> (message from Stephen Berman on Mon, 17
 Aug 2026 16:06:06 +0200)
Subject: Re: bug#81645: 32.0.50;
 Annotations break *Completions* navigation in vertical format
References: <87a4qkhmep.fsf@HIDDEN>
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 81645
Cc: 81645 <at> debbugs.gnu.org, spwhitton@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

> Cc: Eli Zaretskii <eliz@HIDDEN>, Sean Whitton <spwhitton@HIDDEN>
> From: Stephen Berman <stephen.berman@HIDDEN>
> Date: Mon, 17 Aug 2026 16:06:06 +0200
> 
> 0. emacs -Q
> 1. (setopt completions-format 'vertical)
> 2. Sanity check: Typing `M-x auto- TAB' pops up the *Completions* buffer
>    and you can navigate up and down through each column by typing
>    `M-<DOWN>' and `M-<UP>' with wrapping from the last to the first
>    candidate and vice versa.
> 3. Now type `M-x abbrev- TAB', then repeatedly type `M-<DOWN>': after
>    the last candidate point wraps to the second instead of the first
>    candidate.
> 4. Now type `M-x dabbrev- TAB'.  Now typing `M-<DOWN>' once moves to
>    last candidate, but repeating `M-<DOWN>' does not move point (in
>    particular, no wrapping).  Now typing `M-<UP>' moves point back to
>    the first candidate, but typing `M-<UP>' again move point not to the
>    beginning of the last candidate but to the middle of the annotation
>    "(M-/)" affixed to the candidate.
> 
> The problems in 3 and 4 are due to the annotations in the *Completions*
> buffer.  The attached patch fixes these problems, so that navigation in
> 3 and 4 work as in 2 according to my testing.  I think this patch should
> be applied to the release branch because the type of navigation in
> vertical format illustrated by 2 was introduced in Emacs 31 by commit
> 77ca60b48d01, which, however, failed to take annotations into account.

I think this is fine to install on the emacs-31 release branch,
because the code it changes is specific to the 'vertical'
completions-format, which is new in Emacs 31.

Sean?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#81645; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 17 Aug 2026 14:06:33 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Aug 17 10:06:33 2026
Received: from localhost ([127.0.0.1]:39979 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1wvxyy-0001r6-Ml
	for submit <at> debbugs.gnu.org; Mon, 17 Aug 2026 10:06:33 -0400
Received: from lists1p.gnu.org ([2001:470:142::17]:58620)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <stephen.berman@HIDDEN>)
 id 1wvxyw-0001pE-3Z
 for submit <at> debbugs.gnu.org; Mon, 17 Aug 2026 10:06:30 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <stephen.berman@HIDDEN>)
 id 1wvxyf-0003gm-BF
 for bug-gnu-emacs@HIDDEN; Mon, 17 Aug 2026 10:06:13 -0400
Received: from mout.gmx.net ([212.227.17.20])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <stephen.berman@HIDDEN>)
 id 1wvxyb-0006yf-GG
 for bug-gnu-emacs@HIDDEN; Mon, 17 Aug 2026 10:06:13 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net;
 s=s31663417; t=1786975567; x=1787580367; i=stephen.berman@HIDDEN;
 bh=xgXIMwYcKEye/rAfdPVMcswtsaDSo9XDguZFrQa45bQ=;
 h=X-UI-Sender-Class:From:To:Subject:Date:Message-ID:MIME-Version:
 Content-Type:cc:content-transfer-encoding:content-type:date:from:
 message-id:mime-version:reply-to:subject:to;
 b=uJBAUEteCLi+QQle2c0Vu+jRiOVTBtWTVPRIz6szNdX5EHqleUfoJcWefGRDFnmu
 weFpn0D+qlb1F6eRgG4i5TnwLmfp652i15gVa0aLOvgTlFpvL0YppDo85qYWxfSaw
 fQNnh1BHc0Aq9so9GAPfxHn40ZTikpunRHobHzJbJfXUyKKZXb3AQv3ubv/4KqHeG
 BqbgLxA1beUu1e4g7kC4gj8I52I7F8nqkHsFdABckiHaLEZGITge2OnibCE5Ij5xK
 7YNJgLc1XAg+Rkdm+tcRqtu1L1vPxvyJvD6Q5CfJE3Mp+8WtxYLb9i8wamvEpw8i5
 5Acx9KlUldPI+RXBWA==
X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a
Received: from client.hidden.invalid by mail.gmx.net (mrgmx104
 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MORAU-1xKlxR2BTy-00SWFr for
 <bug-gnu-emacs@HIDDEN>; Mon, 17 Aug 2026 16:06:07 +0200
From: Stephen Berman <stephen.berman@HIDDEN>
To: bug-gnu-emacs@HIDDEN
Subject: 32.0.50; Annotations break *Completions* navigation in vertical format
X-Debbugs-Cc: Eli Zaretskii <eliz@HIDDEN>, Sean Whitton
 <spwhitton@HIDDEN>
Date: Mon, 17 Aug 2026 16:06:06 +0200
Message-ID: <87a4qkhmep.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Provags-ID: V03:K1:gTfEcEJTXbHLpp0QtJPcLX4QmhZGoqOaBhg0gTtJ9JKj9ujeOwc
 hqz3heu+8/hKik00jouj7ETRA2drGPoeOEqe5fON54qE7omKjBU1tQNtccBOVfl6cAX9E5S
 NIznK2ob2W/n1vF2U9SjoyUomVjpLw/fQR7I4sktnhCj4mKX/3MvEWH6+q/sJ5Y7J7skMEi
 YV6xdTtYifeEdcMnG+O9A==
X-Spam-Flag: NO
UI-OutboundReport: notjunk:1;M01:P0:ibU3qCONwQQ=;6J4RvdyV7Bcylh5egSRcZo9N1oU
 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
 4E2bxmQ==
Received-SPF: pass client-ip=212.227.17.20;
 envelope-from=stephen.berman@HIDDEN; helo=mout.gmx.net
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.2 (+)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 Content preview: 0. emacs -Q 1. (setopt completions-format 'vertical) 2.
 Sanity
 check: Typing `M-x auto- TAB' pops up the *Completions* buffer and you can
 navigate up and down through each column by typing `M-<DOWN>' [...] 
 Content analysis details:   (1.2 points, 10.0 required)
 pts rule name              description
 ---- ---------------------- --------------------------------------------------
 -0.0 SPF_HELO_PASS          SPF: HELO matches SPF record
 0.0 FREEMAIL_FROM          Sender email is commonly abused enduser mail
 provider (stephen.berman[at]gmx.net)
 0.0 T_SPF_PERMERROR        SPF: test of record failed (permerror)
 -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/,
 no trust [2001:470:142:0:0:0:0:17 listed in] [list.dnswl.org]
 1.2 SPOOFED_FREEMAIL       No description available.
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--=-=-=
Content-Type: text/plain

0. emacs -Q
1. (setopt completions-format 'vertical)
2. Sanity check: Typing `M-x auto- TAB' pops up the *Completions* buffer
   and you can navigate up and down through each column by typing
   `M-<DOWN>' and `M-<UP>' with wrapping from the last to the first
   candidate and vice versa.
3. Now type `M-x abbrev- TAB', then repeatedly type `M-<DOWN>': after
   the last candidate point wraps to the second instead of the first
   candidate.
4. Now type `M-x dabbrev- TAB'.  Now typing `M-<DOWN>' once moves to
   last candidate, but repeating `M-<DOWN>' does not move point (in
   particular, no wrapping).  Now typing `M-<UP>' moves point back to
   the first candidate, but typing `M-<UP>' again move point not to the
   beginning of the last candidate but to the middle of the annotation
   "(M-/)" affixed to the candidate.

The problems in 3 and 4 are due to the annotations in the *Completions*
buffer.  The attached patch fixes these problems, so that navigation in
3 and 4 work as in 2 according to my testing.  I think this patch should
be applied to the release branch because the type of navigation in
vertical format illustrated by 2 was introduced in Emacs 31 by commit
77ca60b48d01, which, however, failed to take annotations into account.


In GNU Emacs 32.0.50 (build 8, x86_64-pc-linux-gnu, GTK+ Version
 3.24.52, cairo version 1.18.4) of 2026-08-14 built on strobelfs
Repository revision: cb22cfe1414bc3aa5a0e0b54f41f5b3453cb1f01
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101024
System Description: Linux From Scratch r13.0-156

Configured using:
 'configure -C --with-native-compilation=no 'CFLAGS=-Og -g3'
 PKG_CONFIG_PATH=/opt/qt6/lib/pkgconfig'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
LCMS2 LIBSYSTEMD LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP
SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM
XINERAMA XINPUT2 XPM XRANDR GTK3 ZLIB

--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment
Content-Description: patch for 'last-completion'

diff --git a/lisp/simple.el b/lisp/simple.el
index 1f7d57f299a..137734d9f03 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -10176,8 +10176,11 @@ last-completion
           (last-col (progn
                       (first-completion)
                       (goto-char (pos-eol))
-                      (goto-char (previous-single-property-change
-                                  (point) 'mouse-face))
+                      ;; Go to the beginning of the candidate.  We loop
+                      ;; to move past any completion annotations.
+                      (while (not (get-text-property (point) 'mouse-face))
+                        (goto-char
+                         (previous-single-property-change (point) 'mouse-face)))
                       (current-column))))
       (if (zerop last-col)
           ;; If there is only one column of completions, the last

--=-=-=--




Acknowledgement sent to Stephen Berman <stephen.berman@HIDDEN>:
New bug report received and forwarded. Copy sent to eliz@HIDDEN, spwhitton@HIDDEN, bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to eliz@HIDDEN, spwhitton@HIDDEN, bug-gnu-emacs@HIDDEN:
bug#81645; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Fri, 21 Aug 2026 15:15:01 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.