Respuestas:
El orden de clasificación en la lista * Terminaciones * está determinado por la display-sort-functionpropiedad de su tabla de finalización (tal como lo devuelve completion-metadata). En su caso, su tabla de finalización no tiene dicha propiedad, por lo que vuelve al valor predeterminado, que es ordenar alfabéticamente.
Puedes usar:
(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))))
y entonces
(completing-read "test: " (my-presorted-completion-table '("a" "b" "c")))
[Esto supone que estás usando lexical-binding. ]
Dé completing-readuna lista de listas, y respetará el orden:
(completing-read "test: " '(("a") ("b") ("c")))
(completing-read "test: " '(("c") ("b") ("a")))
La cadena de documentación dice:
(completing-read PROMPT COLLECTION &optional PREDICATEREQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)Lea una cadena en el minibúfer, con finalización. PROMPT es una cadena para solicitar; normalmente termina en dos puntos y un espacio. COLLECTION puede ser una lista de cadenas, una lista, una barra de datos o una tabla hash. ...
Por lo tanto, puede tomar una lista como una colección. En efecto, está creando una lista con claves pero sin valores.
Sugeriría no usar este antiguo hechizo.
El incorporado ido-completing-readno tiene esta deficiencia:
(ido-completing-read "test: " '("a" "b" "c"))
(ido-completing-read "test: " '("c" "b" "a"))
Tampoco lo hace helm:
(helm :sources
`((name . "test: ")
(candidates . ("a" "b" "c"))))
(helm :sources
`((name . "test: ")
(candidates . ("c" "b" "a"))))
ido-completing-reades que no tiene carácter de nueva línea extraña ^de semantic-format-tag-summarize. En cuanto a Helm, no puedo asumir que todos lo usen. Por eso completing-reades la única opción.
semantic-format-tag-summarizeque sea que te dé.
ido
semantic-format-tag-summarizedevuelve algo al final, pero el carácter no se muestra en completing-reado helm-comp-read. Ya escribí otra función en lugar de semantic-format-tag-summarize, sin rostro todavía. Para mostrar etiquetas (con colores) a los usuarios, todavía uso semantic-format-tag-summarizepero uso un búfer personalizado con widgets de texto.
semantic-format-tag-summarizeregresa al final. Tenía una solución pero todavía quiero saber una solución completing-read. Sé que Helm puede lograrlo, pero solo quería saber si completing-readexiste una manera fácil de hacerlo .
Si usa Icicles , el orden es respetado por completing-read.
(Y puede ordenar usando diferentes órdenes de clasificación , ya sea de forma interactiva o mediante Lisp. Y a diferencia de Emacs de vainilla, la clasificación afecta tanto el *Completions*orden de visualización como el ciclo).
ido-completing-readestá teniendo algún problema.
completing-readcon Icicles. Incluso puede encender icicle-modetemporalmente (por ejemplo, para la llamada completing-read), usando, por ejemplo, macro icicle-with-icy-mode-ON.
icompleterespetar también el orden, puede agregar un(cycle-sort-function . ,#'identity)a la lista de metadatos.