Antworten:
Die Sortierreihenfolge in der Liste * Abschlüsse * wird durch die display-sort-function
Eigenschaft 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-read
eine 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 PREDICATE
REQUIRE-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-read
hat 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-read
ist , dass es seltsam Newline Charakter ^
aus semantic-format-tag-summarize
. Was Helm betrifft, kann ich nicht davon ausgehen, dass jeder ihn benutzt. Deshalb completing-read
ist die einzige Option.
semantic-format-tag-summarize
Sie einfach alles, was Sie erhalten.
ido
semantic-format-tag-summarize
gibt am Ende etwas zurück, aber das Zeichen wird nicht in completing-read
oder 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-summarize
einen benutzerdefinierten Puffer mit Text-Widgets.
semantic-format-tag-summarize
am 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-read
gibt.
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-read
hat ein Problem.
completing-read
mit Eiszapfen verwenden. Sie können sich sogar nur icicle-mode
vorübergehend einschalten (z. B. für den Anruf an completing-read
), z icicle-with-icy-mode-ON
. B. mithilfe eines Makros .