Я придумал относительно хорошее решение, основанное на org-in-block-p
функции, которую я бы посоветовал посмотреть. Добавьте следующий код в ваш init.el
файл:
(defun org-toggle-src-eval-no ()
"Will toggle ':eval no' on the src block begin line"
(defun in-src-block-p ()
"Returns t when the point is inside a source code block"
(string= "src" (org-in-block-p '("src"))))
(defun beginning-src ()
"Find the beginning of the src block"
(let ((case-fold-search t)) (search-backward "#+BEGIN_SRC")))
(defun toggle-eval-no ()
"Handles the toggling of ' :eval no'"
(save-excursion
(end-of-line)
(let ((case-fold-search t)) (search-backward "#+BEGIN_SRC")
(if (search-forward " :eval no" (line-end-position) "f")
(replace-match "")
(insert " :eval no")
))))
(if (in-src-block-p) (toggle-eval-no)))
(defun add-org-toggle-src-key ()
(local-set-key (kbd "C-c t") (lambda () (interactive) (org-toggle-src-eval-no))))
(add-hook 'org-mode-hook 'add-org-toggle-src-key)
Это определяет функцию, org-toggle-src-eval-no
и она должна делать именно то, что вы хотите; всякий раз, когда вы находитесь внутри блока кода, он переключает наличие :eval no
. Я связал это с C-c t
, но не стесняйтесь сопоставить это с тем, что вы хотите. Счастливая организация.