Entweder:
(completing-read "test: " '("a" "b" "c"))
oder:
(completing-read "test: " '("c" "b" "a"))
erzeugt beim Drücken das gleiche Ergebnis im Abschlusspuffer TAB. Wie kann ich dafür sorgen, dass die Sortierreihenfolge eingehalten wird?
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:Weder tut
helm
:quelle
ido-completing-read
ist , dass es seltsam Newline Charakter^
aussemantic-format-tag-summarize
. Was Helm betrifft, kann ich nicht davon ausgehen, dass jeder ihn benutzt. Deshalbcompleting-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 incompleting-read
oder angezeigthelm-comp-read
. Ich habe bereits eine andere Funktion anstelle von geschriebensemantic-format-tag-summarize
, noch ohne Gesicht. Für die Anzeige von Tags (mit Farben) für Benutzer verwende ich weiterhinsemantic-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 wissencompleting-read
. Ich weiß, dass Helm es schaffen kann, wollte aber nur wissen, ob es einen einfachen Wegcompleting-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.)quelle
ido-completing-read
hat ein Problem.completing-read
mit Eiszapfen verwenden. Sie können sich sogar nuricicle-mode
vorübergehend einschalten (z. B. für den Anruf ancompleting-read
), zicicle-with-icy-mode-ON
. B. mithilfe eines Makros .