(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.