From: Juri Linkov <juri@linkov.net>
To: Andrii Kolomoiets <andreyk.mad@gmail.com>
Cc: olau@iola.dk, larsi@gnus.org, 19031@debbugs.gnu.org
Subject: bug#19031: 24.4; find-file in icomplete-mode shows completions with no input
Date: Wed, 09 Dec 2020 21:08:53 +0200 [thread overview]
Message-ID: <878sa71mnu.fsf@mail.linkov.net> (raw)
In-Reply-To: <m2tuswx9s6.fsf@gmail.com> (Andrii Kolomoiets's message of "Tue, 08 Dec 2020 23:33:45 +0200")
>> To make icomplete to not show completions until user starts typing filename,
>> icomplete could remember the initial minibuffer content immediately after its
>> activation, then after the user edits the minibuffer, compare the new content
>> with the stored initial one. So this doesn't require any changes
>> outside of icomplete.
>
> This may lead to unexpected behavior:
>
> (read-file-name "? " "~/" nil nil ".em")
>
> Completions will be shown for minibuffer content like "~/.e" and
> "~/.ema" but not for "~/.em".
Right, this behavior is described by the name of the option
icomplete-show-matches-on-no-input, i.e. with its default nil:
no input - no matches shown. So the patch below implements this.
> Please read "until user starts typing filename" in my previous message
> as "until input doesn't contains part of filename" ;)
This is some new feature that can be implemented by a new option,
maybe something similar to icomplete-tidy-shadowed-file-names.
>> I'm not sure if such special casing for directory separators is needed.
>> The option icomplete-show-matches-on-no-input is quite simple and it
>> should check if the user changed the initial content.
>
> Anyway the 'minibuffer-default' variable is not the right place to do
> such thing. It is used to provide default values which can be inserted
> into the minibuffer with 'M-n':
>
> 1. emacs -Q
> 2. M-: (setq enable-recursive-minibuffers t)
> 3. C-x C-f
> 4. M-: (setq minibuffer-default "foo")
> 5. M-n
I agree.
And here is the patch that implements what the name of
icomplete-show-matches-on-no-input suggests:
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 0fdacd0a3c..84a5f88234 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -146,6 +146,9 @@ icomplete-minibuffer-setup-hook
(defvar icomplete-overlay (make-overlay (point-min) (point-min) nil t t)
"Overlay used to display the list of completions.")
+(defvar icomplete-initial nil
+ "Initial input in the minibuffer.")
+
(defun icomplete-pre-command-hook ()
(let ((non-essential t))
(icomplete-tidy)))
@@ -441,6 +444,7 @@ icomplete-minibuffer-setup
"Run in minibuffer on activation to establish incremental completion.
Usually run by inclusion in `minibuffer-setup-hook'."
(when (and icomplete-mode (icomplete-simple-completing-p))
+ (setq-local icomplete-initial (minibuffer-contents))
(setq-local completion-show-inline-help nil)
(use-local-map (make-composed-keymap icomplete-minibuffer-map
(current-local-map)))
@@ -579,7 +583,9 @@ icomplete-exhibit
(goto-char (point-max))
; Insert the match-status information:
(when (and (or icomplete-show-matches-on-no-input
- (> (icomplete--field-end) (icomplete--field-beg)))
+ (if (stringp icomplete-initial)
+ (not (equal icomplete-initial (minibuffer-contents)))
+ (> (icomplete--field-end) (icomplete--field-beg))))
(or
;; Don't bother with delay after certain number of chars:
(> (- (point) (icomplete--field-beg))
next prev parent reply other threads:[~2020-12-09 19:08 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-12 11:25 bug#19031: 24.4; find-file in icomplete-mode shows completions with no input Ole Laursen
2020-12-04 10:35 ` Lars Ingebrigtsen
2020-12-04 11:37 ` Andrii Kolomoiets
2020-12-06 12:46 ` Lars Ingebrigtsen
2020-12-07 11:43 ` Ole Laursen
2020-12-08 8:51 ` Juri Linkov
2020-12-08 10:43 ` Andrii Kolomoiets
2020-12-08 13:29 ` Lars Ingebrigtsen
2020-12-08 15:34 ` Eli Zaretskii
2020-12-08 16:16 ` Andrii Kolomoiets
2020-12-08 17:09 ` Ole Laursen
2020-12-08 19:11 ` Juri Linkov
2020-12-08 21:33 ` Andrii Kolomoiets
2020-12-09 19:08 ` Juri Linkov [this message]
2020-12-10 8:08 ` Andrii Kolomoiets
2020-12-14 8:44 ` Juri Linkov
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=878sa71mnu.fsf@mail.linkov.net \
--to=juri@linkov.net \
--cc=19031@debbugs.gnu.org \
--cc=andreyk.mad@gmail.com \
--cc=larsi@gnus.org \
--cc=olau@iola.dk \
/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).