Zarówno:
(completing-read "test: " '("a" "b" "c"))
lub:
(completing-read "test: " '("c" "b" "a"))
daje ten sam wynik w buforze zakończenia po naciśnięciu TAB. Jak sprawić, by przestrzegał porządku sortowania?
Zarówno:
(completing-read "test: " '("a" "b" "c"))
lub:
(completing-read "test: " '("c" "b" "a"))
daje ten sam wynik w buforze zakończenia po naciśnięciu TAB. Jak sprawić, by przestrzegał porządku sortowania?
Odpowiedzi:
Kolejność sortowania na liście * Uzupełnienia * zależy od display-sort-functionwłaściwości tabeli uzupełnień (zwróconej przez completion-metadata). W twoim przypadku tabela ukończenia nie ma takiej właściwości, więc wraca do wartości domyślnej, czyli sortowania alfabetycznego.
Możesz użyć:
(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))))
i wtedy
(completing-read "test: " (my-presorted-completion-table '("a" "b" "c")))
[Zakłada się, że używasz lexical-binding. ]
Podaj completing-readlistę list, a uszanuje kolejność:
(completing-read "test: " '(("a") ("b") ("c")))
(completing-read "test: " '(("c") ("b") ("a")))
Dokument mówi:
(completing-read PROMPT COLLECTION &optional PREDICATEREQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)Po zakończeniu przeczytaj ciąg znaków w minibuforze. PROMPT to ciąg znaków służący do monitowania; zwykle kończy się dwukropkiem i spacją. KOLEKCJA może być listą łańcuchów, alist, obarray lub tablicą haszującą. ...
Może zatem przyjmować alist jako zbiór. W efekcie tworzysz listę z kluczami, ale bez wartości.
Proponuję nie używać tego starożytnego zaklęcia.
Wbudowany ido-completing-readnie ma tego niedoboru:
(ido-completing-read "test: " '("a" "b" "c"))
(ido-completing-read "test: " '("c" "b" "a"))
Ani też helm:
(helm :sources
`((name . "test: ")
(candidates . ("a" "b" "c"))))
(helm :sources
`((name . "test: ")
(candidates . ("c" "b" "a"))))
ido-completing-readjest to, że ma dziwny znak nowej linii ^z semantic-format-tag-summarize. Co do Helma, nie mogę założyć, że wszyscy go używają. Dlatego completing-readjest jedyną opcją.
semantic-format-tag-summarizeci daje.
ido
semantic-format-tag-summarizezwraca coś na końcu, ale znak nie jest wyświetlany w completing-readlub helm-comp-read. Napisałem już inną funkcję zamiast semantic-format-tag-summarizebez twarzy. Do wyświetlania znaczników (z kolorami) użytkownikom nadal używam, semantic-format-tag-summarizeale zamiast tego używam niestandardowego bufora z widżetami tekstowymi.
semantic-format-tag-summarizezwraca na końcu. Miałem rozwiązanie, ale nadal chcę znać rozwiązanie completing-read. Wiem, że Helm może to zrobić, ale chciałem tylko wiedzieć, czy istnieje łatwy sposób completing-read.
Jeśli używasz Sopli, kolejność jest przestrzegana przez completing-read.
(I możesz sortować za pomocą różnych porządków sortowania , interaktywnie lub przez Lisp. W przeciwieństwie do waniliowych Emacsów, sortowanie wpływa zarówno na *Completions*kolejność wyświetlania, jak i kolejność.)
ido-completing-readma jakiś problem.
completing-readz Soplami. Możesz nawet po prostu włączyć icicle-modetymczasowo (np. Dla połączenia z completing-read), używając np icicle-with-icy-mode-ON. Makra .
icompleterównież uszanować kolejność, możesz dodać znak(cycle-sort-function . ,#'identity)do listy metadanych.