Antara:
(completing-read "test: " '("a" "b" "c"))
atau:
(completing-read "test: " '("c" "b" "a"))
menghasilkan hasil yang sama dalam buffer penyelesaian saat menekan TAB. Bagaimana cara saya menghormati pesanan pengurutan?
Urutan penyortiran dalam daftar * Penyelesaian * ditentukan oleh display-sort-function
properti 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
. ]
icomplete
juga menghormati pesanan, Anda dapat menambahkan(cycle-sort-function . ,#'identity)
ke daftar metadata.Berikan
completing-read
daftar daftar, dan itu akan menghormati urutan:Docstring mengatakan:
Karena itu dapat mengambil daftar sebagai koleksi. Akibatnya, Anda membuat daftar dengan kunci tetapi tanpa nilai.
sumber
Saya sarankan tidak menggunakan mantra kuno ini.
Built-in
ido-completing-read
tidak memiliki kekurangan ini:Tidak juga
helm
:sumber
ido-completing-read
adalah bahwa ia memiliki karakter baris baru aneh^
darisemantic-format-tag-summarize
. Sedangkan untuk Helm, saya tidak bisa menganggap semua orang menggunakannya. Itu sebabnyacompleting-read
satu-satunya pilihan.semantic-format-tag-summarize
memberi Anda.ido
semantic-format-tag-summarize
mengembalikan sesuatu di akhir, tetapi karakter tidak ditampilkan dicompleting-read
atauhelm-comp-read
. Saya sudah menulis fungsi lain di tempatsemantic-format-tag-summarize
, tanpa wajah. Untuk menampilkan tag (dengan warna) kepada pengguna, saya masih menggunakansemantic-format-tag-summarize
tetapi menggunakan buffer khusus dengan widget teks.semantic-format-tag-summarize
kembali pada akhirnya. Saya punya solusi tetapi saya masih ingin tahu solusi untuk itucompleting-read
. Saya tahu Helm dapat membuatnya tetapi hanya ingin tahu apakah ada cara yang mudahcompleting-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.)sumber
ido-completing-read
mengalami beberapa masalah.completing-read
dengan Icicles. Anda bahkan dapat menghidupkanicicle-mode
sementara (misalnya untuk panggilan kecompleting-read
), menggunakan, misalnya, makroicicle-with-icy-mode-ON
.