Можно ли сделать яснипеты для расширения фрагментов внутри секции бабы в орг-режиме в соответствующем режиме?

10

Например, у меня есть режим организации, который имеет следующий

#+BEGIN_SRC emacs-lisp


#+END_SRC

Можно ли настроить yasnippets таким образом, чтобы все фрагменты emacs-lisp-mode можно было развернуть внутри этого блока, но не за его пределами?

Рафа де Кастро
источник
6
Я думаю, что «стандартным» способом было бы редактировать эти блоки в C-c 'любом случае - в этом случае основной режим emacs-lisp будет иметь соответствующие фрагменты yasnippet, загруженные при редактировании блока в отдельном окне (которое также заботится о правильном отступе). и т. д.)
VanLaser
Да, я согласен с ответом VanLaser. Работает на любом языке, поддерживаемом emacs.
DMG
О, правда. Вы правы. Можете ли вы указать это в ответе, чтобы я пометил ваш ответ как правильный? Я не думал об этом: P
Рафа де Кастро

Ответы:

7

По состоянию на 22 января 2017 года, если вы установите org-src-tab-acts-nativelyи org-src-fontify-natively, то TAB в исходных блоках расширит фрагменты языка блока. Возможно, вы захотите установить, yas-buffer-local-conditionчтобы фрагменты режима org не затеняли фрагменты режима блока:

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

См. Также https://github.com/joaotavora/yasnippet/issues/761 , https://github.com/joaotavora/yasnippet/pull/760.

npostavs
источник
2

Я использую два метода для этого. У меня есть несколько фрагментов org, которые помогут мне создать заголовки babel. Например, этот создает C ++ - 14 заголовков для Babel. Я печатаю <s C++_и расширяю:

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

Затем я использую Cc ', который переключается в режим определенного языка и использую фрагменты для этого языка. Затем используйте Cc ', чтобы вернуться к файлу org. Это работает хорошо.

DMG
источник
0

Как уже сообщалось, npostavs сниппеты расширяются по-разному в зависимости от языков в одном файле режима org.

Просто введите "co" и [tab] в блоке кода Python или 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
источник