Hi community, I want to execute org babel src block one line a time. Here is what I have tried. I use `isend' to send things to REPL buffer. When "C-<return>" is pressed at first time, a REPL buffer which is decided by `lang' params is startd. Then everything send to that buffer. An additional param `:dir' is configured to decide the starting `default-directry' of the REPL command. ================================================= (eval-after-load "org" '(progn ;; ;; (org-defkey org-mode-map (kbd "C-<return>") 'org-isend-send) (define-key org-mode-map (kbd "C-<return>") 'org-isend-send)
(defun org-isend-send() (interactive) (let* ((oldbuf (current-buffer)) (info (org-babel-get-src-block-info)) (lang (nth 0 info)) (body (nth 1 info)) (params (nth 2 info)) (session (cdr (assoc :session params))) (dir (cdr (assoc :dir params))) (isend--command-buffer (concat "*" session "*")) (working-directory (or (and dir (file-name-as-directory dir)) default-directory))) (when (not (get-buffer isend--command-buffer)) (cond ((string-equal lang "python") (save-current-buffer (let ((default-directory working-directory)) (call-interactively 'run-python) (with-current-buffer "*Python*" (rename-buffer isend--command-buffer))))) ((string-equal lang "sh") (save-current-buffer (let ((default-directory working-directory)) (if (string-equal session "eshell") (eshell) (progn (shell) (with-current-buffer "*shell*" (rename-buffer isend--command-buffer))))))) (t (error "session?"))) (require 'isend) (require 'isend-mode) (when (not isend-mode) (isend-mode 1) (make-local-variable 'isend-mode-map) (define-key isend-mode-map (kbd "C-<return>") nil) (local-set-key (kbd "C-<return>") 'org-isend-send)) (cond ((string-equal lang "python") (isend-ipython-setup)) (t (isend-shell-setup))) ) ;; (display-buffer isend--command-buffer) (isend-display-buffer) (call-interactively 'isend-send) ;; (with-current-buffer isend--command-buffer ;; (goto-char (point-max)) ;; (comint-send-input) ;; (funcall (key-binding (kbd "RET"))) ;; ) )))) ======================================== I want to execute my shells/python/ruby scirpts this way by writing out them first, then `C-<return>' doing the rest. Does anyone know a better or more native `org' way to do this? Thank you for your help.