Jawaban:
Urutan penyortiran dalam daftar * Penyelesaian * ditentukan oleh display-sort-functionproperti tabel penyelesaian Anda (seperti yang dikembalikan oleh completion-metadata). Dalam kasus Anda, tabel penyelesaian Anda tidak memiliki properti seperti itu, sehingga jatuh kembali ke default, yaitu mengurutkan menurut abjad.
Kamu dapat memakai:
(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))))
lalu
(completing-read "test: " (my-presorted-completion-table '("a" "b" "c")))
[Ini mengasumsikan Anda menggunakan lexical-binding. ]
Berikan completing-readdaftar daftar, dan itu akan menghormati urutan:
(completing-read "test: " '(("a") ("b") ("c")))
(completing-read "test: " '(("c") ("b") ("a")))
Docstring mengatakan:
(completing-read PROMPT COLLECTION &optional PREDICATEREQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)Baca string di minibuffer, dengan selesai. PROMPT adalah string untuk meminta; biasanya berakhir di titik dua dan spasi. KOLEKSI dapat berupa daftar string, alist, obarray atau tabel hash. ...
Karena itu dapat mengambil daftar sebagai koleksi. Akibatnya, Anda membuat daftar dengan kunci tetapi tanpa nilai.
Saya sarankan tidak menggunakan mantra kuno ini.
Built-in ido-completing-readtidak memiliki kekurangan ini:
(ido-completing-read "test: " '("a" "b" "c"))
(ido-completing-read "test: " '("c" "b" "a"))
Tidak juga helm:
(helm :sources
`((name . "test: ")
(candidates . ("a" "b" "c"))))
(helm :sources
`((name . "test: ")
(candidates . ("c" "b" "a"))))
ido-completing-readadalah bahwa ia memiliki karakter baris baru aneh ^dari semantic-format-tag-summarize. Sedangkan untuk Helm, saya tidak bisa menganggap semua orang menggunakannya. Itu sebabnya completing-readsatu-satunya pilihan.
semantic-format-tag-summarizememberi Anda.
ido
semantic-format-tag-summarizemengembalikan sesuatu di akhir, tetapi karakter tidak ditampilkan di completing-readatau helm-comp-read. Saya sudah menulis fungsi lain di tempat semantic-format-tag-summarize, tanpa wajah. Untuk menampilkan tag (dengan warna) kepada pengguna, saya masih menggunakan semantic-format-tag-summarizetetapi menggunakan buffer khusus dengan widget teks.
semantic-format-tag-summarizekembali pada akhirnya. Saya punya solusi tetapi saya masih ingin tahu solusi untuk itu completing-read. Saya tahu Helm dapat membuatnya tetapi hanya ingin tahu apakah ada cara yang mudah completing-read.
Jika Anda menggunakan Icicles maka urutannya dihormati oleh completing-read.
(Dan Anda dapat menyortir menggunakan perintah penyortiran yang berbeda , baik secara interaktif atau melalui Lisp. Dan tidak seperti vanilla Emacs, penyortiran memengaruhi *Completions*tampilan dan urutan bersepeda.)
ido-completing-readmengalami beberapa masalah.
completing-readdengan Icicles. Anda bahkan dapat menghidupkan icicle-modesementara (misalnya untuk panggilan ke completing-read), menggunakan, misalnya, makro icicle-with-icy-mode-ON.
icompletejuga menghormati pesanan, Anda dapat menambahkan(cycle-sort-function . ,#'identity)ke daftar metadata.