2009-07-17 19 views
7

मैं हैक्स प्रोग्रामिंग भाषा के लिए emacs में स्वत: पूर्णता कार्यान्वयन पर काम कर रहा हूं।Emacs में स्वत: पूर्ण विकल्प कैसे प्रदर्शित करें?

मुझे पहले ही पता चला है कि मैं स्वतः पूर्ण करने की सूची कैसे प्राप्त करूं। सूची प्रारूप में है:

'((name1 type1 desc1) 
    (name2 type2 desc2) ... 

मैं minibuffer में वर्तमान में चयनित आइटम के लिए उपयोगकर्ता "name1 type1" कर्सर की स्थिति (स्वत: पूर्ण मोड में) की तरह के बाद प्रारूप में पाठ वाली सूची और desc को प्रदर्शित करना चाहते हैं। उपयोगकर्ता को पूर्ण-पूर्ण मोड में पूरा होने या छोड़ने का विकल्प चुनने में सक्षम होना चाहिए।

जब उपयोगकर्ता कुछ चुनते हैं, तो कर्सर स्थिति पर name1 डाला जाना चाहिए।

ऐसा करने का सबसे अच्छा/आसान तरीका क्या है? क्या ऐसा करने के लिए कुछ मानक emacs तरीका है, या मुझे अपने आप कुछ कोड करना चाहिए?

संपादित करें: मेरे पास बफर पर आधारित स्वत: पूर्ण उम्मीदवारों की सूची प्राप्त करने के लिए कार्य हैं। अब मैं इसे स्वतः पूर्ण करने के लिए एकीकृत करने के लिए संघर्ष कर रहा हूं। चूंकि गेट-पूर्ण भारी ऑपरेशन है, इसलिए मैं इसे केवल तब ट्रिगर करना चाहता हूं जब कर्सर चालू हो। " चरित्र।

यहां मेरे पास कोड है।

(defun get-completes-from-haxe (hxml-file file pos) 
    (let* ((completion-buffer (get-buffer-create "*haxe-completions*")) 
     (cmd (concat "cd " (file-name-directory hxml-file) "; haxe " hxml-file " --display " file "@" (number-to-string pos)))) 
    (ignore-errors 
     (shell-command cmd completion-buffer) 
     (let ((clist (xml-parse-region 1 (buffer-size completion-buffer) completion-buffer)) 
      (completes nil)) 
     (dolist (s (cddar clist)) 
      (when (listp s) 
      (let* ((item (cdr s)) 
        (name (cdaar item)) 
        (type (car (cddadr item))) 
        (desc (cdddr item))) 
       (setf completes (cons name completes))))) 
     completes)))) 

(defun file-find-upwards (buffer file-name) 
    ;; Chase links in the source file and search in the dir where it points. 
    (setq dir-name (or (and (buffer-file-name buffer) 
          (file-name-directory (file-chase-links 
               (buffer-file-name buffer)))) 
        default-directory)) 
    ;; Chase links before visiting the file. This makes it easier to 
    ;; use a single file for several related directories. 
    (setq dir-name (file-chase-links dir-name)) 
    (setq dir-name (expand-file-name dir-name)) 
    ;; Move up in the dir hierarchy till we find a change log file. 
    (let ((file1 (concat dir-name file-name)) 
     parent-dir) 
    (while (and (not (file-exists-p file1)) 
       (progn (setq parent-dir 
          (file-name-directory 
           (directory-file-name 
           (file-name-directory file1)))) 
         ;; Give up if we are already at the root dir. 
         (not (string= (file-name-directory file1) 
            parent-dir)))) 
     ;; Move up to the parent dir and try again. 
     (setq file1 (expand-file-name file-name parent-dir))) 
    ;; If we found the file in a parent dir, use that. Otherwise, 
    ;; return nil 
    (if (or (get-file-buffer file1) (file-exists-p file1)) 
     file1 
     nil))) 


