Se me ocurrió una solución relativamente buena, que se basa en la org-in-block-p
función, que recomendaría echar un vistazo. Agregue el siguiente código a su init.el
archivo:
(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)
Esto define la función org-toggle-src-eval-no
y debe hacer exactamente lo que desea; cada vez que esté dentro de un bloque de código, alternará la presencia de :eval no
. Lo he vinculado C-c t
, pero no dudes en asignarlo a lo que quieras. Feliz organización.
(end-of-line)
antes de la búsqueda, lo que mueve el punto al final de#+BEGIN_SRC
si está antes (sin limitar ninguna otra funcionalidad). Avísame si todavía tienes problemas.