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?

Rafa de Castro
la source
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

npostavs
la source
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.

dmg
la source
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
RUserPassingBy
la source