Réponses:
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
. ]
Donnez completing-read
une liste de listes, et elle respectera l'ordre:
(completing-read "test: " '(("a") ("b") ("c")))
(completing-read "test: " '(("c") ("b") ("a")))
Le docstring dit:
(completing-read PROMPT COLLECTION &optional PREDICATE
REQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)
Lisez une chaîne dans le mini-tampon, avec achèvement. PROMPT est une chaîne avec laquelle demander; normalement, il se termine par deux points et un espace. COLLECTION peut être une liste de chaînes, une liste, un obarray ou une table de hachage. ...
Il peut donc prendre une liste comme collection. En effet, vous créez une liste avec des clés mais sans valeurs.
Je suggère de ne pas utiliser ce sort ancien.
Le intégré ido-completing-read
n'a pas cette lacune:
(ido-completing-read "test: " '("a" "b" "c"))
(ido-completing-read "test: " '("c" "b" "a"))
Pas plus helm
:
(helm :sources
`((name . "test: ")
(candidates . ("a" "b" "c"))))
(helm :sources
`((name . "test: ")
(candidates . ("c" "b" "a"))))
ido-completing-read
est qu'il a un caractère ^
de nouvelle ligne étrange semantic-format-tag-summarize
. Quant à Helm, je ne peux pas supposer que tout le monde l'utilise. C'est pourquoi completing-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é dans completing-read
ou helm-comp-read
. J'ai déjà écrit une autre fonction à la place de semantic-format-tag-summarize
, sans visage encore. Pour afficher des balises (avec des couleurs) pour les utilisateurs, j'utilise toujours semantic-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 solution completing-read
. Je sais que Helm peut le faire, mais je voulais juste savoir s'il completing-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.)
ido-completing-read
un problème.
completing-read
avec Icicles. Vous pouvez même simplement activer icicle-mode
temporairement (par exemple pour l'appel à completing-read
), en utilisant, par exemple, la macro icicle-with-icy-mode-ON
.
icomplete
également respecter l'ordre, vous pouvez ajouter un(cycle-sort-function . ,#'identity)
à la liste des métadonnées.