6
votes

Insérer Yasnippet par nom

Je veux insérer un YASNippet spécifique dans le cadre d'une fonction de EMACS-LISP. Y-a-t-il un moyen de faire ça?

La seule commande qui semble relativement est associée est yas / insert-snippet , mais il ouvre simplement une fenêtre contextuelle avec toutes les options et la documentation ne dit rien de contournement de la fenêtre contextuelle en spécifiant le nom de l'extrait .


0 commentaires

3 Réponses :


5
votes

YAS / INSERT-SNIPPET code> est en effet simplement une mince emballage autour de YAS / EXTEND-SNIPPET CODE> pour une utilisation interactive. Cependant, les structures internes sont ... intéressantes. Juger du code source Ce qui suit fonctionne pour moi lorsque je souhaite élargir l'extrait "défunteur" en mode ELISP:

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


0 commentaires

4
votes

L'auteur de Yasnippet, je pense que vous préféreriez ne pas compter sur des détails internes des structures de données intéressantes de Yasnippet, qui peuvent changer à l'avenir. Je le ferais en fonction de la documentation de YAS / INSERT-SNIPPET CODE> et YAS / RAPIDE-FONCESSES CODE>:

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


2 commentaires

Peut-être que ce serait un ajout valable au colis?


En fait, j'aimerais entendre parler des structures de données, même si je ne pense pas que cette réponse / commentaires sont la bonne place.



2
votes

Je viens d'entrer dans Yasnippet et je voulais installer automatiquement l'un de mes extraits lors de l'ouverture d'un nouveau fichier pour certains modes. Cela m'a conduit ici mais j'ai généré une solution légèrement différente. Fournir une autre alternative: ( "New-shell" est le nom de mon extrait personnel pour fournir un nouveau modèle de script shell ) xxx

imo, ma solution est une TAD moins susceptible de casser si Yasnippet change de façon spectaculaire.


0 commentaires