Risposte:
L'ordinamento nell'elenco * Completamenti * è determinato dalla display-sort-function
proprietà della tabella di completamento (come restituita da completion-metadata
). Nel tuo caso, la tabella di completamento non ha tale proprietà, quindi ricade sull'impostazione predefinita, che è l'ordinamento alfabetico.
Puoi usare:
(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 poi
(completing-read "test: " (my-presorted-completion-table '("a" "b" "c")))
[Questo presuppone che tu stia usando lexical-binding
. ]
Fornisci completing-read
un elenco di elenchi e rispetterà l'ordine:
(completing-read "test: " '(("a") ("b") ("c")))
(completing-read "test: " '(("c") ("b") ("a")))
Il docstring dice:
(completing-read PROMPT COLLECTION &optional PREDICATE
REQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)
Leggi una stringa nel minibuffer, con il completamento. PROMPT è una stringa con cui richiedere; normalmente termina in due punti e uno spazio. COLLECTION può essere un elenco di stringhe, un elenco, un obarray o una tabella hash. ...
Può quindi prendere una lista come raccolta. In effetti, stai creando un elenco con chiavi ma senza valori.
Suggerirei di non usare questo antico incantesimo.
Il built-in ido-completing-read
non ha questo difetto:
(ido-completing-read "test: " '("a" "b" "c"))
(ido-completing-read "test: " '("c" "b" "a"))
Nemmeno helm
:
(helm :sources
`((name . "test: ")
(candidates . ("a" "b" "c"))))
(helm :sources
`((name . "test: ")
(candidates . ("c" "b" "a"))))
ido-completing-read
è che ha uno strano carattere newline ^
da semantic-format-tag-summarize
. Per quanto riguarda Helm, non posso presumere che tutti lo usino. Ecco perché completing-read
è l'unica opzione.
semantic-format-tag-summarize
ti dà.
ido
semantic-format-tag-summarize
restituisce qualcosa alla fine, ma il carattere non viene visualizzato in completing-read
o helm-comp-read
. Ho già scritto un'altra funzione al posto di semantic-format-tag-summarize
, senza volto ancora. Per visualizzare i tag (con i colori) agli utenti, utilizzo comunque semantic-format-tag-summarize
un buffer personalizzato con widget di testo.
semantic-format-tag-summarize
ritorna alla fine. Avevo una soluzione ma voglio ancora sapere una soluzione completing-read
. So che Helm può farcela, ma volevo solo sapere se completing-read
esiste un modo semplice per farlo .
Se usi Icicles, l'ordine è rispettato da completing-read
.
(E puoi ordinare usando diversi ordinamenti , in modo interattivo o tramite Lisp. E a differenza di Emacs alla vaniglia, l'ordinamento influisce sia sulla *Completions*
visualizzazione che sull'ordine ciclico.)
ido-completing-read
sta avendo qualche problema.
completing-read
con Icicles. Puoi anche solo attivare icicle-mode
temporaneamente (ad esempio per la chiamata a completing-read
), utilizzando, ad esempio, la macro icicle-with-icy-mode-ON
.
icomplete
rispettare anche l'ordine, puoi aggiungere(cycle-sort-function . ,#'identity)
a all'elenco dei metadati.