Soit:
(completing-read "test: " '("a" "b" "c"))
ou:
(completing-read "test: " '("c" "b" "a"))
produit le même résultat dans le tampon de fin lorsque vous appuyez sur TAB. Comment le faire respecter l'ordre de tri?
L'ordre de tri dans la liste * Achèvement * est déterminé par la display-sort-function
propriété de votre table d'achèvement (telle que renvoyée par completion-metadata
). Dans votre cas, votre table d'achèvement n'a pas une telle propriété, elle revient donc à la valeur par défaut, qui est de trier par ordre alphabétique.
Vous pouvez utiliser:
(defun my-presorted-completion-table (completions)
(lambda (string pred action)
(if (eq action 'metadata)
`(metadata (display-sort-function . ,#'identity))
(complete-with-action action completions string pred))))
puis
(completing-read "test: " (my-presorted-completion-table '("a" "b" "c")))
[Cela suppose que vous utilisez lexical-binding
. ]
icomplete
également respecter l'ordre, vous pouvez ajouter un(cycle-sort-function . ,#'identity)
à la liste des métadonnées.Donnez
completing-read
une liste de listes, et elle respectera l'ordre:Le docstring dit:
Il peut donc prendre une liste comme collection. En effet, vous créez une liste avec des clés mais sans valeurs.
la source
Je suggère de ne pas utiliser ce sort ancien.
Le intégré
ido-completing-read
n'a pas cette lacune:Pas plus
helm
:la source
ido-completing-read
est qu'il a un caractère^
de nouvelle ligne étrangesemantic-format-tag-summarize
. Quant à Helm, je ne peux pas supposer que tout le monde l'utilise. C'est pourquoicompleting-read
est la seule option.semantic-format-tag-summarize
qui vous donne.ido
semantic-format-tag-summarize
renvoie quelque chose à la fin, mais le caractère n'est pas affiché danscompleting-read
ouhelm-comp-read
. J'ai déjà écrit une autre fonction à la place desemantic-format-tag-summarize
, sans visage encore. Pour afficher des balises (avec des couleurs) pour les utilisateurs, j'utilise toujourssemantic-format-tag-summarize
mais utilise un tampon personnalisé avec des widgets de texte à la place.semantic-format-tag-summarize
revient à la fin. J'avais une solution mais je veux toujours savoir une solutioncompleting-read
. Je sais que Helm peut le faire, mais je voulais juste savoir s'ilcompleting-read
existe un moyen facile de le faire .Si vous utilisez Icicles, la commande est respectée par
completing-read
.(Et vous pouvez trier en utilisant différents ordres de tri , de manière interactive ou via Lisp. Et contrairement à Emacs vanille, le tri affecte à la fois l'
*Completions*
affichage et l'ordre de cycle.)la source
ido-completing-read
un problème.completing-read
avec Icicles. Vous pouvez même simplement activericicle-mode
temporairement (par exemple pour l'appel àcompleting-read
), en utilisant, par exemple, la macroicicle-with-icy-mode-ON
.