Ответы:
Порядок сортировки в списке * Completions * определяется display-sort-function
свойством вашей таблицы завершения (как возвращено completion-metadata
). В вашем случае таблица завершения не имеет такого свойства, поэтому она возвращается к значению по умолчанию, то есть сортировке по алфавиту.
Ты можешь использовать:
(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))))
а потом
(completing-read "test: " (my-presorted-completion-table '("a" "b" "c")))
[Это предполагает, что вы используете lexical-binding
. ]
Дайте completing-read
список списков, и он будет уважать порядок:
(completing-read "test: " '(("a") ("b") ("c")))
(completing-read "test: " '(("c") ("b") ("a")))
Строка документа говорит:
(completing-read PROMPT COLLECTION &optional PREDICATE
REQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)
Прочитайте строку в минибуфере, с завершением. PROMPT - строка для запроса; обычно это заканчивается двоеточием и пробелом. COLLECTION может быть списком строк, alist, obarray или хеш-таблицей. ...
Поэтому он может принять список как коллекцию. По сути, вы создаете список с ключами, но без значений.
Я бы предложил не использовать это древнее заклинание.
Встроенный ido-completing-read
не имеет этого недостатка:
(ido-completing-read "test: " '("a" "b" "c"))
(ido-completing-read "test: " '("c" "b" "a"))
Ни один не делает helm
:
(helm :sources
`((name . "test: ")
(candidates . ("a" "b" "c"))))
(helm :sources
`((name . "test: ")
(candidates . ("c" "b" "a"))))
ido-completing-read
том, что у него странный символ перевода строки ^
из semantic-format-tag-summarize
. Что касается Хелма, я не могу предположить, что все используют это. Вот почему completing-read
это единственный вариант.
semantic-format-tag-summarize
дает вам.
ido
semantic-format-tag-summarize
возвращают что-то в конце, но символ не отображается в completing-read
или helm-comp-read
. Я уже написал другую функцию вместо semantic-format-tag-summarize
, без лица еще. Для отображения тегов (с цветами) пользователям я все еще использую, semantic-format-tag-summarize
но вместо этого использую собственный буфер с текстовыми виджетами.
semantic-format-tag-summarize
возвращается в конце. У меня было решение, но я все еще хочу знать решение completing-read
. Я знаю, что Хелм может сделать это, но просто хотел знать, существует ли легкий путь с этим completing-read
.
Если вы используете Сосульки, то порядок соблюдается completing-read
.
(И вы можете сортировать, используя различные порядки сортировки , либо в интерактивном режиме, либо через Lisp. И в отличие от ванильного Emacs, сортировка влияет как на *Completions*
отображение, так и на цикл.)
ido-completing-read
есть некоторые проблемы.
completing-read
с сосульками. Вы можете даже icicle-mode
временно включить (например, для вызова completing-read
), используя, например, макрос icicle-with-icy-mode-ON
.
icomplete
также соблюдать порядок, вы можете добавить(cycle-sort-function . ,#'identity)
в список метаданных.