Respuestas:
El orden de clasificación en la lista * Terminaciones * está determinado por la display-sort-function
propiedad 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-read
una 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 PREDICATE
REQUIRE-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-read
no 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-read
es 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-read
es la única opción.
semantic-format-tag-summarize
que sea que te dé.
ido
semantic-format-tag-summarize
devuelve algo al final, pero el carácter no se muestra en completing-read
o 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-summarize
pero uso un búfer personalizado con widgets de texto.
semantic-format-tag-summarize
regresa 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-read
existe 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-read
está teniendo algún problema.
completing-read
con Icicles. Incluso puede encender icicle-mode
temporalmente (por ejemplo, para la llamada completing-read
), usando, por ejemplo, macro icicle-with-icy-mode-ON
.
icomplete
respetar también el orden, puede agregar un(cycle-sort-function . ,#'identity)
a la lista de metadatos.