unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Drew Adams <drew.adams@oracle.com>
To: "João Távora" <joaotavora@gmail.com>, "Dmitry Gutov" <dgutov@yandex.ru>
Cc: Stefan Monnier <monnier@iro.umontreal.ca>,
	emacs-devel <emacs-devel@gnu.org>
Subject: RE: VOTE: Changing completions-common-part face's default
Date: Thu, 7 Nov 2019 08:57:15 -0800 (PST)	[thread overview]
Message-ID: <18f69d65-953e-46fd-9a5c-6edb1e58932b@default> (raw)
In-Reply-To: <CALDnm51QZrTTrWJ4Q10EjQ1UCQTBzvoOqmy5fZtjUiD-XP5mQA@mail.gmail.com>

> As soon as flex/fuzzy/scatter became accessible and popular
> (because of  programming speed) they decided to use ways to
> highlight the matches,  very often boldface.  So it's not a
> "trend" at all. We should ask Drew who probably has had such
> system in place for a much longer time.

I can't speak to any trends.  Different kinds of
fuzzy matching have existed outside and inside Emacs
for a long time, in various 3rd-party libraries.

AFAIK, I (in Icicles) was the first to use such
kinds of matching for _completion_ - that's all.
That dates back to 2006 or before.

More generally, beyond various kinds of what is
sometimes called "fuzzy" matching, there are kinds
of matching other than basic, prefix-only matching -
substring matching, for example.  And some of those
were added to Emacs, including for completion, and
including fairly long ago, ultimately as
`completion-styles'.

"Fuzzy" matching can, if you like, include
so-called "flex" matching (Icicles calls this
"scatter matching").

The basic scatter match is a "poor man's fuzzy".
It just uses a simple regexp constructed from the
chars you type, by inserting `.*' between them -
typing `abc' uses regexp `a.*b.*c'.

What Icicles also provides "SPC scatter" matching,
which, IIUC, what is used by Ivy (but someone can
correct me).  It's like scatter matching, but it
matches the parts of your input that are separated
by SPC chars - it matches arbitrary text at the
separations between those parts.

On their own, such scatter matching does not
provide or use any scoring.  But some more-truly
"fuzzy" matches do sometimes provide scoring.

