OVH Cloud OVH Cloud

completion partielle dans le minibuffer

7 réponses
Avatar
cnn
Bonjour,

Je cherche a avoir dans une fonction interactive la completion
partielle dans le minibuffer i.e.

(completing-read
"Complete a foo: "
'(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4))
nil t "fo")

quand je tape

baz ----> j'obtiens comme proposition foobaz

j'ai essaye d'activer partial-completion-mode ou d'utiliser
mcomplete.el mais cela ne semble pas marcher.

Quelqu'un aurait-il une solution svp ?

Merci
-------
Cyril

7 réponses

Avatar
Bastien
"cnn" writes:

(completing-read
"Complete a foo: "
'(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4))
nil t "fo")

quand je tape

baz ----> j'obtiens comme proposition foobaz



Et tu souhaites obtenir quoi ?

--
Bastien
Avatar
cnn
aujourd'hui quand je tape baz la completion du minibuffer ne me renvoie
rien [no match].

Je veux que lorsque je tape baz la completion me renvoie comme resultat
foobaz.


-----
Cyril
Avatar
Bastien
"cnn" writes:

aujourd'hui quand je tape baz la completion du minibuffer ne me renvoie
rien [no match].

Je veux que lorsque je tape baz la completion me renvoie comme resultat
foobaz.



Je ne crois pas que ce soit possible. D'après ce que j'ai compris, tu
peux obtenir qu'en tapant f-b ça se complète en foo-baz, à condition
qu'il y ait une délimitation avec "-".

,----[ partial-completion-mode ]
| When Partial Completion mode is enabled, TAB (or M-TAB if
| `PC-meta-flag' is nil) is enhanced so that if some string is divided
| into words and each word is delimited by a character in
| `PC-word-delimiters', partial words are completed as much as possible
| and `*' characters are treated likewise in file names.
|
| For example, M-x p-c-m expands to M-x partial-completion-mode since no
| other command begins with that sequence of characters, and C-x C-f
| f_b.c TAB might complete to foo_bar.c if that file existed and no
| other file in that directory begin with that sequence of characters.
`----

--
Bastien
Avatar
Matthieu Moy
Bastien writes:

"cnn" writes:

aujourd'hui quand je tape baz la completion du minibuffer ne me renvoie
rien [no match].

Je veux que lorsque je tape baz la completion me renvoie comme resultat
foobaz.



Je ne crois pas que ce soit possible. D'après ce que j'ai compris, tu
peux obtenir qu'en tapant f-b ça se complète en foo-baz, à condition
qu'il y ait une délimitation avec "-".



Ceci dit, il y a des modes qui font à peu près ce qui est recherché.
En particulier, ido (et son prédécésseur iswitchb) pour les buffers et
les noms de fichiers.

--
Matthieu
Avatar
cnn
En effet apres une petite recherche j'ai trouve mon bonheur avec
ido-completing-read
(qui ne se trouve pas sur la version en ligne officielle
http://www.cua.dk/. mais sur le cvs d'emacs)

du coup ca marche bien comme cela
ex

(defun my-test (&optional arg)
"my-test"
(interactive)
(let ((str (ido-completing-read
"Complete a foo: "
'(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4))
nil t "")))
(message str)))


merci
Avatar
Bastien
Matthieu Moy writes:

Ceci dit, il y a des modes qui font à peu près ce qui est recherché.
En particulier, ido (et son prédécésseur iswitchb) pour les buffers
et les noms de fichiers.



(J'en ai profité pour passer de iswitchb à ido et ça vaut vraiment le
coup !)

--
Bastien
Avatar
cnn
oui ido ca vaut vraiment le coup

Mais pour ameliorer ma productivite je developpe en lisp un
gestionnaire de projet basique avec ouverture par completion des
fichiers sources du projet (sachant que les sources ne se trouve dans
differents reperctoires etc ....) dans le style de workspacewhiz pour
visual studio.

Je sais je pourrais utiliser ecb mais j'en suis pas un grand fan.
--
Cyril