Réponses:
L'ordre de tri dans la liste * Achèvement * est déterminé par la display-sort-functionproprié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-readune 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 PREDICATEREQUIRE-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-readn'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-readest 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-readest la seule option.
semantic-format-tag-summarizequi vous donne.
ido
semantic-format-tag-summarizerenvoie quelque chose à la fin, mais le caractère n'est pas affiché dans completing-readou 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-summarizemais utilise un tampon personnalisé avec des widgets de texte à la place.
semantic-format-tag-summarizerevient à 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-readexiste 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-readun problème.
completing-readavec Icicles. Vous pouvez même simplement activer icicle-modetemporairement (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.