Или:
(completing-read "test: " '("a" "b" "c"))
или:
(completing-read "test: " '("c" "b" "a"))
выдает тот же результат в буфере завершения при нажатии TAB. Как заставить его соблюдать порядок сортировки?
Порядок сортировки в списке * 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
. ]
icomplete
также соблюдать порядок, вы можете добавить(cycle-sort-function . ,#'identity)
в список метаданных.Дайте
completing-read
список списков, и он будет уважать порядок:Строка документа говорит:
Поэтому он может принять список как коллекцию. По сути, вы создаете список с ключами, но без значений.
источник
Я бы предложил не использовать это древнее заклинание.
Встроенный
ido-completing-read
не имеет этого недостатка:Ни один не делает
helm
:источник
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
.