* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
@ 2024-07-18 12:13 Eason Huang
2024-07-18 12:41 ` Eli Zaretskii
0 siblings, 1 reply; 17+ messages in thread
From: Eason Huang @ 2024-07-18 12:13 UTC (permalink / raw)
To: 72176
Hello Emacs devel,
I tried to use icomplete-vertical-mode, but it doesn't works with
Emacs 30.0.60 and Emacs 31.0.50.
when trying `C-x C-f ~/` and input the first character of the names of
folders under home directory, will get bellow error:
```
Error in post-command-hook (icomplete-post-command-hook): (wrong-type-argument number-or-marker-p nil)
```
steps to reproduce:
1. start Emacs with `emacs -Q`
2. `M-x icomplete-vertical-mode` enable icomplete-vertical-mode
3. try to open some file under the directory under Home directory
such as: `C-x C-f ~/` and then input the name a directory,
here I will input `t` charactor, because I have the tmp folder.
4. Now you will get the error:
```
Error in post-command-hook (icomplete-post-command-hook): (wrong-type-argument number-or-marker-p nil)
```
In GNU Emacs 30.0.60 (build 1, x86_64-apple-darwin23.5.0, NS
appkit-2487.60 Version 14.5 (Build 23F79), git sha1 5916b172bdc)
of 2024-07-18 built on macbook
Windowing system distributor 'Apple', version 10.3.2487
System Description: macOS 14.5
Configured using:
'configure --without-native-compilation --without-dbus
'CPPFLAGS=-I/opt/local/include
-isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk'
'LDFLAGS=-L/opt/local/lib -Wl,-headerpad_max_install_names -Wl,-rpath
/opt/local/lib/gcc13
-Wl,-syslibroot,/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
-arch x86_64''
Configured features:
ACL GIF GLIB GMP GNUTLS JPEG LCMS2 LIBXML2 MODULES NOTIFY KQUEUE NS
PDUMPER PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER
WEBP XIM ZLIB
Important settings:
value of $LANG: zh_CN.UTF-8
locale-coding-system: utf-8-unix
Major mode: ELisp/l
Minor modes in effect:
icomplete-vertical-mode: t
icomplete-mode: t
tooltip-mode: t
global-eldoc-mode: t
eldoc-mode: t
show-paren-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
minibuffer-regexp-mode: t
line-number-mode: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
Load-path shadows:
None found.
Features:
(shadow sort mail-extr emacsbug message mailcap yank-media puny rfc822
mml mml-sec password-cache epa derived epg rfc6068 epg-config gnus-util
text-property-search mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils vc-git diff-mode track-changes easy-mmode
vc-dispatcher time-date subr-x dired-aux dired dired-loaddefs cus-start
cus-load icomplete cl-loaddefs cl-lib china-util rmc iso-transl tooltip
cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-mode mwheel term/ns-win ns-win ucs-normalize mule-util
term/common-win tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer nadvice seq simple cl-generic indonesian philippine
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable backquote
threads kqueue cocoa ns lcms2 multi-tty make-network-process emacs)
Memory information:
((conses 16 61505 15630) (symbols 48 7204 0) (strings 32 17696 2392)
(string-bytes 1 421152) (vectors 16 11559)
(vector-slots 8 187120 13794) (floats 8 26 263)
(intervals 56 1455 20) (buffers 992 14))
--
Eason Huang
^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-18 12:13 bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error Eason Huang
@ 2024-07-18 12:41 ` Eli Zaretskii
2024-07-18 12:49 ` Visuwesh
2024-07-18 13:11 ` Arash Esbati
0 siblings, 2 replies; 17+ messages in thread
From: Eli Zaretskii @ 2024-07-18 12:41 UTC (permalink / raw)
To: Eason Huang; +Cc: 72176
> From: Eason Huang <aqua0210@foxmail.com>
> Date: Thu, 18 Jul 2024 20:13:21 +0800
>
> I tried to use icomplete-vertical-mode, but it doesn't works with
> Emacs 30.0.60 and Emacs 31.0.50.
>
> when trying `C-x C-f ~/` and input the first character of the names of
> folders under home directory, will get bellow error:
> ```
> Error in post-command-hook (icomplete-post-command-hook): (wrong-type-argument number-or-marker-p nil)
> ```
>
> steps to reproduce:
>
> 1. start Emacs with `emacs -Q`
> 2. `M-x icomplete-vertical-mode` enable icomplete-vertical-mode
> 3. try to open some file under the directory under Home directory
> such as: `C-x C-f ~/` and then input the name a directory,
> here I will input `t` charactor, because I have the tmp folder.
>
> 4. Now you will get the error:
>
> ```
> Error in post-command-hook (icomplete-post-command-hook): (wrong-type-argument number-or-marker-p nil)
> ```
I cannot reproduce this, but I'm not on macOS.
^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-18 12:41 ` Eli Zaretskii
@ 2024-07-18 12:49 ` Visuwesh
2024-07-18 14:34 ` Robert Pluim
2024-07-18 13:11 ` Arash Esbati
1 sibling, 1 reply; 17+ messages in thread
From: Visuwesh @ 2024-07-18 12:49 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 72176, Eason Huang
[வியாழன் ஜூலை 18, 2024] Eli Zaretskii wrote:
> I cannot reproduce this, but I'm not on macOS.
I cannot reproduce this on Linux either.
^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-18 12:41 ` Eli Zaretskii
2024-07-18 12:49 ` Visuwesh
@ 2024-07-18 13:11 ` Arash Esbati
1 sibling, 0 replies; 17+ messages in thread
From: Arash Esbati @ 2024-07-18 13:11 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 72176, Eason Huang
Eli Zaretskii <eliz@gnu.org> writes:
> I cannot reproduce this, but I'm not on macOS.
I can't reproduce this either, and I'm on macOS.
In GNU Emacs 31.0.50 (build 1, aarch64-apple-darwin23.5.0, NS
appkit-2487.60 Version 14.5 (Build 23F79)) of 2024-07-15 built on
MacMutant.fritz.box
Repository revision: eae1104f97ef944127eb5c977129b55f137e0830
Repository branch: master
Windowing system distributor 'Apple', version 10.3.2487
System Description: macOS 14.5
Configured using:
'configure --with-ns --without-pop --without-mailutils --with-threads
--with-modules --with-native-compilation --without-compress-install
'CFLAGS=-O2 -g0 -pipe'
'CPPFLAGS=-I/opt/homebrew/Cellar/gcc/14.1.0_2/include
-I/opt/homebrew/Cellar/libgccjit/14.1.0/include
-I/opt/homebrew/Cellar/gmp/6.3.0/include'
'LDFLAGS=-L/opt/homebrew/Cellar/gcc/14.1.0_2/lib/gcc/current
-L/opt/homebrew/Cellar/gmp/6.3.0/lib''
Best, Arash
^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-18 12:49 ` Visuwesh
@ 2024-07-18 14:34 ` Robert Pluim
2024-07-18 15:34 ` Eli Zaretskii
0 siblings, 1 reply; 17+ messages in thread
From: Robert Pluim @ 2024-07-18 14:34 UTC (permalink / raw)
To: Visuwesh; +Cc: 72176, Eli Zaretskii, Eason Huang
>>>>> On Thu, 18 Jul 2024 18:19:32 +0530, Visuwesh <visuweshm@gmail.com> said:
Visuwesh> [வியாழன் ஜூலை 18, 2024] Eli Zaretskii wrote:
>> I cannot reproduce this, but I'm not on macOS.
Visuwesh> I cannot reproduce this on Linux either.
I can, on Linux:
135 xsignal2 (Qwrong_type_argument, predicate, value);
(gdb) bt
#0 wrong_type_argument (predicate=predicate@entry=XIL(0xe490), value=XIL(0)) at data.c:135
#1 0x00005555555a4fc0 in CHECK_TYPE (x=<optimized out>, predicate=XIL(0xe490), ok=0) at /home/rpluim/repos/emacs-30/src/lisp.h:780
#2 check_number_coerce_marker (x=<optimized out>) at data.c:2682
#3 0x0000555555746ae9 in arithcompare (num1=make_fixnum(25), num2=XIL(0), comparison=comparison@entry=ARITH_GRTR) at data.c:2695
#4 0x00005555557485f5 in arithcompare_driver (comparison=<optimized out>, args=<optimized out>, nargs=<optimized out>) at data.c:2819
#5 Fgtr (nargs=2, args=0x7fffffffb940) at data.c:2851
#6 0x000055555575dac8 in eval_sub (form=<optimized out>) at eval.c:2570
#7 0x000055555575e8d2 in Fif (args=XIL(0x555556a5fad3)) at eval.c:391
#8 0x000055555575dbd7 in eval_sub (form=<optimized out>) at eval.c:2549
#9 0x000055555575fba9 in Fprogn (body=<optimized out>) at eval.c:439
#10 FletX (args=<optimized out>) at eval.c:1042
#11 0x000055555575dbd7 in eval_sub (form=<optimized out>) at eval.c:2549
#12 0x000055555575ebe1 in Fprogn (body=<optimized out>) at eval.c:439
#13 funcall_lambda (fun=fun@entry=XIL(0x5555563a4ad5), nargs=nargs@entry=3, arg_vector=arg_vector@entry=0x7fffffffbc90) at eval.c:3350
#14 0x000055555575f2fc in apply_lambda (fun=XIL(0x5555563a4ad5), args=<optimized out>, count=count@entry=...) at eval.c:3215
#15 0x000055555575d8cf in eval_sub (form=<optimized out>) at eval.c:2687
#16 0x000055555575ebe1 in Fprogn (body=<optimized out>) at eval.c:439
Lisp Backtrace:
">" (0xffffb940)
"if" (0xffffba50)
"let*" (0xffffbb80)
"completion--hilit-from-re" (0xffffbc90)
0x563e4930 PVEC_CLOSURE
"funcall" (0xffffbe70)
"if" (0xffffbf60)
"completion-lazy-hilit" (0xf0dff400)
"icomplete--render-vertical" (0xf0dff280)
"icomplete-completions" (0xf0dff1d0)
"icomplete-exhibit" (0xf0dff188)
"icomplete-post-command-hook" (0xffffc180)
"read-from-minibuffer" (0xffffc5e0)
which means `pos' is nil:
(defun completion--hilit-from-re (string regexp &optional point-idx)
"Fontify STRING using REGEXP POINT-IDX.
`completions-common-part' and `completions-first-difference' are
used. POINT-IDX is the position of point in the presumed \"PCM\"
pattern that was used to generate derive REGEXP from."
(let* ((md (and regexp (string-match regexp string) (cddr (match-data t))))
(pos (if point-idx (match-beginning point-idx) (match-end 0)))
(me (and md (match-end 0)))
(from 0))
(while md
(add-face-text-property from (pop md) 'completions-common-part nil string)
(setq from (pop md)))
(if (> (length string) pos) <== right here
(add-face-text-property
pos (1+ pos)
'completions-first-difference
nil string))
(unless (or (not me) (= from me))
(add-face-text-property from me 'completions-common-part nil string))
string))
Robert
--
^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-18 14:34 ` Robert Pluim
@ 2024-07-18 15:34 ` Eli Zaretskii
2024-07-19 7:15 ` Robert Pluim
0 siblings, 1 reply; 17+ messages in thread
From: Eli Zaretskii @ 2024-07-18 15:34 UTC (permalink / raw)
To: Robert Pluim; +Cc: 72176, aqua0210, visuweshm
> From: Robert Pluim <rpluim@gmail.com>
> Cc: Eli Zaretskii <eliz@gnu.org>, 72176@debbugs.gnu.org, Eason Huang
> <aqua0210@foxmail.com>
> Date: Thu, 18 Jul 2024 16:34:00 +0200
>
> >>>>> On Thu, 18 Jul 2024 18:19:32 +0530, Visuwesh <visuweshm@gmail.com> said:
>
> Visuwesh> [வியாழன் ஜூலை 18, 2024] Eli Zaretskii wrote:
> >> I cannot reproduce this, but I'm not on macOS.
>
> Visuwesh> I cannot reproduce this on Linux either.
>
> I can, on Linux:
(I tested on GNU/Linux as well, and couldn't reproduce.) Why does it
happen to you and not to others? What conditions should happen and
how to modify the recipe to reproduce this?
^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-18 15:34 ` Eli Zaretskii
@ 2024-07-19 7:15 ` Robert Pluim
2024-07-20 6:05 ` Eli Zaretskii
0 siblings, 1 reply; 17+ messages in thread
From: Robert Pluim @ 2024-07-19 7:15 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 72176, aqua0210, visuweshm
>>>>> On Thu, 18 Jul 2024 18:34:35 +0300, Eli Zaretskii <eliz@gnu.org> said:
Eli> (I tested on GNU/Linux as well, and couldn't reproduce.) Why does it
Eli> happen to you and not to others? What conditions should happen and
Eli> how to modify the recipe to reproduce this?
If I start emacs from "~", it doesnʼt happen, if I start it from eg
"~/repos/emacs-30" via "src/emacs -Q" then it does happen.
Robert
--
^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-19 7:15 ` Robert Pluim
@ 2024-07-20 6:05 ` Eli Zaretskii
2024-07-20 9:09 ` João Távora
2024-07-20 10:07 ` Eason Huang
0 siblings, 2 replies; 17+ messages in thread
From: Eli Zaretskii @ 2024-07-20 6:05 UTC (permalink / raw)
To: Robert Pluim, João Távora; +Cc: 72176, aqua0210, visuweshm
> From: Robert Pluim <rpluim@gmail.com>
> Cc: 72176@debbugs.gnu.org, aqua0210@foxmail.com, visuweshm@gmail.com
> Date: Fri, 19 Jul 2024 09:15:49 +0200
>
> >>>>> On Thu, 18 Jul 2024 18:34:35 +0300, Eli Zaretskii <eliz@gnu.org> said:
>
> Eli> (I tested on GNU/Linux as well, and couldn't reproduce.) Why does it
> Eli> happen to you and not to others? What conditions should happen and
> Eli> how to modify the recipe to reproduce this?
>
> If I start emacs from "~", it doesnʼt happen, if I start it from eg
> "~/repos/emacs-30" via "src/emacs -Q" then it does happen.
Thanks. I've applied the trivial band-aid on emacs-30 to avoid the
error in post-command-hook, but the real problem is not in the
function that signals the error, it's in icomplete.el where it calls
the lazy-highlight code. The evidence is that after the fix, the
display shown in those cases that caused the error is not the expected
one, unless you set icomplete-tidy-shadowed-file-names non-nil. It
sounds like the problem happens specifically when the minibuffer text
begins with a "~/" and there's another "~/" later in the minibuffer,
the one the user types: the code probably doesn't expect that.
Adding João, who I think wrote this code.
^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-20 6:05 ` Eli Zaretskii
@ 2024-07-20 9:09 ` João Távora
2024-07-20 10:15 ` Eli Zaretskii
2024-07-20 10:07 ` Eason Huang
1 sibling, 1 reply; 17+ messages in thread
From: João Távora @ 2024-07-20 9:09 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 72176, Robert Pluim, aqua0210, visuweshm
[-- Attachment #1: Type: text/plain, Size: 579 bytes --]
On Sat, Jul 20, 2024 at 7:05 AM Eli Zaretskii <eliz@gnu.org> wrote:
> Adding João, who I think wrote this code.
Don't understand root cause, but it's in the whereabouts of
the current analysis, yes. I recall regexp is supposed to always
match, because it has (presumably) been used for a previous
filtering. This breakage would seem to be a consequence of
3b07d33059150 by Eshel Yaron which in turn seems to be fixing
something stemming from some feature Dmitry added in
6b7ff60a5e71c in June. I went one commit before that one and
the recipe didn't break.
J
[-- Attachment #2: Type: text/html, Size: 793 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-20 6:05 ` Eli Zaretskii
2024-07-20 9:09 ` João Távora
@ 2024-07-20 10:07 ` Eason Huang
2024-07-20 10:43 ` Eli Zaretskii
1 sibling, 1 reply; 17+ messages in thread
From: Eason Huang @ 2024-07-20 10:07 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 72176, Robert Pluim, João Távora, visuweshm
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Robert Pluim <rpluim@gmail.com>
>> Cc: 72176@debbugs.gnu.org, aqua0210@foxmail.com, visuweshm@gmail.com
>> Date: Fri, 19 Jul 2024 09:15:49 +0200
>>
>> >>>>> On Thu, 18 Jul 2024 18:34:35 +0300, Eli Zaretskii <eliz@gnu.org> said:
>>
>> Eli> (I tested on GNU/Linux as well, and couldn't reproduce.) Why does it
>> Eli> happen to you and not to others? What conditions should happen and
>> Eli> how to modify the recipe to reproduce this?
>>
>> If I start emacs from "~", it doesnʼt happen, if I start it from eg
>> "~/repos/emacs-30" via "src/emacs -Q" then it does happen.
>
> Thanks. I've applied the trivial band-aid on emacs-30 to avoid the
> error in post-command-hook, but the real problem is not in the
> function that signals the error, it's in icomplete.el where it calls
> the lazy-highlight code. The evidence is that after the fix, the
> display shown in those cases that caused the error is not the expected
> one, unless you set icomplete-tidy-shadowed-file-names non-nil. It
> sounds like the problem happens specifically when the minibuffer text
> begins with a "~/" and there's another "~/" later in the minibuffer,
> the one the user types: the code probably doesn't expect that.
>
> Adding João, who I think wrote this code.
>
>
Hi Eli,
I tried with the latest commit of Emacs-30(git sha1 ea30ffc52b3),
Now the issue is fixed.
Thanks
--
Eason Huang
^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-20 9:09 ` João Távora
@ 2024-07-20 10:15 ` Eli Zaretskii
2024-07-20 16:48 ` Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 17+ messages in thread
From: Eli Zaretskii @ 2024-07-20 10:15 UTC (permalink / raw)
To: João Távora, Eshel Yaron, Dmitry Gutov
Cc: 72176, rpluim, aqua0210, visuweshm
> From: João Távora <joaotavora@gmail.com>
> Date: Sat, 20 Jul 2024 10:09:38 +0100
> Cc: Robert Pluim <rpluim@gmail.com>, 72176@debbugs.gnu.org, aqua0210@foxmail.com,
> visuweshm@gmail.com
>
> On Sat, Jul 20, 2024 at 7:05 AM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > Adding João, who I think wrote this code.
>
> Don't understand root cause, but it's in the whereabouts of
> the current analysis, yes. I recall regexp is supposed to always
> match, because it has (presumably) been used for a previous
> filtering. This breakage would seem to be a consequence of
> 3b07d33059150 by Eshel Yaron which in turn seems to be fixing
> something stemming from some feature Dmitry added in
> 6b7ff60a5e71c in June. I went one commit before that one and
> the recipe didn't break.
Thanks, I'm adding the guilty parties to this discussion. Eshel and
Dmitry, could you please look into this?
^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-20 10:07 ` Eason Huang
@ 2024-07-20 10:43 ` Eli Zaretskii
0 siblings, 0 replies; 17+ messages in thread
From: Eli Zaretskii @ 2024-07-20 10:43 UTC (permalink / raw)
To: Eason Huang; +Cc: 72176, rpluim, joaotavora, visuweshm
> From: Eason Huang <aqua0210@foxmail.com>
> Cc: Robert Pluim <rpluim@gmail.com>, João Távora
> <joaotavora@gmail.com>,
> 72176@debbugs.gnu.org, visuweshm@gmail.com
> Date: Sat, 20 Jul 2024 18:07:19 +0800
>
> Eli Zaretskii <eliz@gnu.org> writes:
>
> > Thanks. I've applied the trivial band-aid on emacs-30 to avoid the
> > error in post-command-hook, but the real problem is not in the
> > function that signals the error, it's in icomplete.el where it calls
> > the lazy-highlight code. The evidence is that after the fix, the
> > display shown in those cases that caused the error is not the expected
> > one, unless you set icomplete-tidy-shadowed-file-names non-nil. It
> > sounds like the problem happens specifically when the minibuffer text
> > begins with a "~/" and there's another "~/" later in the minibuffer,
> > the one the user types: the code probably doesn't expect that.
> >
> > Adding João, who I think wrote this code.
> >
> >
>
>
> Hi Eli,
>
> I tried with the latest commit of Emacs-30(git sha1 ea30ffc52b3),
> Now the issue is fixed.
Thanks for testing.
^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-20 10:15 ` Eli Zaretskii
@ 2024-07-20 16:48 ` Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-21 2:27 ` Dmitry Gutov
2024-07-21 21:42 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 2 replies; 17+ messages in thread
From: Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-07-20 16:48 UTC (permalink / raw)
To: Eli Zaretskii
Cc: rpluim, Dmitry Gutov, João Távora, visuweshm, 72176,
aqua0210, Stefan Monnier
Eli Zaretskii <eliz@gnu.org> writes:
>> From: João Távora <joaotavora@gmail.com>
>> Date: Sat, 20 Jul 2024 10:09:38 +0100
>> Cc: Robert Pluim <rpluim@gmail.com>, 72176@debbugs.gnu.org, aqua0210@foxmail.com,
>> visuweshm@gmail.com
>>
>> On Sat, Jul 20, 2024 at 7:05 AM Eli Zaretskii <eliz@gnu.org> wrote:
>>
>> > Adding João, who I think wrote this code.
>>
>> Don't understand root cause, but it's in the whereabouts of
>> the current analysis, yes. I recall regexp is supposed to always
>> match, because it has (presumably) been used for a previous
>> filtering. This breakage would seem to be a consequence of
>> 3b07d33059150 by Eshel Yaron which in turn seems to be fixing
>> something stemming from some feature Dmitry added in
>> 6b7ff60a5e71c in June. I went one commit before that one and
>> the recipe didn't break.
>
> Thanks, I'm adding the guilty parties to this discussion.
I'm afraid you missed your mark, because AFAICT it is Stefan Monnier
that's behind the root cause of this issue, which goes back way before
Dmitry's change or mine :)
It is a bug in completion--sifn-requote, that leads to incorrect
completion strings to be passed to completion-lazy-hilit. It is not
related to icomplete per se. To see the issue, try the following:
1. emacs -Q
2. say C-x C-f, clear the minibuffer, and insert ~/.config/~/f
3. hit ? to pop the completions list
4. see something like:
--8<---------------cut here---------------start------------->8---
Click or type M-RET on a completion to select it.
Type M-<down> or M-<up> to move point between completions.
6 possible completions:
.config/~/foo.json .config/~/foo.org .config/~/foo.php
.config/~/foo.py .config/~/foo.py~ .config/~/foo.rs
--8<---------------cut here---------------end--------------->8---
Note the incorrect prefix ".config/~/", completions should appear as
"foo.json", "foo.org", etc.
The following diff fixes this for me (including the icomplete symptom),
although I can't claim to fully understand completion--sifn-requote yet:
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 31c365bf850..d0eb6b43c80 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -3855,13 +3855,13 @@ completion--sifn-requote
;; Second assumptions: If qpos is far from the end this can be a bit slow,
;; so we speed it up by doing a first loop that skips a word at a time.
;; This word-sized loop is careful not to cut in the middle of env-vars.
- (while (let ((boundary (string-match "\\(\\$+{?\\)?\\w+\\W*\\'" qstr)))
- (and boundary
- (progn
- (setq qprefix (substring qstr 0 boundary))
- (string-prefix-p uprefix
- (substitute-in-file-name qprefix)))))
- (setq qstr qprefix))
+ ;; (while (let ((boundary (string-match "\\(\\$+{?\\)?\\w+\\W*\\'" qstr)))
+ ;; (and boundary
+ ;; (progn
+ ;; (setq qprefix (substring qstr 0 boundary))
+ ;; (string-prefix-p uprefix
+ ;; (substitute-in-file-name qprefix)))))
+ ;; (setq qstr qprefix))
(let ((qpos (length qstr)))
(while (and (> qpos 0)
(string-prefix-p uprefix
^ permalink raw reply related [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-20 16:48 ` Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-07-21 2:27 ` Dmitry Gutov
2024-07-21 21:42 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
1 sibling, 0 replies; 17+ messages in thread
From: Dmitry Gutov @ 2024-07-21 2:27 UTC (permalink / raw)
To: Eshel Yaron, Eli Zaretskii
Cc: rpluim, Stefan Monnier, visuweshm, 72176, aqua0210,
João Távora
Hi Eshel,
On 20/07/2024 19:48, Eshel Yaron wrote:
> Eli Zaretskii <eliz@gnu.org> writes:
>
>>> From: João Távora <joaotavora@gmail.com>
>>> Date: Sat, 20 Jul 2024 10:09:38 +0100
>>> Cc: Robert Pluim <rpluim@gmail.com>, 72176@debbugs.gnu.org, aqua0210@foxmail.com,
>>> visuweshm@gmail.com
>>>
>>> On Sat, Jul 20, 2024 at 7:05 AM Eli Zaretskii <eliz@gnu.org> wrote:
>>>
>>>> Adding João, who I think wrote this code.
>>>
>>> Don't understand root cause, but it's in the whereabouts of
>>> the current analysis, yes. I recall regexp is supposed to always
>>> match, because it has (presumably) been used for a previous
>>> filtering. This breakage would seem to be a consequence of
>>> 3b07d33059150 by Eshel Yaron which in turn seems to be fixing
>>> something stemming from some feature Dmitry added in
>>> 6b7ff60a5e71c in June. I went one commit before that one and
>>> the recipe didn't break.
>>
>> Thanks, I'm adding the guilty parties to this discussion.
>
> I'm afraid you missed your mark, because AFAICT it is Stefan Monnier
> that's behind the root cause of this issue, which goes back way before
> Dmitry's change or mine :)
Thanks for investigating! It might or might not be considered a bug (the
behavior had been working out okay before our changes), but your
proposal does make it more consistent, so I hope we can use it.
vc-annotate for lines in question points to commit 86957a0cd which
references bug#11714. I _haven't_ been able to reproduce it with them
commented out now - my guess it's because of the file-name-quote
operation that had been added much later (the last comment in the bug
mentions that functionality as a hypothetical).
So maybe they really are unnecessary now. Though the
quoting-unquoting-requoting stuff is pretty gnarly, so it'd be great to
get a go-ahead from Stefan as well.
> It is a bug in completion--sifn-requote, that leads to incorrect
> completion strings to be passed to completion-lazy-hilit. It is not
> related to icomplete per se. To see the issue, try the following:
>
> 1. emacs -Q
> 2. say C-x C-f, clear the minibuffer, and insert ~/.config/~/f
> 3. hit ? to pop the completions list
> 4. see something like:
>
> --8<---------------cut here---------------start------------->8---
> Click or type M-RET on a completion to select it.
> Type M-<down> or M-<up> to move point between completions.
>
> 6 possible completions:
> .config/~/foo.json .config/~/foo.org .config/~/foo.php
> .config/~/foo.py .config/~/foo.py~ .config/~/foo.rs
> --8<---------------cut here---------------end--------------->8---
>
> Note the incorrect prefix ".config/~/", completions should appear as
> "foo.json", "foo.org", etc.
>
> The following diff fixes this for me (including the icomplete symptom),
> although I can't claim to fully understand completion--sifn-requote yet:
>
> diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
> index 31c365bf850..d0eb6b43c80 100644
> --- a/lisp/minibuffer.el
> +++ b/lisp/minibuffer.el
> @@ -3855,13 +3855,13 @@ completion--sifn-requote
> ;; Second assumptions: If qpos is far from the end this can be a bit slow,
> ;; so we speed it up by doing a first loop that skips a word at a time.
> ;; This word-sized loop is careful not to cut in the middle of env-vars.
> - (while (let ((boundary (string-match "\\(\\$+{?\\)?\\w+\\W*\\'" qstr)))
> - (and boundary
> - (progn
> - (setq qprefix (substring qstr 0 boundary))
> - (string-prefix-p uprefix
> - (substitute-in-file-name qprefix)))))
> - (setq qstr qprefix))
> + ;; (while (let ((boundary (string-match "\\(\\$+{?\\)?\\w+\\W*\\'" qstr)))
> + ;; (and boundary
> + ;; (progn
> + ;; (setq qprefix (substring qstr 0 boundary))
> + ;; (string-prefix-p uprefix
> + ;; (substitute-in-file-name qprefix)))))
> + ;; (setq qstr qprefix))
> (let ((qpos (length qstr)))
> (while (and (> qpos 0)
> (string-prefix-p uprefix
^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-20 16:48 ` Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-21 2:27 ` Dmitry Gutov
@ 2024-07-21 21:42 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-25 7:31 ` Eli Zaretskii
1 sibling, 1 reply; 17+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-07-21 21:42 UTC (permalink / raw)
To: Eshel Yaron
Cc: rpluim, Dmitry Gutov, João Távora, visuweshm, 72176,
Eli Zaretskii, aqua0210
> I'm afraid you missed your mark, because AFAICT it is Stefan Monnier
> that's behind the root cause of this issue, which goes back way before
> Dmitry's change or mine :)
How do you dare to put in doubt the perfection of my code!
> The following diff fixes this for me (including the icomplete symptom),
> although I can't claim to fully understand completion--sifn-requote yet:
>
> diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
> index 31c365bf850..d0eb6b43c80 100644
> --- a/lisp/minibuffer.el
> +++ b/lisp/minibuffer.el
> @@ -3855,13 +3855,13 @@ completion--sifn-requote
> ;; Second assumptions: If qpos is far from the end this can be a bit slow,
> ;; so we speed it up by doing a first loop that skips a word at a time.
> ;; This word-sized loop is careful not to cut in the middle of env-vars.
> - (while (let ((boundary (string-match "\\(\\$+{?\\)?\\w+\\W*\\'" qstr)))
> - (and boundary
> - (progn
> - (setq qprefix (substring qstr 0 boundary))
> - (string-prefix-p uprefix
> - (substitute-in-file-name qprefix)))))
> - (setq qstr qprefix))
> + ;; (while (let ((boundary (string-match "\\(\\$+{?\\)?\\w+\\W*\\'" qstr)))
> + ;; (and boundary
> + ;; (progn
> + ;; (setq qprefix (substring qstr 0 boundary))
> + ;; (string-prefix-p uprefix
> + ;; (substitute-in-file-name qprefix)))))
> + ;; (setq qstr qprefix))
> (let ((qpos (length qstr)))
> (while (and (> qpos 0)
> (string-prefix-p uprefix
That's helpful. So the "main assumption" is valid.
Indeed in your recipe the problem is that the while loop you comment out
(which implements the shortcut based on the "second assumption") ends up
throwing away the chunk we need. This is by nature very hackish,
and there will still be cases where it back-fires. Maybe indeed we
should just get rid of this shortcut, and maybe the resulting
performance is good enough.
Otherwise, the patch below should fix this particular occurrence.
BTW, while there's no doubt that the behavior displayed in your recipe
is undesirable, I consider it technically as "suboptimal" rather
than incorrect: the displayed completions are too verbose and confusing
but using them still ends up selecting the right file.
[ Which is why I changed the comment to clarify we want "the largest"
QPOS: in your recipe we end up returning a valid QPOS but not the
largest one. ]
Stefan
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 9ad072daaf5..6fa04e9a062 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -3556,7 +3556,7 @@ completion-file-name-table
(file-error nil))) ;PCM often calls with invalid directories.
(defun completion--sifn-requote (upos qstr)
- ;; We're looking for `qpos' such that:
+ ;; We're looking for (the largest) `qpos' such that:
;; (equal (substring (substitute-in-file-name qstr) 0 upos)
;; (substitute-in-file-name (substring qstr 0 qpos)))
;; Big problem here: we have to reverse engineer substitute-in-file-name to
@@ -3586,11 +3586,12 @@ completion--sifn-requote
;; Main assumption: nothing after qpos should affect the text before upos,
;; so we can work our way backward from the end of qstr, one character
;; at a time.
- ;; Second assumptions: If qpos is far from the end this can be a bit slow,
+ ;; Second assumption: If qpos is far from the end this can be a bit slow,
;; so we speed it up by doing a first loop that skips a word at a time.
;; This word-sized loop is careful not to cut in the middle of env-vars.
(while (let ((boundary (string-match "\\(\\$+{?\\)?\\w+\\W*\\'" qstr)))
(and boundary
+ (not (string-match-p "/[/~]" qstr boundary))
(progn
(setq qprefix (substring qstr 0 boundary))
(string-prefix-p uprefix
^ permalink raw reply related [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-21 21:42 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-07-25 7:31 ` Eli Zaretskii
2024-07-25 12:40 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 17+ messages in thread
From: Eli Zaretskii @ 2024-07-25 7:31 UTC (permalink / raw)
To: Stefan Monnier; +Cc: rpluim, dmitry, me, joaotavora, visuweshm, 72176, aqua0210
> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: Eli Zaretskii <eliz@gnu.org>, rpluim@gmail.com, Dmitry Gutov
> <dmitry@gutov.dev>, João Távora
> <joaotavora@gmail.com>,
> visuweshm@gmail.com, 72176@debbugs.gnu.org, aqua0210@foxmail.com
> Date: Sun, 21 Jul 2024 17:42:24 -0400
>
> That's helpful. So the "main assumption" is valid.
>
> Indeed in your recipe the problem is that the while loop you comment out
> (which implements the shortcut based on the "second assumption") ends up
> throwing away the chunk we need. This is by nature very hackish,
> and there will still be cases where it back-fires. Maybe indeed we
> should just get rid of this shortcut, and maybe the resulting
> performance is good enough.
>
> Otherwise, the patch below should fix this particular occurrence.
Thanks, please install on the emacs-30 branch.
^ permalink raw reply [flat|nested] 17+ messages in thread
* bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error
2024-07-25 7:31 ` Eli Zaretskii
@ 2024-07-25 12:40 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 0 replies; 17+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-07-25 12:40 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: rpluim, dmitry, me, joaotavora, visuweshm, 72176, aqua0210
> Thanks, please install on the emacs-30 branch.
Done,
Stefan
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2024-07-25 12:40 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-18 12:13 bug#72176: 30.0.60; icomplete-vertical-mode failed to work with Error Eason Huang
2024-07-18 12:41 ` Eli Zaretskii
2024-07-18 12:49 ` Visuwesh
2024-07-18 14:34 ` Robert Pluim
2024-07-18 15:34 ` Eli Zaretskii
2024-07-19 7:15 ` Robert Pluim
2024-07-20 6:05 ` Eli Zaretskii
2024-07-20 9:09 ` João Távora
2024-07-20 10:15 ` Eli Zaretskii
2024-07-20 16:48 ` Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-21 2:27 ` Dmitry Gutov
2024-07-21 21:42 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-25 7:31 ` Eli Zaretskii
2024-07-25 12:40 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-07-20 10:07 ` Eason Huang
2024-07-20 10:43 ` Eli Zaretskii
2024-07-18 13:11 ` Arash Esbati
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).