Icicles highlighting of matches is pretty simple.
It doesn't bother to try, for some kinds of fuzzy
matching.  For those that translate to using a
regexp, such as the scatter matches, highlighting
is trivial (`string-match-p').

I already spoke to the utility of highlighting the
matched part (plus, in the case of Icicles, the
part that is common to all matching completions).

I'll just add, since someone brought this up: it's
not about not trusting the matching algorithm.
It's not about checking by eyeball, to see if
there are matches shown that you don't think
really belong there.  Not at all.

It's, yes, partly that "fuzzy" etc. completion is
not always obvious; the results are not always
what one might expect.

But more importantly, it's just to provide you
_feedback on what you're doing_.  You're matching
input against a domain of possible candidates -
you're exploring that domain.  Visually connecting
what you do with what you get really does help.

And, since the contrary has been said several
times now in this thread, it's _not_ just about
figuring out what the next char you type should be.

The "next char you type" is only one way to
interact with the set of possible candidates and
the set of current matches.  Focusing on that's
based on thinking in terms of prefix matching,
choosing a single candidate, and immediately
exiting completion.

Besides the "next char you type", there's what
chars you might delete, and where, what chars
you might insert, and where - and many other
actions, which might have nothing to do with
editing your input.

When you can act in many different ways on
particular, or all, current matches, it really
helps to be able to distinguish them in terms
of which of their parts match the input pattern.

Dunno how to explain this more, briefly.  I'm
sure that those users who've used completion
setups that let you act on multiple candidates
or in multiple ways, or that let you match in
more complex (sometimes unclear) ways, get it.
For those who don't, I say play with it, and
you will.

FWIW, I'm _not_ a big proponent of fuzzy
matching.  I'm a big proponent of substring
and regexp matching.

What I use, myself, the vast majority of the
time, is regexp matching, which includes
substring matching.

But YMMV.  And Icicles does provide several
kinds of fuzzy matching.  This page describes
them:

https://www.emacswiki.org/emacs/Icicles_-_Completion_Methods_and_Styles



  reply	other threads:[~2019-11-07 16:57 UTC|newest]

Thread overview: 167+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-27  1:58 BIKESHED: completion faces Stefan Monnier
2019-10-27 11:34 ` João Távora
2019-10-27 21:45 ` Juri Linkov
2019-10-28  0:43   ` João Távora
2019-10-28 22:29     ` Juri Linkov
2019-10-28 23:31       ` João Távora
2019-10-29 21:53         ` Juri Linkov
2019-10-29 22:09           ` Dmitry Gutov
2019-10-29 22:57           ` João Távora
2019-10-29  1:12       ` Stefan Monnier
2019-10-29 21:58         ` Juri Linkov
2019-10-29 22:59           ` João Távora
2019-10-29 23:11 ` Dmitry Gutov
2019-10-30  1:49   ` Stefan Monnier
2019-11-03 21:53     ` Dmitry Gutov
2019-11-03 23:30       ` Stefan Monnier
2019-11-04 16:30         ` Dmitry Gutov
2019-11-04 18:31           ` Stefan Monnier
2019-11-04 22:52           ` João Távora
2019-11-04 23:25             ` Dmitry Gutov
2019-11-05 11:10               ` João Távora
2019-11-05 14:57                 ` Dmitry Gutov
2019-11-05 15:44                   ` Stefan Monnier
2019-11-05 16:30                     ` João Távora
2019-11-05 21:27                     ` Juri Linkov
2019-11-05 23:06                       ` Stefan Monnier
2019-11-05 22:01                     ` Dmitry Gutov
2019-11-06  0:18                       ` Stefan Monnier
2019-11-06  8:24                         ` Dmitry Gutov
2019-11-06 13:42                           ` VOTE: Changing completions-common-part face's default Stefan Monnier
2019-11-06 17:16                             ` João Távora
2019-11-06 17:26                               ` Dmitry Gutov
2019-11-06 18:10                                 ` João Távora
2019-11-06 22:20                                   ` Dmitry Gutov
2019-11-06 22:42                                     ` João Távora
2019-11-06 22:57                                       ` Dmitry Gutov
2019-11-06 23:14                                 ` Stefan Monnier
2019-11-07  8:09                                   ` Dmitry Gutov
2019-11-07 10:27                                     ` João Távora
2019-11-07 13:27                                       ` Yuri Khan
2019-11-07 13:52                                         ` João Távora
2019-11-07 14:41                                           ` Yuri Khan
2019-11-07 14:57                                             ` João Távora
2019-11-07 16:04                                               ` Stefan Monnier
2019-11-07 16:09                                                 ` João Távora
2019-11-07 14:43                                           ` Dmitry Gutov
2019-11-07 14:54                                             ` João Távora
2019-11-07 14:33                                       ` Dmitry Gutov
2019-11-07 14:44                                         ` João Távora
2019-11-07 14:58                                           ` Dmitry Gutov
2019-11-07 15:54                                             ` João Távora
2019-11-07 16:57                                               ` Drew Adams [this message]
2019-11-08 23:38                                               ` Dmitry Gutov
2019-11-09  0:24                                                 ` João Távora
2019-11-09  1:53                                                   ` Drew Adams
2019-11-09 21:57                                                     ` Juri Linkov
2019-11-09 22:17                                                       ` João Távora
2019-11-09  7:30                                                   ` Eli Zaretskii
2019-11-09 11:42                                                     ` João Távora
2019-11-09 12:04                                                       ` Eli Zaretskii
2019-11-09 13:22                                                         ` João Távora
2019-11-09 16:44                                                     ` Drew Adams
2019-11-07 15:08                                     ` Stefan Monnier
2019-11-08 10:15                                       ` Dmitry Gutov
2019-11-08 19:19                                         ` Stefan Monnier
2019-11-08 19:43                                           ` Eli Zaretskii
2019-11-08 21:42                                             ` Stefan Monnier
2019-11-09  6:52                                               ` Eli Zaretskii
2019-11-09 15:25                                                 ` Stefan Monnier
2019-11-09 15:52                                                   ` Eli Zaretskii
2019-11-09 16:17                                                     ` Stefan Monnier
2019-11-08 20:11                                           ` Dmitry Gutov
2019-11-08 22:57                                           ` João Távora
2019-11-06 23:12                               ` Stefan Monnier
2019-11-05 16:31                   ` BIKESHED: completion faces João Távora
2019-11-05 22:22                     ` Dmitry Gutov
2019-11-05 23:11                       ` João Távora
2019-11-06  8:18                         ` Dmitry Gutov
2019-11-06  8:53                           ` João Távora
2019-11-06 15:16                             ` Dmitry Gutov
2019-11-06 15:56                               ` João Távora
2019-11-06 10:25                           ` João Távora
2019-11-06 15:11                             ` Dmitry Gutov
2019-11-06 15:31                               ` João Távora
2019-11-06 15:43                                 ` Dmitry Gutov
2019-11-06 15:48                                   ` João Távora
2019-11-06 16:01                                     ` Dmitry Gutov
2019-11-06 16:20                               ` Eli Zaretskii
2019-11-06 21:36                               ` Juri Linkov
2019-11-07 14:25                                 ` Eli Zaretskii
2019-11-07 22:40                                   ` Juri Linkov
2019-11-08  6:43                                     ` Eli Zaretskii
2019-11-06 16:12                           ` Eli Zaretskii
2019-11-06 16:14                             ` João Távora
2019-11-06  0:24                       ` Stefan Monnier
2019-11-05 18:36               ` Stefan Monnier
2019-11-05 18:51                 ` Eli Zaretskii
2019-11-05 19:16                   ` João Távora
2019-11-05 19:23                     ` Eli Zaretskii
2019-11-05 21:43                       ` João Távora
2019-11-06 16:03                         ` Eli Zaretskii
2019-11-06 16:26                           ` João Távora
2019-11-06 18:07                             ` Eli Zaretskii
2019-11-06 18:14                               ` João Távora
2019-11-06 18:29                                 ` Eli Zaretskii
2019-11-06 18:48                                   ` João Távora
2019-11-06 20:51                                   ` Ergus
2019-11-07 14:08                                     ` Eli Zaretskii
2019-11-07 14:28                                       ` João Távora
2019-11-07 14:47                                         ` Eli Zaretskii
2019-11-07 15:00                                           ` João Távora
2019-11-07 15:40                                             ` Eli Zaretskii
2019-11-07 16:00                                               ` João Távora
2019-11-07 17:39                                                 ` Eli Zaretskii
2019-11-07 17:53                                                   ` João Távora
2019-11-07 18:16                                                     ` Eli Zaretskii
2019-11-07 18:37                                                       ` João Távora
2019-11-07 21:07                                                         ` Eli Zaretskii
2019-11-07 21:43                                                           ` João Távora
2019-11-08  6:35                                                             ` Eli Zaretskii
2019-11-08 10:15                                                               ` João Távora
2019-11-08 14:02                                                                 ` Eli Zaretskii
2019-11-08 15:09                                                                   ` João Távora
2019-11-08 15:33                                                                     ` Eli Zaretskii
2019-11-08 16:01                                                                       ` João Távora
2019-11-08 16:16                                                                         ` Eli Zaretskii
2019-11-08 16:27                                                                           ` João Távora
2019-11-08 17:05                                                                             ` Eli Zaretskii
2019-11-08 17:21                                                                               ` João Távora
2019-11-08 19:06                                                                                 ` Eli Zaretskii
2019-11-08 22:49                                                                                   ` João Távora
2019-11-09  6:57                                                                                     ` Eli Zaretskii
2019-11-09 11:20                                                                                       ` João Távora
2019-11-09 11:51                                                                                         ` Eli Zaretskii
2019-11-09 12:14                                                                                           ` João Távora
2019-11-09 12:19                                                                                             ` Eli Zaretskii
2019-11-09 13:29                                                                                               ` João Távora
2019-11-09 13:52                                                                                                 ` João Távora
2019-11-09 15:31                                                                                                 ` Eli Zaretskii
2019-11-09 18:51                                                                                                   ` João Távora
2019-11-10  9:18                                                                                                   ` Dmitry Gutov
2019-11-14  9:45                                                                                                     ` Eli Zaretskii
2019-11-14 10:40                                                                                                       ` Dmitry Gutov
2019-11-14 14:16                                                                                                         ` Eli Zaretskii
2019-11-14 14:19                                                                                                           ` João Távora
2019-11-14 14:42                                                                                                             ` Eli Zaretskii
2019-11-14 14:49                                                                                                               ` João Távora
2019-11-16 20:10                                                                                                       ` Juri Linkov
2019-11-16 23:40                                                                                                         ` João Távora
2019-11-17 17:27                                                                                                           ` Eli Zaretskii
2019-11-17 17:47                                                                                                             ` João Távora
2019-11-08 12:58                                                               ` Stefan Monnier
2019-11-08 13:08                                                                 ` João Távora
2019-11-08 14:07                                                                 ` Eli Zaretskii
2019-11-06 20:34                               ` Drew Adams
2019-11-06 20:42                                 ` Eli Zaretskii
2019-11-05 21:40                     ` Dmitry Gutov
2019-11-05 23:02                       ` Stefan Monnier
2019-11-05 18:54                 ` João Távora
2019-11-05 19:07                   ` Stefan Monnier
2019-11-05 21:39                   ` Dmitry Gutov
2019-11-05 21:54                     ` João Távora
2019-11-05 21:55                       ` Dmitry Gutov
2019-11-05 21:54                 ` Dmitry Gutov
2019-11-05 21:58                   ` João Távora
2019-11-05 22:03                     ` Dmitry Gutov
2019-11-05 22:07                       ` João Távora

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=18f69d65-953e-46fd-9a5c-6edb1e58932b@default \
    --to=drew.adams@oracle.com \
    --cc=dgutov@yandex.ru \
    --cc=emacs-devel@gnu.org \
    --cc=joaotavora@gmail.com \
    --cc=monnier@iro.umontreal.ca \
    /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).