From 8ae0e799189b2685acd10632aa5ea24e573cd1a9 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Wed, 5 Aug 2020 18:23:19 -0400 Subject: [PATCH] lang/org: add eval handler With this, gr and gR will now work in babel blocks to execute a subset of the block (or the whole thing, if you'd like). Results are displayed in a popup buffer (or overlay if :tools (eval +overlay) is enabled). --- modules/lang/org/autoload/org-babel.el | 29 ++++++++++++++++++++++++++ modules/lang/org/autoload/org.el | 8 ------- modules/lang/org/config.el | 4 ++-- 3 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 modules/lang/org/autoload/org-babel.el diff --git a/modules/lang/org/autoload/org-babel.el b/modules/lang/org/autoload/org-babel.el new file mode 100644 index 000000000..b73ad806d --- /dev/null +++ b/modules/lang/org/autoload/org-babel.el @@ -0,0 +1,29 @@ +;;; lang/org/autoload/org-babel.el -*- lexical-binding: t; -*- + +;;;###autoload +(defun +org-eval-handler (beg end) + "TODO" + (save-excursion + (if (not (cl-loop for pos in (list beg (point) end) + if (save-excursion (goto-char pos) (org-in-src-block-p t)) + return (goto-char pos))) + (message "Nothing to evaluate at point") + (org-babel-where-is-src-block-head) + (let ((beg (max beg (match-beginning 5))) + (end (min end (match-end 5))) + (major-mode + (org-src-get-lang-mode (or (org-eldoc-get-src-lang) + (user-error "No lang specified for this src block"))))) + (+eval/region beg end))))) + + +;; +;;; Hooks + +;;;###autoload +(defun +org-clear-babel-results-h () + "Remove the results block for the org babel block at point." + (when (and (org-in-src-block-p t) + (org-babel-where-is-src-block-result)) + (org-babel-remove-result) + t)) diff --git a/modules/lang/org/autoload/org.el b/modules/lang/org/autoload/org.el index 8c4bf1cb9..004d658bd 100644 --- a/modules/lang/org/autoload/org.el +++ b/modules/lang/org/autoload/org.el @@ -468,14 +468,6 @@ All my (performant) foldings needs are met between this and `org-show-subtree' (org-cycle-internal-local) t))))) -;;;###autoload -(defun +org-clear-babel-results-h () - "Remove the results block for the org babel block at point." - (when (and (org-in-src-block-p t) - (org-babel-where-is-src-block-result)) - (org-babel-remove-result) - t)) - ;;;###autoload (defun +org-make-last-point-visible-h () "Unfold subtree around point if saveplace places us in a folded region." diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index a7fabaf38..7f25261e1 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -195,6 +195,8 @@ This forces it to read the background before rendering." (defun +org-init-babel-h () + (set-eval-handler! 'org-mode #'+org-eval-handler) + (setq org-src-preserve-indentation t ; use native major-mode indentation org-src-tab-acts-natively t ; we do this ourselves ;; You don't need my permission (just be careful, mkay?) @@ -1009,8 +1011,6 @@ compelling reason, so..." :m "]c" #'org-babel-next-src-block :m "[c" #'org-babel-previous-src-block :n "gQ" #'org-fill-paragraph - :n "gr" #'org-ctrl-c-ctrl-c - :n "gR" #'org-babel-execute-buffer ;; sensible vim-esque folding keybinds :n "za" #'+org/toggle-fold :n "zA" #'org-shifttab