¿Es posible hacer yasnippets para expandir fragmentos dentro de una sección babel en modo org en el modo apropiado?


10

Por ejemplo, tengo un modo de organización que tiene lo siguiente

#+BEGIN_SRC emacs-lisp


#+END_SRC

¿Es posible configurar yasnippets de tal manera que todos los fragmentos emacs-lisp-mode se puedan expandir dentro de ese bloque pero no fuera de él?


66
Creo que la forma "estándar" sería editar esos bloques de C-c 'todos modos; en ese caso, el modo principal emacs-lisp tendría los fragmentos de yasnippet apropiados cargados mientras edita el bloque en su ventana separada (que también se ocupa de la sangría correcta etc.)
— VanLaser

Sí, estoy de acuerdo con la respuesta de VanLaser. Funciona para cualquier idioma compatible con emacs.
— dmg

Oh verdad. Tienes razón. ¿Puede poner esto en una respuesta para que marque su respuesta como correcta? No pensé en eso: P
— Rafa de Castro

Respuestas:


7

A partir de 2017, 22 de enero, si configura org-src-tab-acts-nativelyy org-src-fontify-natively, luego, TAB en los bloques de origen expandirá los fragmentos del idioma del bloque. Es posible que desee configurar yas-buffer-local-conditionpara evitar que los fragmentos de modo de organización sigan los fragmentos del modo de bloque:

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

Ver también https://github.com/joaotavora/yasnippet/issues/761 , https://github.com/joaotavora/yasnippet/pull/760


2

Yo uso dos métodos para esto. Tengo algunos fragmentos de organización para ayudarme a crear los encabezados de babel. Por ejemplo, este crea C ++ - 14 encabezados para Babel. Escribo <s C++_y amplío:

# -*- 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;
}

Luego uso Cc 'que cambia al modo de idioma específico y uso los fragmentos para ese idioma. Luego use Cc 'para volver al archivo org. Funciona bien.


0

Como npostavs ya respondió, los fragmentos se expanden de manera diferente dependiendo de los idiomas dentro de un archivo de modo de organización.

Simplemente escriba "co" y [tab] dentro del bloque de código Python o 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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.