回答:
* Completions *リストのソート順は、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")))
docstringは言う:
(completing-read PROMPT COLLECTION &optional PREDICATEREQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)ミニバッファー内の文字列を、補完して読み取ります。PROMPTはプロンプトを表示する文字列です。通常は、コロンとスペースで終わります。COLLECTIONは、文字列のリスト、alist、obarray、またはハッシュテーブルです。...
したがって、それはコレクションとしてalistを取ることができます。実際には、キーはあるが値はない連想リストを作成しています。
私はこの古代の呪文を使用しないことをお勧めします。
組み込みに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。Helmでそれができることは知っていますが、簡単な方法がcompleting-read存在するかどうかを知りたかっただけです。
つららを使用する場合、順序はによって尊重されcompleting-readます。
(そして、対話的にまたはLispを介して、さまざまな並べ替え順序を使用して並べ替えることができます。そして、バニラEmacsとは異なり、並べ替えは*Completions*表示順序と循環順序の両方に影響します。)
ido-completing-read、いくつかの問題があります。
completing-readです。Iciclesを使用するだけです。たとえばmacroを使用して、icicle-mode一時的に(たとえばの呼び出しのためにcompleting-read)オンにすることもできicicle-with-icy-mode-ONます。