2012-04-18 10 views
5

मैं emacs-lisp में किसी फ़ंक्शन के हिस्से के रूप में एक विशिष्ट yasnippet डालना चाहता हूं। क्या ऐसा करने के लिए कोई रास्ता है?नाम से yasnippet डालें

yas/insert-snippet से संबंधित एकमात्र आदेश yas/insert-snippet है, लेकिन यह आसानी से सभी विकल्पों के साथ एक पॉपअप खोलता है और दस्तावेज स्निपेट नाम निर्दिष्ट करके पॉपअप को बाईपास करने के बारे में कुछ भी नहीं कहता है।

उत्तर

5

yas/insert-snippet वास्तव में इंटरैक्टिव उपयोग के लिए yas/expand-snippet के आसपास एक पतली आवरण है। हालांकि, आंतरिक संरचनाएं ... दिलचस्प हैं। स्रोत कोड निम्नलिखित मेरे लिए काम करता है जब मैं elisp-मोड में "defun" टुकड़ा का विस्तार करना चाहते से आंकना:

(yas/expand-snippet 
    (yas/template-content (cdar (mapcan #'(lambda (table) 
              (yas/fetch table "defun")) 
             (yas/get-snippet-tables))))) 
3

yasnippet के लेखक के रूप में, मुझे लगता है कि आप नहीं बल्कि आंतरिक विवरण पर भरोसा नहीं होता yasnippet की रोचक डेटा संरचनाओं का, जो भविष्य में बदल सकता है। मैं yas/insert-snippet और yas/prompt-functions के प्रलेखन के आधार पर यह करना होगा:

(defun yas/insert-by-name (name) 
    (flet ((dummy-prompt 
      (prompt choices &optional display-fn) 
      (declare (ignore prompt)) 
      (or (find name choices :key display-fn :test #'string=) 
       (throw 'notfound nil)))) 
    (let ((yas/prompt-functions '(dummy-prompt))) 
     (catch 'notfound 
     (yas/insert-snippet t))))) 

(yas/insert-by-name "defun") 
+0

शायद यह पैकेज के लिए एक सार्थक अतिरिक्त होगा? – phils

+0

वास्तव में, मुझे डेटा संरचनाओं के बारे में सुनना अच्छा लगेगा, हालांकि मुझे नहीं लगता कि यह उत्तर/टिप्पणियां उचित स्थान हैं। – Malabarba

1

मैं सिर्फ yasnippet में हो रही है और मुझे विश्वास है मोड के लिए एक नई फ़ाइल खोलने पर स्वचालित रूप से मेरे से कोई एक स्निपेट डालने के लिए चाहता था। इससे मुझे यहां पहुंचा लेकिन मैंने थोड़ा अलग समाधान उत्पन्न किया है। प्रदान करना अभी तक एक और विकल्प:

(defun jsm/new-file-snippet (key) 
    "Call particular yasnippet template for newly created 
files. Use by adding a lambda function to the particular mode 
hook passing the correct yasnippet key" 
    (interactive) 
    (if (= (buffer-size) 0) 
     (progn 
     (insert key) 
     (call-interactively 'yas-expand)))) 

(add-hook 'sh-mode-hook '(lambda() (jsm/new-file-snippet "new-shell"))) 

IMO ("नए-खोल" एक नया खोल स्क्रिप्ट टेम्पलेट प्रदान करने के लिए मेरी व्यक्तिगत टुकड़ा का नाम है), मेरे समाधान एक बालक कम नाटकीय रूप से परिवर्तन yasnippet चाहिए तोड़ने की संभावना है ।

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