Ответы:
Порядок сортировки в списке * 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 PREDICATEREQUIRE-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)в список метаданных.