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