(defun get-candidate-list (buffer pos) 
    (get-completes-from-haxe 
    (file-find-upwards buffer "compile.hxml") 
    (buffer-file-name buffer) 
    pos)) 

उत्तर

7

मैं उत्कृष्ट पैकेज स्वत: पूर्ण सुझाव देंगे: http://www.emacswiki.org/emacs/AutoComplete

आप स्वत: पूर्ण के लिए कस्टम सूत्रों परिभाषित कर सकते हैं और यह काफी सीधे आगे लगता है।

+0

मैंने इसे देखा, लेकिन यह पता नहीं लगा कि टूलटिप्स और दस्तावेज़ों को इसके साथ कैसे प्रदर्शित किया जाए। यह सब ऑफर स्वतः पूर्ण होने की तरह है, जो मैं नहीं चाहता हूं। – Marko

+1

ऑटोप्लेट मोड में दिखता है, एसी-चयन-उम्मीदवार फ़ंक्शन का उपयोग उम्मीदवार के वर्तमान चयन को दिखाने के लिए किया जाता है, आप मिनीबफर – user49117

1

ido.el से ido-fullting-read इसे करने का एक और तरीका है।

इसकी एक उपयोगी विशेषता यह है कि आप उम्मीदवारों को फ़िल्टर करने के लिए नियमित अभिव्यक्तियों का उपयोग कर सकते हैं, और आप इस सुविधा को फ्लाई पर चालू और बंद कर सकते हैं। अधिक जानकारी के लिए ido.el देखें।

1

ido पैकेज में 'ido-fullting-read' नामक सुविधाजनक समापन कार्यक्षमता है। उदाहरण के लिए, यहाँ एक सरल ट्वीक यह एक पंक्ति-दर-पंक्ति आधार में सूचियों को दिखाने या नहीं:

(defun x-ido-completing-read 
    (prompt choices &optional predicate require-match initial-input hist def) 
    (let* ((indent (concat "\n" (make-string (length prompt) ?))) 
     (ido-decorations 
     `("" "" ,indent ,(concat indent "...") 
      "[" "]" " [No match]" " [Matched]" " [Not readable]" " [Too big]"))) 
    (ido-completing-read prompt choices predicate require-match initial-input hist def))) 
1

yasnippet कोड, गूगल कोड से उपलब्ध अंदर, वे जैयून चुंग द्वारा 'ड्रॉपडाउन-list.el' का उपयोग संभावित स्निपेट प्रदर्शित करने के लिए जो बिंदु पर इस्तेमाल किया जा सकता है। यह कर्सर स्थिति पर एक पॉपअप (टूलटिप-जैसे) मेनू देता है जिसे आप तीर कुंजी के साथ चुन सकते हैं और दर्ज कर सकते हैं या आप नंबर से चुन सकते हैं।

http://www.emacswiki.org/emacs/dropdown-list.el

+0

ग्रेट में उतरने के लिए उस फ़ंक्शन के लिए एक सलाह परिभाषित कर सकते हैं, अगर केवल इससे छुटकारा पाना संभव हो दायीं ओर सेलिड :) – Marko

3

क्यों पहियों पुनर्रचना रहते हैं? कंपनी मोड में कुछ भाषाओं के लिए समर्थन है

+0

यह जाने का रास्ता है। मुझे नहीं पता कि मैं कंपनी मोड को क्यों चूक गया और स्पष्ट रूप से कम से कम स्वत: पूर्ण मोड के साथ समय बर्बाद कर दिया। शायद बदसूरत नाम;) – Marko

+1

एकमात्र मुद्दा कंपनी मोड के लिए प्रलेखन है। यह स्पष्ट रूप से बहुत दूर है कि इसका उपयोग कैसे किया जाए और मुझे अपनी कंपनी-सेटअप के लिए पूछने वाले लोगों से कई ईमेल प्राप्त हुए हैं।इसे यहां से कॉन्फ़िगर की गई फाइलों में देखा जा सकता है: http://richardriley.net/projects/emacs/dotemacs – RichieHH

संबंधित मुद्दे