Risposte:
L'ordinamento nell'elenco * Completamenti * è determinato dalla display-sort-functionproprietà 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-readun 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 PREDICATEREQUIRE-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-readnon 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-summarizeti dà.
ido
semantic-format-tag-summarizerestituisce qualcosa alla fine, ma il carattere non viene visualizzato in completing-reado 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-summarizeun buffer personalizzato con widget di testo.
semantic-format-tag-summarizeritorna alla fine. Avevo una soluzione ma voglio ancora sapere una soluzione completing-read. So che Helm può farcela, ma volevo solo sapere se completing-readesiste 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-readsta avendo qualche problema.
completing-readcon Icicles. Puoi anche solo attivare icicle-modetemporaneamente (ad esempio per la chiamata a completing-read), utilizzando, ad esempio, la macro icicle-with-icy-mode-ON.
icompleterispettare anche l'ordine, puoi aggiungere(cycle-sort-function . ,#'identity)a all'elenco dei metadati.