Apakah mungkin untuk membuat yasnippet untuk memperluas cuplikan di dalam bagian babel mode-org dalam mode yang sesuai?

10

Misalnya saya memiliki mode org yang memiliki yang berikut ini

#+BEGIN_SRC emacs-lisp


#+END_SRC

Apakah mungkin untuk mengkonfigurasi yasnippet sedemikian rupa sehingga semua snippet emacs-lisp-mode dapat diperluas di dalam blok itu tetapi tidak di luarnya?

Rafa de Castro
sumber
6
Saya pikir cara "standar" adalah dengan mengedit blok-blok dengan C-c '- dalam hal itu, mode utama emacs-lisp akan memiliki potongan yasnippet yang tepat dimuat saat mengedit blok di jendela yang terpisah (yang juga menangani lekukan yang tepat dll.)
VanLaser
Ya, saya setuju dengan respons VanLaser. Ini berfungsi untuk semua bahasa yang didukung oleh emacs.
dmg
Oh benar Kamu benar. Bisakah Anda menempatkan ini pada respons sehingga saya menandai respons Anda sebagai benar? Saya tidak memikirkan hal itu: P
Rafa de Castro

Jawaban:

7

Mulai 2017, 22 Januari, jika Anda menetapkan org-src-tab-acts-nativelydan org-src-fontify-natively, maka TAB di blok sumber akan memperluas cuplikan bahasa blok. Anda mungkin ingin mengatur yas-buffer-local-conditionagar mode cuplikan org dari membayangi cuplikan mode blok:

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

Lihat juga https://github.com/joaotavora/yasnippet/issues/761 , https://github.com/joaotavora/yasnippet/pull/760

npostavs
sumber
2

Saya menggunakan dua metode untuk ini. Saya memiliki beberapa cuplikan org untuk membantu saya membuat header babel. Misalnya, yang ini membuat C ++ - 14 header untuk Babel. Saya mengetik <s C++_dan memperluas:

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

Lalu saya menggunakan Cc 'yang beralih ke mode bahasa tertentu dan menggunakan snippet untuk bahasa itu. Kemudian gunakan Cc 'untuk kembali ke file org. Ini bekerja dengan baik.

dmg
sumber
0

Seperti yang sudah dijawab npostav, snippet diperluas secara berbeda tergantung pada bahasa dalam satu file mode org.

Cukup ketik "co" dan [tab] dalam Python atau Emacs Lisp code block.

#+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
sumber