Zarówno:
(completing-read "test: " '("a" "b" "c"))
lub:
(completing-read "test: " '("c" "b" "a"))
daje ten sam wynik w buforze zakończenia po naciśnięciu TAB. Jak sprawić, by przestrzegał porządku sortowania?
Zarówno:
(completing-read "test: " '("a" "b" "c"))
lub:
(completing-read "test: " '("c" "b" "a"))
daje ten sam wynik w buforze zakończenia po naciśnięciu TAB. Jak sprawić, by przestrzegał porządku sortowania?
Odpowiedzi:
Kolejność sortowania na liście * Uzupełnienia * zależy od display-sort-function
właściwości tabeli uzupełnień (zwróconej przez completion-metadata
). W twoim przypadku tabela ukończenia nie ma takiej właściwości, więc wraca do wartości domyślnej, czyli sortowania alfabetycznego.
Możesz użyć:
(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))))
i wtedy
(completing-read "test: " (my-presorted-completion-table '("a" "b" "c")))
[Zakłada się, że używasz lexical-binding
. ]
Podaj completing-read
listę list, a uszanuje kolejność:
(completing-read "test: " '(("a") ("b") ("c")))
(completing-read "test: " '(("c") ("b") ("a")))
Dokument mówi:
(completing-read PROMPT COLLECTION &optional PREDICATE
REQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)
Po zakończeniu przeczytaj ciąg znaków w minibuforze. PROMPT to ciąg znaków służący do monitowania; zwykle kończy się dwukropkiem i spacją. KOLEKCJA może być listą łańcuchów, alist, obarray lub tablicą haszującą. ...
Może zatem przyjmować alist jako zbiór. W efekcie tworzysz listę z kluczami, ale bez wartości.
Proponuję nie używać tego starożytnego zaklęcia.
Wbudowany ido-completing-read
nie ma tego niedoboru:
(ido-completing-read "test: " '("a" "b" "c"))
(ido-completing-read "test: " '("c" "b" "a"))
Ani też helm
:
(helm :sources
`((name . "test: ")
(candidates . ("a" "b" "c"))))
(helm :sources
`((name . "test: ")
(candidates . ("c" "b" "a"))))
ido-completing-read
jest to, że ma dziwny znak nowej linii ^
z semantic-format-tag-summarize
. Co do Helma, nie mogę założyć, że wszyscy go używają. Dlatego completing-read
jest jedyną opcją.
semantic-format-tag-summarize
ci daje.
ido
semantic-format-tag-summarize
zwraca coś na końcu, ale znak nie jest wyświetlany w completing-read
lub helm-comp-read
. Napisałem już inną funkcję zamiast semantic-format-tag-summarize
bez twarzy. Do wyświetlania znaczników (z kolorami) użytkownikom nadal używam, semantic-format-tag-summarize
ale zamiast tego używam niestandardowego bufora z widżetami tekstowymi.
semantic-format-tag-summarize
zwraca na końcu. Miałem rozwiązanie, ale nadal chcę znać rozwiązanie completing-read
. Wiem, że Helm może to zrobić, ale chciałem tylko wiedzieć, czy istnieje łatwy sposób completing-read
.
Jeśli używasz Sopli, kolejność jest przestrzegana przez completing-read
.
(I możesz sortować za pomocą różnych porządków sortowania , interaktywnie lub przez Lisp. W przeciwieństwie do waniliowych Emacsów, sortowanie wpływa zarówno na *Completions*
kolejność wyświetlania, jak i kolejność.)
ido-completing-read
ma jakiś problem.
completing-read
z Soplami. Możesz nawet po prostu włączyć icicle-mode
tymczasowo (np. Dla połączenia z completing-read
), używając np icicle-with-icy-mode-ON
. Makra .
icomplete
również uszanować kolejność, możesz dodać znak(cycle-sort-function . ,#'identity)
do listy metadanych.