Відповіді:
Порядок сортування у списку * Завершення * визначається 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 - рядок, з яким потрібно підказати; зазвичай він закінчується двокрапкою та пробілом. КОЛЕКЦІЯ може представляти собою список рядків, аліст, 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
. Щодо Helm, я не можу припустити, що всі користуються ним. Ось чому 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
.
Якщо ви використовуєте Icicles, то порядок дотримується completing-read
.
(І ви можете сортувати , використовуючи різні порядки сортування , або в інтерактивному режимі або з допомогою Lisp. І в відміну від ванільного Emacs, сортування впливає як на *Completions*
дисплей і велосипедного замовлення.)
ido-completing-read
є якась проблема.
completing-read
з Icicles. Ви можете навіть просто увімкнути icicle-mode
тимчасово (наприклад, для дзвінка completing-read
), використовуючи, наприклад, макрос icicle-with-icy-mode-ON
.
icomplete
поважати порядок, ви можете додати(cycle-sort-function . ,#'identity)
до списку метаданих.