컬렉션의 읽기-읽기 존중 정렬 순서 만들기


10

어느 한 쪽:

(completing-read "test: " '("a" "b" "c"))

또는:

(completing-read "test: " '("c" "b" "a"))

를 누르면 완료 버퍼에서 동일한 결과를 생성합니다 TAB. 정렬 순서를 어떻게 존중합니까?

답변:


9

* 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. ]


당신이 원하는 경우 icomplete도 순서를 존중, 당신은 추가 할 수 있습니다 (cycle-sort-function . ,#'identity)메타 데이터 목록에.
Omar

2

completing-read목록의 목록을 제공 하면 순서가 존중됩니다.

(completing-read "test: " '(("a") ("b") ("c")))
(completing-read "test: " '(("c") ("b") ("a")))

Docstring은 말합니다 :

(completing-read PROMPT COLLECTION &optional PREDICATE REQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)

미니 버퍼에서 문자열을 읽고 완성하십시오. PROMPT는 프롬프트 할 문자열입니다. 일반적으로 콜론과 공백으로 끝납니다. COLLECTION은 문자열 목록, 목록, obarray 또는 해시 테이블 일 수 있습니다. ...

따라서 컬렉션으로 목록을 가져올 수 있습니다. 실제로, 키는 있지만 값은없는 목록을 만듭니다.


이것은 Emacs 27에서 나에게는 효과가 없다.
Adam Simpson

2

이 고대 주문을 사용하지 않는 것이 좋습니다.

내장 기능 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"))))

1
문제 ido-completing-read^에서 개행 문자가 이상하다는 것 입니다 semantic-format-tag-summarize. Helm은 모든 사람이 사용한다고 가정 할 수 없습니다. 이것이 completing-read유일한 옵션 인 이유 입니다.
Tu Do

그것은 그것을 사용하지 않는 절름발이의 이유입니다. semantic-format-tag-summarize당신이주는 모든 것을 후 처리 하십시오.
abo-abo

또는에 대한 버그 리포트를 제출ido
ABO-ABO

1
나도 그렇게했지만 성공하지 못했습니다. 의 출력 semantic-format-tag-summarize은 끝에 무언가 를 반환하지만 문자가 completing-read또는에 표시되지 않습니다 helm-comp-read. 나는 아직 semantic-format-tag-summarize얼굴없이 다른 기능을 이미 작성했습니다 . 태그 (색상 포함)를 사용자에게 표시하기 위해 여전히 semantic-format-tag-summarize텍스트 위젯과 함께 사용자 정의 버퍼를 사용 하지만 사용자 정의 버퍼를 사용합니다.
Tu Do

아마도 나는 semantic-format-tag-summarize마지막에 무엇이 반환 되는지 알아 낸 후에 Ido에 버그를 제출할 것 입니다. 나는 해결책이 있었지만 여전히 해결책을 알고 싶다 completing-read. 나는 Helm이 그것을 할 수 있다는 것을 알고 있지만 쉬운 방법이 completing-read있는지 알고 싶었습니다 .
Tu Do

1

차가워 요 를 사용하는 경우 순서는 completing-read입니다.

( 대화식 또는 Lisp를 통해 다른 정렬 순서를 사용하여 정렬 할 수 있습니다 . 그리고 바닐라 이맥스와 달리 정렬은 *Completions*표시 및 순환 순서에 영향을줍니다 .)


1
abo-abo의 답변에 대한 의견과 동일하게 외부 패키지에 의존 할 수 없습니다. 그리고 ido-completing-read문제가 있습니다.
Tu Do

2
아마도 당신은 할 수 없지만 다른 누군가는 할 수 있습니다. ;-) 이것은 문제에 대한 간단한 해결책 completing-read입니다. 차가워 요와 함께 사용하십시오 . icicle-mode예를 completing-read들어, macro를 사용하여 일시적으로 (예를 들어 전화를 걸기 위해 ) 켤 수도 있습니다 icicle-with-icy-mode-ON.
Drew
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.