Est-il possible de créer des yasnippets pour développer des extraits dans une section babel en mode org dans le mode approprié?


10

Par exemple, j'ai un mode org qui a ce qui suit

#+BEGIN_SRC emacs-lisp


#+END_SRC

Est-il possible de configurer les yasnippets de telle manière que tous les extraits de mode emacs-lisp puissent être développés à l'intérieur de ce bloc mais pas à l'extérieur?


6
Je pense que la façon "standard" serait de modifier ces blocs de C-c 'toute façon - dans ce cas, le mode majeur emacs-lisp aurait les extraits de yasnippet appropriés chargés lors de l'édition du bloc dans sa fenêtre séparée (qui prend également en charge la bonne indentation etc.)
— VanLaser

Oui, je suis d'accord sur la réponse de VanLaser. Il fonctionne pour n'importe quelle langue prise en charge par emacs.
— dmg

Oh c'est vrai. Tu as raison. Pouvez-vous mettre ceci sur une réponse donc je marque votre réponse comme correcte? Je n'y ai pas pensé: P
— Rafa de Castro

Réponses:


7

À partir du 22 janvier 2017, si vous définissez org-src-tab-acts-nativelyet org-src-fontify-natively, TAB dans les blocs source étendra les extraits de la langue du bloc. Vous souhaiterez peut-être définir yas-buffer-local-conditionpour empêcher les extraits de mode en mode organisationnel de suivre les extraits de mode en mode bloc:

(defun my-org-mode-hook ()
  (setq-local yas-buffer-local-condition
              '(not (org-in-src-block-p t))))
(add-hook 'org-mode-hook #'my-org-mode-hook)

Voir aussi https://github.com/joaotavora/yasnippet/issues/761 , https://github.com/joaotavora/yasnippet/pull/760


2

J'utilise deux méthodes pour cela. J'ai quelques extraits d'organisation pour m'aider à créer les en-têtes babel. Par exemple, celui-ci crée des en-têtes C ++ - 14 pour Babel. Je tape <s C++_et développe:

# -*- mode: snippet -*-
# name: c++_header
# key: C++_
# --
C++ :main no :flags -std=c++14 -Wall --pedantic -Werror :results output :exports both
#include <iostream>
int main()
{
   $0

   return 0;
}

Ensuite, j'utilise Cc 'qui bascule vers le mode de langue spécifique et utilise les extraits de code pour cette langue. Ensuite, utilisez Cc 'pour revenir au fichier org. Ça marche bien.


0

Comme npostavs a déjà répondu, les extraits sont développés différemment selon les langues dans un fichier en mode organisation.

Tapez simplement "co" et [tab] dans le bloc de code Python ou Emacs Lisp.

#+BEGIN_SRC python :session *Python* :results output
co[tab]
# comment
#+END_SRC

#+BEGIN_SRC emacs-lisp :results value scalar
co[tab]
                                        ; comment
#+END_SRC
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.