2012-04-18 9 views
5

特定のyasnippetをemacs-lispの関数の一部として挿入したい。それを行う方法はありますか?yasnippetを名前で挿入する

関連すると思われる唯一のコマンドはyas/insert-snippetですが、すべてのオプションを含むポップアップが表示されるだけで、スニペット名を指定してポップアップをバイパスする方法についての説明はありません。

答えて

5

yas/insert-snippetは実際には対話的に使用するためのyas/expand-snippetの周りの薄いラッパーです。しかし、内部構造は興味深い。私はelispのモードでは、「関数定義」スニペットを展開したいときに私のために動作しない以下のソースコードから判断:yasnippetの著者として

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

、私はあなたではなく内部の詳細に依存していないと思います将来的に変化する可能性のあるyasnippetの興味深いデータ構造について説明します。

(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になっていると私は、自動的に特定のモードのために新しいファイルを開いたときに私のスニペットの1を挿入したい:私はyas/insert-snippetyas/prompt-functionsの文書に基づいてこれを行うだろう。それで私はここに導かれましたが、私は若干異なる解決法を生み出しました。提供するさらに別の代替:IMO

(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"))) 

「新・シェルは、」新しいシェルスクリプトのテンプレートを提供するための私の個人的なスニペットの名前です)、私の解決策は少し影響を受けにくく、劇的な変化をyasnippetすべき破壊することです。

関連する問題