Câu trả lời:
Thứ tự sắp xếp trong danh sách * Hoàn thành * được xác định bởi thuộc display-sort-function
tính của bảng hoàn thành của bạn (như được trả về bởi completion-metadata
). Trong trường hợp của bạn, bảng hoàn thành của bạn không có thuộc tính như vậy, vì vậy nó sẽ trở về mặc định, đó là sắp xếp theo thứ tự bảng chữ cái.
Bạn có thể dùng:
(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))))
và sau đó
(completing-read "test: " (my-presorted-completion-table '("a" "b" "c")))
[Điều này giả sử bạn đang sử dụng lexical-binding
. ]
Đưa ra completing-read
một danh sách các danh sách, và nó sẽ tôn trọng thứ tự:
(completing-read "test: " '(("a") ("b") ("c")))
(completing-read "test: " '(("c") ("b") ("a")))
Chuỗi tài liệu nói:
(completing-read PROMPT COLLECTION &optional PREDICATE
REQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)
Đọc một chuỗi trong bộ thu nhỏ, với sự hoàn thành. PROMPT là một chuỗi để nhắc với; thông thường nó kết thúc trong một dấu hai chấm và một không gian. THU THẬP có thể là một danh sách các chuỗi, một alist, obarray hoặc bảng băm. ...
Do đó, nó có thể mất một alist như là một bộ sưu tập. Thực tế, bạn đang tạo một liên kết với các khóa nhưng không có giá trị.
Tôi đề nghị không sử dụng câu thần chú cổ xưa này.
Tích hợp ido-completing-read
không có thiếu sót này:
(ido-completing-read "test: " '("a" "b" "c"))
(ido-completing-read "test: " '("c" "b" "a"))
Cũng không helm
:
(helm :sources
`((name . "test: ")
(candidates . ("a" "b" "c"))))
(helm :sources
`((name . "test: ")
(candidates . ("c" "b" "a"))))
ido-completing-read
là nó có kí tự xuống dòng lạ ^
từ semantic-format-tag-summarize
. Đối với Helm, tôi không thể cho rằng mọi người sử dụng nó. Đó là lý do tại sao completing-read
là lựa chọn duy nhất.
semantic-format-tag-summarize
mang lại cho bạn.
ido
semantic-format-tag-summarize
trả về một cái gì đó ở cuối, nhưng ký tự không được hiển thị trong completing-read
hoặc helm-comp-read
. Tôi đã viết một chức năng khác thay thế semantic-format-tag-summarize
, chưa có mặt. Để hiển thị thẻ (có màu) cho người dùng, tôi vẫn sử dụng semantic-format-tag-summarize
nhưng sử dụng bộ đệm tùy chỉnh với các tiện ích văn bản thay thế.
semantic-format-tag-summarize
trả về cuối cùng. Tôi đã có một giải pháp nhưng tôi vẫn muốn biết một giải pháp completing-read
. Tôi biết Helm có thể làm được nhưng chỉ muốn biết liệu có một cách dễ dàng completing-read
tồn tại không.
Nếu bạn sử dụng Icicles thì thứ tự được tôn trọng bởi completing-read
.
(Và bạn có thể sắp xếp bằng các thứ tự sắp xếp khác nhau , tương tác hoặc thông qua Lisp. Và không giống như vanilla Emacs, việc sắp xếp ảnh hưởng đến cả *Completions*
thứ tự hiển thị và đi xe đạp.)
ido-completing-read
đang có một số vấn đề.
completing-read
với Icicles. Bạn thậm chí có thể chỉ bật icicle-mode
tạm thời (ví dụ: cho cuộc gọi đến completing-read
), bằng cách sử dụng, ví dụ: macro icicle-with-icy-mode-ON
.