É possível criar yasnippets para expandir trechos dentro de uma seção babel do modo organizacional no modo apropriado?

10

Por exemplo, eu tenho um modo organizacional que possui o seguinte

#+BEGIN_SRC emacs-lisp


#+END_SRC

É possível configurar o yasnippets de tal maneira que todos os snippets do modo emacs-lisp possam ser expandidos dentro desse bloco, mas não fora dele?

Rafa de Castro
fonte
6
Eu acho que a maneira "padrão" seria editar esses blocos de C-c 'qualquer maneira - nesse caso, o modo principal do emacs-lisp teria os trechos de yasnippet apropriados carregados ao editar o bloco em sua janela separada (que também cuida da indentação correta etc)
VanLaser 11/09/16
Sim, concordo com a resposta do VanLaser. Funciona para qualquer idioma suportado pelo emacs.
Dmg
Oh verdade. Você está certo. Você pode colocar isso em uma resposta para marcar sua resposta como correta? Não pensei nisso: P
Rafa de Castro

Respostas:

7

A partir de 2017, 22 de janeiro, se você definir org-src-tab-acts-nativelye org-src-fontify-natively, em seguida, a TAB nos blocos de origem expandirá trechos do idioma do bloco. Convém definir yas-buffer-local-conditionpara impedir que os snipppets do modo organizacional ocultem os snippets do modo de bloco:

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

Consulte também https://github.com/joaotavora/yasnippet/issues/761 , https://github.com/joaotavora/yasnippet/pull/760

npostavs
fonte
2

Eu uso dois métodos para isso. Tenho alguns trechos da organização para me ajudar a criar os cabeçalhos de babel. Por exemplo, este cria cabeçalhos C ++ - 14 para Babel. Digito <s C++_e expiro:

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

Então eu uso Cc ', que alterna para o modo de idioma específico e usa os trechos para esse idioma. Em seguida, use Cc 'para voltar ao arquivo organizacional. Isso funciona bem.

dmg
fonte
0

Como os npostavs já responderam, os snippets são expandidos de maneira diferente, dependendo dos idiomas em um arquivo de modo organizacional.

Basta digitar "co" e [tab] no bloco de código 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
fonte