संग्रह के क्रम को पूरा करना-पढ़ना सम्मान करना


10

कोई एक:

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

या:

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

दबाने पर बफर पूरा होने में एक ही परिणाम पैदा करता है TAB। मैं इसे क्रमबद्ध करने के आदेश का सम्मान कैसे करूं?

जवाबों:


9

* पूर्णता * सूची में छँटाई क्रम 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)मेटाडेटा सूची में जोड़ सकते हैं ।
उमर

2

completing-readसूचियों की एक सूची दें , और यह आदेश का सम्मान करेगा:

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

डॉकस्ट्रिंग कहते हैं:

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

पूरा होने के साथ मिनीबार में एक स्ट्रिंग पढ़ें। PROMPT के साथ संकेत देने के लिए एक स्ट्रिंग है; आम तौर पर यह एक बृहदान्त्र और एक अंतरिक्ष में समाप्त होता है। संकलन तार, एक मुट्ठी, एक मोटे या हैश तालिका की एक सूची हो सकती है। ...

इसलिए यह एक संग्रह के रूप में एक मुट्ठी ले सकता है। वास्तव में, आप कुंजियों के साथ लेकिन मूल्यों के बिना एक मुल्क बना रहे हैं।


यह Emacs 27 में मेरे लिए काम नहीं करता है।
एडम सिम्पसन

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यह है कि यह अजीब newline चरित्र ^से है semantic-format-tag-summarize। हेल्म के लिए, मैं यह नहीं मान सकता कि हर कोई इसका उपयोग करता है। इसलिए 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आखिर में क्या रिटर्न पा रहा हूं, इसका पता लगाने के बाद मैं बग्स को बर्ड्स को सौंपूंगा । मेरे पास एक समाधान था लेकिन मैं अभी भी एक समाधान जानना चाहता हूं completing-read। मुझे पता है कि हेल्म इसे बना सकता है लेकिन सिर्फ यह जानना चाहता है कि क्या कोई आसान तरीका completing-readमौजूद है।
Tu Do

1

यदि आप आइकल्स का उपयोग करते हैं तो ऑर्डर का सम्मान किया जाता है completing-read

(और आप विभिन्न प्रकार के आदेशों का उपयोग करके , या तो अंतःक्रियात्मक रूप से या लिस्प के माध्यम से सॉर्ट कर सकते हैं । और वेनिला एमएसीएस के विपरीत, सॉर्टिंग *Completions*प्रदर्शन और साइकिलिंग ऑर्डर दोनों को प्रभावित करता है ।)


1
Abo-abo के उत्तर में टिप्पणी के रूप में भी, मैं बाहरी पैकेजों पर भरोसा नहीं कर सकता। और ido-completing-readकुछ समस्या हो रही है।
Tu Do

2
शायद आप नहीं कर सकते, लेकिन शायद कोई और कर सकता है। ;-) यह समस्या का एक सरल समाधान है जैसा कि सामने आया: completing-readआइकनों के साथ उपयोग करें । तुम भी बस icicle-modeअस्थायी रूप से (जैसे कॉल के लिए completing-read) चालू कर सकते हैं , का उपयोग कर, जैसे, मैक्रो icicle-with-icy-mode-ON
आकर्षित किया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.