Ya sea:
(completing-read "test: " '("a" "b" "c"))
o:
(completing-read "test: " '("c" "b" "a"))
produce el mismo resultado en el búfer de finalización al presionar TAB. ¿Cómo hago que respete el orden de clasificación?
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. ]
icompleterespetar también el orden, puede agregar un(cycle-sort-function . ,#'identity)a la lista de metadatos.Dé
completing-readuna lista de listas, y respetará el orden:La cadena de documentación dice:
Por lo tanto, puede tomar una lista como una colección. En efecto, está creando una lista con claves pero sin valores.
fuente
Sugeriría no usar este antiguo hechizo.
El incorporado
ido-completing-readno tiene esta deficiencia:Tampoco lo hace
helm:fuente
ido-completing-reades que no tiene carácter de nueva línea extraña^desemantic-format-tag-summarize. En cuanto a Helm, no puedo asumir que todos lo usen. Por esocompleting-reades la única opción.semantic-format-tag-summarizeque sea que te dé.idosemantic-format-tag-summarizedevuelve algo al final, pero el carácter no se muestra encompleting-readohelm-comp-read. Ya escribí otra función en lugar desemantic-format-tag-summarize, sin rostro todavía. Para mostrar etiquetas (con colores) a los usuarios, todavía usosemantic-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óncompleting-read. Sé que Helm puede lograrlo, pero solo quería saber sicompleting-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).fuente
ido-completing-readestá teniendo algún problema.completing-readcon Icicles. Incluso puede encendericicle-modetemporalmente (por ejemplo, para la llamadacompleting-read), usando, por ejemplo, macroicicle-with-icy-mode-ON.