Antworten:
Die Sortierreihenfolge in der Liste * Abschlüsse * wird durch die display-sort-functionEigenschaft Ihrer Vervollständigungstabelle bestimmt (wie von zurückgegeben completion-metadata). In Ihrem Fall verfügt Ihre Vervollständigungstabelle über keine solche Eigenschaft, sodass auf die Standardeinstellung zurückgegriffen wird, bei der alphabetisch sortiert wird.
Sie können verwenden:
(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))))
und dann
(completing-read "test: " (my-presorted-completion-table '("a" "b" "c")))
[Dies setzt voraus, dass Sie verwenden lexical-binding. ]]
Geben Sie completing-readeine Liste mit Listen an, und die Reihenfolge wird eingehalten:
(completing-read "test: " '(("a") ("b") ("c")))
(completing-read "test: " '(("c") ("b") ("a")))
Der Docstring sagt:
(completing-read PROMPT COLLECTION &optional PREDICATEREQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)Lesen Sie eine Zeichenfolge im Minibuffer mit Abschluss. PROMPT ist eine Zeichenfolge, mit der Sie aufgefordert werden. Normalerweise endet es in einem Doppelpunkt und einem Leerzeichen. COLLECTION kann eine Liste von Zeichenfolgen, eine Liste, ein Obarray oder eine Hash-Tabelle sein. ...
Es kann daher ein Alist als Sammlung genommen werden. Tatsächlich erstellen Sie eine Liste mit Schlüsseln, jedoch ohne Werte.
Ich würde vorschlagen, diesen alten Zauber nicht zu verwenden.
Der eingebaute ido-completing-readhat diesen Mangel nicht:
(ido-completing-read "test: " '("a" "b" "c"))
(ido-completing-read "test: " '("c" "b" "a"))
Weder tut helm:
(helm :sources
`((name . "test: ")
(candidates . ("a" "b" "c"))))
(helm :sources
`((name . "test: ")
(candidates . ("c" "b" "a"))))
ido-completing-readist , dass es seltsam Newline Charakter ^aus semantic-format-tag-summarize. Was Helm betrifft, kann ich nicht davon ausgehen, dass jeder ihn benutzt. Deshalb completing-readist die einzige Option.
semantic-format-tag-summarizeSie einfach alles, was Sie erhalten.
ido
semantic-format-tag-summarizegibt am Ende etwas zurück, aber das Zeichen wird nicht in completing-readoder angezeigt helm-comp-read. Ich habe bereits eine andere Funktion anstelle von geschrieben semantic-format-tag-summarize, noch ohne Gesicht. Für die Anzeige von Tags (mit Farben) für Benutzer verwende ich weiterhin semantic-format-tag-summarizeeinen benutzerdefinierten Puffer mit Text-Widgets.
semantic-format-tag-summarizeam Ende zurückkommt. Ich hatte eine Lösung, aber ich möchte immer noch eine Lösung dafür wissen completing-read. Ich weiß, dass Helm es schaffen kann, wollte aber nur wissen, ob es einen einfachen Weg completing-readgibt.
Wenn Sie Eiszapfen verwenden, wird die Reihenfolge von eingehalten completing-read.
(Und Sie können entweder interaktiv oder über Lisp nach verschiedenen Sortierreihenfolgen sortieren . Im Gegensatz zu Vanille-Emacs wirkt sich das Sortieren sowohl auf die *Completions*Anzeige als auch auf die Zyklusreihenfolge aus.)
ido-completing-readhat ein Problem.
completing-readmit Eiszapfen verwenden. Sie können sich sogar nur icicle-modevorübergehend einschalten (z. B. für den Anruf an completing-read), z icicle-with-icy-mode-ON. B. mithilfe eines Makros .