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-functiontí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-readmộ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 PREDICATEREQUIRE-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-readkhô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-readlà 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-readlà lựa chọn duy nhất.
semantic-format-tag-summarizemang lại cho bạn.
ido
semantic-format-tag-summarizetrả về một cái gì đó ở cuối, nhưng ký tự không được hiển thị trong completing-readhoặ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-summarizenhư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-summarizetrả 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-readtồ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-readvới Icicles. Bạn thậm chí có thể chỉ bật icicle-modetạ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.