unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Using ido-completions in other packages
@ 2010-06-04  9:35 Andrea Crotti
  2010-06-04 10:57 ` Tassilo Horn
  2010-06-08  4:39 ` William Xu
  0 siblings, 2 replies; 12+ messages in thread
From: Andrea Crotti @ 2010-06-04  9:35 UTC (permalink / raw)
  To: help-gnu-emacs

I was wondering if it would be possible to use the nice ido-mode
completion elsewhere.

For example senator-jump is really cool, but I always have to type the
complete name of the function/class, which is a bit annoying, while the
ido-completion like is much faster and nicer.

I've looked in the code but I don't see what I could substitute, maybe
substituting some functions or advising something else would do the
trick?

Thanks




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Using ido-completions in other packages
  2010-06-04  9:35 Using ido-completions in other packages Andrea Crotti
@ 2010-06-04 10:57 ` Tassilo Horn
  2010-06-04 12:06   ` Štěpán Němec
  2010-06-08  4:39 ` William Xu
  1 sibling, 1 reply; 12+ messages in thread
From: Tassilo Horn @ 2010-06-04 10:57 UTC (permalink / raw)
  To: help-gnu-emacs

Andrea Crotti <andrea.crotti.0@gmail.com> writes:

Hi Andrea,

> I've looked in the code but I don't see what I could substitute, maybe
> substituting some functions or advising something else would do the
> trick?

Basically, if you want to use ido-completion in some code, you would use
`ido-comleting-read' instead of `completing-read'.  For example, in some
home-brewn mode I have something like that:

--8<---------------cut here---------------start------------->8---
(if (and (featurep 'ido) ido-mode)
    ;; ido is available and enabled, so use it.
    (ido-completing-read "Command: " commands)
  ;; fallback to normal completion with the
  ;; most frequently used command as default.
  (completing-read
   (concat "Command (defaults to `"
           (car commands) "'): ")
   commands
   nil t nil nil (car commands)))
--8<---------------cut here---------------end--------------->8---

You could try to make `completing-read' point to `ido-completing-read':

  (fset 'completing-read 'ido-completing-read)

But that might error in some cases, cause `completing-read' has one
optional parameter more than `ido-completing-read'.  You might want to
create a function `andrea-completing-read' with the exact signature of
`completing-read' which just delegates to `ido-completing-read' and
throws away the additional parameter, and then do

  (fset 'completing-read 'andrea-completing-read)

In any case: This method is a hammer, so be warned. ;-)

Bye,
Tassilo




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Using ido-completions in other packages
  2010-06-04 10:57 ` Tassilo Horn
@ 2010-06-04 12:06   ` Štěpán Němec
  2010-06-04 12:12     ` Andrea Crotti
  0 siblings, 1 reply; 12+ messages in thread
From: Štěpán Němec @ 2010-06-04 12:06 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: help-gnu-emacs, Andrea Crotti

Tassilo Horn <tassilo@member.fsf.org> writes:

> Andrea Crotti <andrea.crotti.0@gmail.com> writes:
>
> Hi Andrea,
>
>> I've looked in the code but I don't see what I could substitute, maybe
>> substituting some functions or advising something else would do the
>> trick?

What I've been successfully using for some time is this, based on the
dysfunctional (for me, anyway) tip from the Emacs Wiki:

<http://www.emacswiki.org/emacs/InteractivelyDoThings#toc12>

(defvar ido-replace-completing-read t
  "If non-nil, use `ido-completing-read' instead of `completing-read' if possible.

Set it to nil using `let' in around-advice for functions where the
original `completing-read' is required.  For example, if a function
foo absolutely must use the original `completing-read', define some
advice like this:

\(defadvice foo (around original-completing-read-only activate)
  \(let (ido-replace-completing-read) ad-do-it))")

(defvar ido-replace-completing-read-ignore-commands nil
  "List of commands to... you get the point.")

(setq ido-replace-completing-read-ignore-commands
      '(describe-function describe-variable find-function find-variable
        w3m-goto-url w3m-goto-url-new-session))

;; replace completing-read wherever possible, unless directed otherwise
(defadvice completing-read
  (around use-ido-when-possible activate)
  (if (or (not ido-replace-completing-read)
          ido-cur-list             ; Avoid infinite loop from ido calling this
          (memq this-command ido-replace-completing-read-ignore-commands))           
      ad-do-it
    (let ((allcomp (all-completions "" collection predicate)))
      (if allcomp
          (setq ad-return-value
                (ido-completing-read prompt
                                     allcomp
                                     nil require-match initial-input hist def))
        ad-do-it))))


HTH,

Štěpán

>
> Basically, if you want to use ido-completion in some code, you would use
> `ido-comleting-read' instead of `completing-read'.  For example, in some
> home-brewn mode I have something like that:
>
> (if (and (featurep 'ido) ido-mode)
>     ;; ido is available and enabled, so use it.
>     (ido-completing-read "Command: " commands)
>   ;; fallback to normal completion with the
>   ;; most frequently used command as default.
>   (completing-read
>    (concat "Command (defaults to `"
>            (car commands) "'): ")
>    commands
>    nil t nil nil (car commands)))
>
> You could try to make `completing-read' point to `ido-completing-read':
>
>   (fset 'completing-read 'ido-completing-read)
>
> But that might error in some cases, cause `completing-read' has one
> optional parameter more than `ido-completing-read'.  You might want to
> create a function `andrea-completing-read' with the exact signature of
> `completing-read' which just delegates to `ido-completing-read' and
> throws away the additional parameter, and then do
>
>   (fset 'completing-read 'andrea-completing-read)
>
> In any case: This method is a hammer, so be warned. ;-)
>
> Bye,
> Tassilo



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Using ido-completions in other packages
  2010-06-04 12:06   ` Štěpán Němec
@ 2010-06-04 12:12     ` Andrea Crotti
  2010-06-04 13:14       ` Thierry Volpiatto
  0 siblings, 1 reply; 12+ messages in thread
From: Andrea Crotti @ 2010-06-04 12:12 UTC (permalink / raw)
  To: help-gnu-emacs

Štěpán Němec <stepnem@gmail.com> writes:

> Tassilo Horn <tassilo@member.fsf.org> writes:
>

> What I've been successfully using for some time is this, based on the
> dysfunctional (for me, anyway) tip from the Emacs Wiki:
>
> <http://www.emacswiki.org/emacs/InteractivelyDoThings#toc12>

That looks very nice thanks a lot, but I tried for example with
senator-jump and it doesn't work.

I guess that maybe not all the functions will use internally
read-completion, is that correct?




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Using ido-completions in other packages
  2010-06-04 12:12     ` Andrea Crotti
@ 2010-06-04 13:14       ` Thierry Volpiatto
  2010-06-04 14:41         ` Andrea Crotti
  0 siblings, 1 reply; 12+ messages in thread
From: Thierry Volpiatto @ 2010-06-04 13:14 UTC (permalink / raw)
  To: help-gnu-emacs

Andrea Crotti <andrea.crotti.0@gmail.com> writes:

> Štěpán Němec <stepnem@gmail.com> writes:
>
>> Tassilo Horn <tassilo@member.fsf.org> writes:
>>
>
>> What I've been successfully using for some time is this, based on the
>> dysfunctional (for me, anyway) tip from the Emacs Wiki:
>>
>> <http://www.emacswiki.org/emacs/InteractivelyDoThings#toc12>
>
> That looks very nice thanks a lot, but I tried for example with
> senator-jump and it doesn't work.

I don't know what is senator-jump, but i guess this function use a
simple read-string. To have completion you need a *-completing-read with a
collection as arg.

I think a better approach to enable a ido-completing-read is what DVC
does:

,----
| (defun dvc-completing-read (&rest args)
|   "Read a string in the minibuffer, with completion.
| Set `dvc-completing-read-function' to determine which function to use.
| 
| See `completing-read' for a description of ARGS."
|   ;; Initialize dvc-completing-read-function on the first invocation of dvc-completing-read
|   ;; This allows to enable ido-mode after loading DVC
|   (when (eq dvc-completing-read-function 'auto)
|     (setq dvc-completing-read-function (if (and (boundp 'ido-mode) ido-mode)
|                                            'ido-completing-read
|                                          'completing-read)))
|   (apply dvc-completing-read-function args))
`----


> I guess that maybe not all the functions will use internally
> read-completion, is that correct?
Yes like read-string.

FYI you have also an anything implementation of completing-read that is
available in anything-config.el, it is called anything-comp-read.

-- 
Thierry Volpiatto
Gpg key: http://pgp.mit.edu/




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Using ido-completions in other packages
  2010-06-04 13:14       ` Thierry Volpiatto
@ 2010-06-04 14:41         ` Andrea Crotti
  2010-06-04 15:15           ` Thierry Volpiatto
  0 siblings, 1 reply; 12+ messages in thread
From: Andrea Crotti @ 2010-06-04 14:41 UTC (permalink / raw)
  To: help-gnu-emacs

Thierry Volpiatto <thierry.volpiatto@gmail.com> writes:
>
> I don't know what is senator-jump, but i guess this function use a
> simple read-string. To have completion you need a *-completing-read with a
> collection as arg.

Here is the part of the code that I think is in charge for showing me
the list of possibilities.
It does use completing-read, but maybe using apply it doesn't work?
(Just wild guessing).

--8<---------------cut here---------------start------------->8---
      (let*
      ...
         (completing-read-args
          (list (if (and context (car context))
                    (format "%s(default: %s) " prompt (car context))
                  prompt)
                (setq senator-jump-completion-list
                      (senator-completion-list in-context))
                nil
                require-match
                ""
                'semantic-read-symbol-history)))
    (list
     (apply #'completing-read
            (if (and context (car context))
                (append completing-read-args context)
              completing-read-args))
     in-context no-default)))
--8<---------------cut here---------------end--------------->8---



>
> ,----
> | (defun dvc-completing-read (&rest args)
> |   "Read a string in the minibuffer, with completion.
> | Set `dvc-completing-read-function' to determine which function to use.
> | 
> | See `completing-read' for a description of ARGS."
> |   ;; Initialize dvc-completing-read-function on the first invocation of dvc-completing-read
> |   ;; This allows to enable ido-mode after loading DVC
> |   (when (eq dvc-completing-read-function 'auto)
> |     (setq dvc-completing-read-function (if (and (boundp 'ido-mode) ido-mode)
> |                                            'ido-completing-read
> |                                          'completing-read)))
> |   (apply dvc-completing-read-function args))
> `----
>
>

Thanks a lot this looks alos cleaner...




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Using ido-completions in other packages
  2010-06-04 14:41         ` Andrea Crotti
@ 2010-06-04 15:15           ` Thierry Volpiatto
  2010-06-05 14:15             ` Andrea Crotti
  0 siblings, 1 reply; 12+ messages in thread
From: Thierry Volpiatto @ 2010-06-04 15:15 UTC (permalink / raw)
  To: help-gnu-emacs

Andrea Crotti <andrea.crotti.0@gmail.com> writes:

> Thierry Volpiatto <thierry.volpiatto@gmail.com> writes:
>>
>> I don't know what is senator-jump, but i guess this function use a
>> simple read-string. To have completion you need a *-completing-read with a
>> collection as arg.
>
> Here is the part of the code that I think is in charge for showing me
> the list of possibilities.
> It does use completing-read, but maybe using apply it doesn't work?
> (Just wild guessing).
>
>       (let*
>       ...
>          (completing-read-args
>           (list (if (and context (car context))
>                     (format "%s(default: %s) " prompt (car context))
>                   prompt)
>                 (setq senator-jump-completion-list
>                       (senator-completion-list in-context))
>                 nil
>                 require-match
>                 ""
>                 'semantic-read-symbol-history)))
>     (list
>      (apply #'completing-read
>             (if (and context (car context))
>                 (append completing-read-args context)
>               completing-read-args))
>      in-context no-default)))
>

Try that:

copy/paste the function senator-jump in your .emacs and replace
(apply #'completing-read
by
(apply #'ido-completing-read

That will give you ido completion, but if 
(senator-completion-list in-context) return nothing (nil)
the problem come from here.

To know that, use C-u C-M x on the function senator-jump and use it,
and then use "n" to step throught the code.

Do you have completion with the original code?(i.e using
completing-read)

--
Thierry Volpiatto
Gpg key: http://pgp.mit.edu/




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Using ido-completions in other packages
  2010-06-04 15:15           ` Thierry Volpiatto
@ 2010-06-05 14:15             ` Andrea Crotti
  0 siblings, 0 replies; 12+ messages in thread
From: Andrea Crotti @ 2010-06-05 14:15 UTC (permalink / raw)
  To: help-gnu-emacs

Thierry Volpiatto <thierry.volpiatto@gmail.com> writes:

> Andrea Crotti <andrea.crotti.0@gmail.com> writes:
>
> Try that:
>
> copy/paste the function senator-jump in your .emacs and replace
> (apply #'completing-read
> by
> (apply #'ido-completing-read
>
> That will give you ido completion, but if 
> (senator-completion-list in-context) return nothing (nil)
> the problem come from here.
>
> To know that, use C-u C-M x on the function senator-jump and use it,
> and then use "n" to step throught the code.
>
> Do you have completion with the original code?(i.e using
> completing-read)

Great
- copy pasting
- modifying
- evaluating
and it works, even if not perfect at all I have to say...
But then I tried both the approaches you've sended me here and they
don't work, so what could be the problem?




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Using ido-completions in other packages
  2010-06-04  9:35 Using ido-completions in other packages Andrea Crotti
  2010-06-04 10:57 ` Tassilo Horn
@ 2010-06-08  4:39 ` William Xu
  2010-08-16  9:27   ` Andrea Crotti
  1 sibling, 1 reply; 12+ messages in thread
From: William Xu @ 2010-06-08  4:39 UTC (permalink / raw)
  To: help-gnu-emacs

Andrea Crotti <andrea.crotti.0@gmail.com> writes:

   I was wondering if it would be possible to use the nice ido-mode
   completion elsewhere.

   For example senator-jump is really cool, but I always have to type the
   complete name of the function/class, which is a bit annoying, while the
   ido-completion like is much faster and nicer.

   I've looked in the code but I don't see what I could substitute, maybe
   substituting some functions or advising something else would do the
   trick?

I use ido-hacks.el.  Very nice.  

http://permalink.gmane.org/gmane.emacs.help/61442

-- 
William

http://xwl.appspot.com




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Using ido-completions in other packages
  2010-06-08  4:39 ` William Xu
@ 2010-08-16  9:27   ` Andrea Crotti
  2010-08-16 11:07     ` Richard Riley
  0 siblings, 1 reply; 12+ messages in thread
From: Andrea Crotti @ 2010-08-16  9:27 UTC (permalink / raw)
  To: help-gnu-emacs

William Xu <william.xwl@gmail.com> writes:

> Andrea Crotti <andrea.crotti.0@gmail.com> writes:
>
>    I was wondering if it would be possible to use the nice ido-mode
>    completion elsewhere.
>
>    For example senator-jump is really cool, but I always have to type the
>    complete name of the function/class, which is a bit annoying, while the
>    ido-completion like is much faster and nicer.
>
>    I've looked in the code but I don't see what I could substitute, maybe
>    substituting some functions or advising something else would do the
>    trick?
>
> I use ido-hacks.el.  Very nice.  
>
> http://permalink.gmane.org/gmane.emacs.help/61442

I answer a bit late sorry, just tried now ido-hacks but still semantic
doesn't care at all about it...

I guess it just doesn't work with an easy defadvice then...
Any other idea is welcome.

Now I'm too used to have flex matching that is always a pain when I
don't have it...




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Using ido-completions in other packages
  2010-08-16  9:27   ` Andrea Crotti
@ 2010-08-16 11:07     ` Richard Riley
  2010-08-17 21:49       ` Andrea Crotti
  0 siblings, 1 reply; 12+ messages in thread
From: Richard Riley @ 2010-08-16 11:07 UTC (permalink / raw)
  To: help-gnu-emacs

Andrea Crotti <andrea.crotti.0@gmail.com> writes:

> William Xu <william.xwl@gmail.com> writes:
>
>> Andrea Crotti <andrea.crotti.0@gmail.com> writes:
>>
>>    I was wondering if it would be possible to use the nice ido-mode
>>    completion elsewhere.
>>
>>    For example senator-jump is really cool, but I always have to type the
>>    complete name of the function/class, which is a bit annoying, while the
>>    ido-completion like is much faster and nicer.
>>
>>    I've looked in the code but I don't see what I could substitute, maybe
>>    substituting some functions or advising something else would do the
>>    trick?
>>
>> I use ido-hacks.el.  Very nice.  
>>
>> http://permalink.gmane.org/gmane.emacs.help/61442
>
> I answer a bit late sorry, just tried now ido-hacks but still semantic
> doesn't care at all about it...

ido-hacks doesnt include any code for semantic afaik. Since ido-mode is
now part of emacs it might make sense to ask on the cedet mailing list
about ido integration.

>
> I guess it just doesn't work with an easy defadvice then...
> Any other idea is welcome.
>
> Now I'm too used to have flex matching that is always a pain when I
> don't have it...
>





^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Using ido-completions in other packages
  2010-08-16 11:07     ` Richard Riley
@ 2010-08-17 21:49       ` Andrea Crotti
  0 siblings, 0 replies; 12+ messages in thread
From: Andrea Crotti @ 2010-08-17 21:49 UTC (permalink / raw)
  To: help-gnu-emacs

Richard Riley <rileyrg@gmail.com> writes:

> ido-hacks doesnt include any code for semantic afaik. Since ido-mode is
> now part of emacs it might make sense to ask on the cedet mailing list
> about ido integration.
>

Sure, but it advice the functions that normally every package use for
getting completion.
Also looking at the code I think it should work, but it doesn't...

Anyway I got ido working on many other things with those ido-hacks,
which is still very nice.




^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2010-08-17 21:49 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-06-04  9:35 Using ido-completions in other packages Andrea Crotti
2010-06-04 10:57 ` Tassilo Horn
2010-06-04 12:06   ` Štěpán Němec
2010-06-04 12:12     ` Andrea Crotti
2010-06-04 13:14       ` Thierry Volpiatto
2010-06-04 14:41         ` Andrea Crotti
2010-06-04 15:15           ` Thierry Volpiatto
2010-06-05 14:15             ` Andrea Crotti
2010-06-08  4:39 ` William Xu
2010-08-16  9:27   ` Andrea Crotti
2010-08-16 11:07     ` Richard Riley
2010-08-17 21:49       ` Andrea Crotti

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