Respostas:
A ordem de classificação na lista * Conclusões * é determinada pela display-sort-functionpropriedade da sua tabela de conclusão (conforme retornado por completion-metadata). No seu caso, sua tabela de conclusão não possui essa propriedade; portanto, ela volta ao padrão, que é classificar em ordem alfabética.
Você pode 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))))
e depois
(completing-read "test: " (my-presorted-completion-table '("a" "b" "c")))
[Isso pressupõe que você esteja usando lexical-binding. ]
Dê completing-readuma lista de listas e ela respeitará a ordem:
(completing-read "test: " '(("a") ("b") ("c")))
(completing-read "test: " '(("c") ("b") ("a")))
A doutrina diz:
(completing-read PROMPT COLLECTION &optional PREDICATEREQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)Leia uma sequência no minibuffer, com conclusão. PROMPT é uma string para solicitar; normalmente termina em dois pontos e um espaço. COLEÇÃO pode ser uma lista de strings, uma lista, uma lista ou uma tabela de hash. ...
Portanto, pode levar um alist como uma coleção. Na verdade, você está criando um alist com chaves, mas sem valores.
Eu sugeriria não usar este feitiço antigo.
O built-in ido-completing-readnão tem essa deficiência:
(ido-completing-read "test: " '("a" "b" "c"))
(ido-completing-read "test: " '("c" "b" "a"))
Nem helm:
(helm :sources
`((name . "test: ")
(candidates . ("a" "b" "c"))))
(helm :sources
`((name . "test: ")
(candidates . ("c" "b" "a"))))
ido-completing-readé que ele tem um caractere ^de nova linha estranho semantic-format-tag-summarize. Quanto ao Helm, não posso assumir que todos o usem. É por isso que completing-readé a única opção.
semantic-format-tag-summarizelhe der.
ido
semantic-format-tag-summarizeretorna algo no final, mas o caractere não é exibido em completing-readou helm-comp-read. Eu já escrevi outra função no lugar de semantic-format-tag-summarize, sem rosto ainda. Para exibir tags (com cores) para os usuários, ainda uso, semantic-format-tag-summarizemas em vez disso, um buffer personalizado com widgets de texto.
semantic-format-tag-summarizeretorna no final. Eu tinha uma solução, mas ainda quero saber uma solução para completing-read. Eu sei que Helm consegue, mas só queria saber se completing-readexiste uma maneira fácil .
Se você usar Sincelos , o pedido será respeitado completing-read.
(E você pode classificar usando ordens de classificação diferentes , de forma interativa ou via Lisp. E, ao contrário do Emacs de baunilha, a classificação afeta a *Completions*exibição e a ordem do ciclo.)
ido-completing-readestá tendo algum problema.
completing-readcom pingentes. Você pode até ligar icicle-modetemporariamente (por exemplo, para a chamada para completing-read), usando, por exemplo, macro icicle-with-icy-mode-ON.
icompletetambém quiser respeitar o pedido, poderá adicionar um(cycle-sort-function . ,#'identity)à lista de metadados.