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-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
. ]
icomplete
respetar también el orden, puede agregar un(cycle-sort-function . ,#'identity)
a la lista de metadatos.Dé
completing-read
una 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-read
no tiene esta deficiencia:Tampoco lo hace
helm
:fuente
ido-completing-read
es 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-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 encompleting-read
ohelm-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-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óncompleting-read
. Sé que Helm puede lograrlo, pero solo quería saber sicompleting-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).fuente
ido-completing-read
está teniendo algún problema.completing-read
con Icicles. Incluso puede encendericicle-mode
temporalmente (por ejemplo, para la llamadacompleting-read
), usando, por ejemplo, macroicicle-with-icy-mode-ON
.