emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* How to execute org babel src block  line by line?
@ 2016-04-18  8:44 Xor3
  2016-04-19 19:05 ` Eduardo Ochs
  0 siblings, 1 reply; 2+ messages in thread
From: Xor3 @ 2016-04-18  8:44 UTC (permalink / raw)
  To: emacs-orgmode

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.

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: How to execute org babel src block line by line?
  2016-04-18  8:44 How to execute org babel src block line by line? Xor3
@ 2016-04-19 19:05 ` Eduardo Ochs
  0 siblings, 0 replies; 2+ messages in thread
From: Eduardo Ochs @ 2016-04-19 19:05 UTC (permalink / raw)
  To: emacs-orgmode

Hi Xor3,

Maybe you should take a look at eev - more specifically, at eepitch,
which is one of its modules... there's a demo here, starting at 0:16,

  http://angg.twu.net/eev-videos/video4-eepitch.mp4
  http://www.youtube.com/watch?v=Lj_zKC5BR64

and there's a tutorial here:

  http://angg.twu.net/eev-intros/find-eev-quick-intro.html

I am not sure if it is already as compatible with Org as it should - I
use Org all the time, but just a few basic features... if you want to
try it and stumble on any problems please let me know and I will fix
everything ASAP - I am in the middle of my holidays. =)

  Cheers!
    Eduardo Ochs
    eduardoochs@gmail.com
    http://angg.twu.net/



P.S.: I am trying isend-mode now.

On Mon, Apr 18, 2016 at 5:44 AM, Xor3 <eude.xj@foxmail.com> wrote:
> 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.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-04-19 19:05 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-18  8:44 How to execute org babel src block line by line? Xor3
2016-04-19 19:05 ` Eduardo Ochs

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).