all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Felipe Ochoa <felipe.nospam.ochoa@gmail.com>
To: emacs-devel@gnu.org, Drew Adams <drew.adams@oracle.com>
Subject: Re: Disabling imenu default of thing-at-point
Date: Thu, 3 Aug 2017 10:35:20 +0200	[thread overview]
Message-ID: <CAHp7Jgg5nCGMqjbvwVyK4T8OY6SYjEpErH2o+FBceDhUsz1=9g@mail.gmail.com> (raw)
In-Reply-To: <CAHp7Jggb1CPfvOL3SxG85JG=PvUdYA4C7PJ5Hu5=9VGtvrw5DQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 6121 bytes --]

I realize this thread is probably hard to follow, so wanted to offer a
brief recap (Drew, please correct me where necessary).

Core issue:
Felipe> imenu currently uses (thing-at-point 'symbol) to offer a default in
completing read. It's very helpful when symbol at point is one of the
options, but not really useful when not. It's particularly inconvenient
when using ido for completing read

Possible workaround:
Noam suggested I use C-j to skip the default automagic in ido, but this
does not work because of some imenu trickery (plus I think imenu is the
place to fix this)

Drew and I had a back-and-forth about whether the hypothetical fix belongs
in ido/completing-read or imenu. The conclusion was it would belong in
imenu, but he's still unclear whether a fix is necessary at all.

Drew> But is that what was intended for the Imenu code? Does it make no
sense (in this case) for a user to pick the default value if it is not one
of the completion candidates?


On 25 July 2017 at 11:21, Felipe Ochoa <felipe.nospam.ochoa@gmail.com>
wrote:

>
> ---------- Forwarded message ----------
> From: Drew Adams <drew.adams@oracle.com>
> Date: 24 July 2017 at 20:24
> Subject: RE: Disabling imenu default of thing-at-point
> To: Felipe Ochoa <felipe.nospam.ochoa@gmail.com>
> > > Sounds like Ido (or Ido Ubiquitous) needs to be fixed.  There
> > > should not be a problem with providing a default value, even
> > > when that default value might not always be helpful.
>
> > I think this could also be an option, but note that ido follows
> > completing-read-default in its handling of invalid defaults. E.g.,
> > evaluate the following and hit RET without selecting anything:
>
> > (completing-read-default "Complete: " '("abc" "def" "ghi") nil t nil nil
> "jkl")
>
> > The result will be "jkl".
>
> That's the case also for the Imenu code you cited, no? NAME is the default
> value to `completing-read', and you get it in that case by hitting RET with
> no input.
>
> And there is nothing "invalid" about the "jkl" value.
>
> `completing-read' has multiple uses. It is not just for picking one of a
> set of completion candidates. When `t' is specified as the REQUIRED arg it
> means that either (a) one of those candidates must be picked *or* (2) the
> default value can be picked. The list of candidates might be predefined,
> and the default value might be computed dynamically (e.g. thing at point),
> for example.
> > One thing that cannot be fixed within ido (or completing-read)
> > is the prompt. Currently all users see "Index item (default %s): ",
> > even when the default is bogus, instead of "Index item: ".
>
> Why is it bogus? If a different behavior were desired, where a user could
> not pick the default value but had to pick one of the completion
> candidates, then the `completing-read' call would be different.
>
>
>
> Perhaps Ido Ubiquitous does not provide for or handle such a use case (?).
> But it is a common and useful use case of `completing-read'.
>
>
> > > > It breaks everyone's ability to pick up what was previously the
> > > > default value as a default value.
> > > >
> > > > > -      (setq name (or (imenu-find-default name
> prepared-index-alist) name)))
> > > > > +      (setq name (imenu-find-default name prepared-index-alist)))
> > > > >      (cond (prompt)
> > > > >         ((and name (imenu--in-alist name prepared-index-alist))
> > > > >          (setq prompt (format "Index item (default %s): " name)))
> > > >
> > > > If you make that change then what is the sense of binding `name' to
> > > > `(thing-at-point 'symbol)' in the first place?  It's only purpose
> > > > could then be to return a string so that `imenu-find-default' is
> > > > used at all.  This doesn't make any sense (to me).
>
>
> >
> > The code does not do away with defaults. To me, the new approach
> > would mean in words:
> >
> > 1. Grab the symbol at point.
> > 2. Check if it matches one of the items in the index.
> > 3. If so, offer it as a default. Otherwise, ignore it.
>
>
> I understand that that's what you proposed. (There's a simpler way to code
> that, if that's what's desired.) But is that what was intended for the
> Imenu code? Does it make no sense (in this case) for a user to pick the
> default value if it is not one of the completion candidates?
>
> On 25 July 2017 at 11:05, Felipe Ochoa <felipe.nospam.ochoa@gmail.com>
> wrote:
>
>> (Apologies, forgot to CC the list)
>>
>>
>> > Sounds like Ido (or Ido Ubiquitous) needs to be fixed.  There
>> > should not be a problem with providing a default value, even
>> > when that default value might not always be helpful.
>>
>> I think this could also be an option, but note that ido follows
>> completing-read-default in its handling of invalid defaults. E.g.,
>> evaluate the following and hit RET without selecting anything:
>>
>> (completing-read-default
>>  "Complete: " '("abc" "def" "ghi")
>>  nil t nil nil "jkl")
>>
>> The result will be "jkl".
>>
>> One thing that cannot be fixed within ido (or completing-read)
>> is the prompt. Currently all users see "Index item (default %s): ",
>> even when the default is bogus, instead of "Index item: ".
>>
>> > It breaks everyone's ability to pick up what was previously the
>> > default value as a default value.
>> >
>> > > -      (setq name (or (imenu-find-default name prepared-index-alist)
>> name)))
>> > > +      (setq name (imenu-find-default name prepared-index-alist)))
>> > >      (cond (prompt)
>> > >         ((and name (imenu--in-alist name prepared-index-alist))
>> > >          (setq prompt (format "Index item (default %s): " name)))
>> >
>> > If you make that change then what is the sense of binding `name' to
>> > `(thing-at-point 'symbol)' in the first place?  It's only purpose
>> > could then be to return a string so that `imenu-find-default' is
>> > used at all.  This doesn't make any sense (to me).
>>
>> The code does not do away with defaults. To me, the new approach
>> would mean in words:
>>
>> 1. Grab the symbol at point.
>> 2. Check if it matches one of the items in the index.
>> 3. If so, offer it as a default. Otherwise, ignore it.
>>
>>
>>
>

[-- Attachment #2: Type: text/html, Size: 10208 bytes --]

      reply	other threads:[~2017-08-03  8:35 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-24 17:10 Disabling imenu default of thing-at-point Felipe Ochoa
2017-07-24 17:39 ` Drew Adams
2017-07-24 17:43   ` Noam Postavsky
     [not found]     ` <CAHp7JggMsvE-A4GL2L1MdEceN4nnR9n3RGYjzpNgF2Zk1TRcjA@mail.gmail.com>
2017-07-25  9:01       ` Felipe Ochoa
     [not found]   ` <CAHp7JgjpdXfqwhO+PcVqAFGMT8Sy271sRgDGQt6_eWTYnSiFaQ@mail.gmail.com>
2017-07-25  9:05     ` Felipe Ochoa
2017-07-25  9:13       ` Felipe Ochoa
2017-07-25  9:21       ` Felipe Ochoa
2017-08-03  8:35         ` Felipe Ochoa [this message]

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAHp7Jgg5nCGMqjbvwVyK4T8OY6SYjEpErH2o+FBceDhUsz1=9g@mail.gmail.com' \
    --to=felipe.nospam.ochoa@gmail.com \
    --cc=drew.adams@oracle.com \
    --cc=emacs-devel@gnu.org \
    /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 external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.