[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] [PATCH] [babel] Add option to display process buffer when

From: Dan Davison
Subject: Re: [Orgmode] [PATCH] [babel] Add option to display process buffer when editing R source code blocks
Date: Thu, 08 Apr 2010 16:02:10 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)

Julien Barnier <address@hidden> writes:

> Hi,
> This is a small patch to org-babel-R.el which allows to automatically
> display the R process buffer when editing R source code blocks with
> org-edit-src-code.

Hi Julien,

Could I suggest a slightly different route? We already have the
functions org-babel-switch-to-session and org-babel-load-session, which
work for any language. These switch to the process buffer, like your
patch does. I agree with you about wanting a function that ends up
displaying the process buffer and the code edit buffer. I have the
following personal function which achieves that:

(defun dan/org-babel-switch-to-code-with-session (&optional arg)
    "Switch to code edit buffer and display session"
    (interactive "P")
      (org-babel-switch-to-session arg nil))

Could you experiment with these functions, and see if they are
satisfactory, amd let us know if we can improve things? E.g. we could
include a function like my one above to display both the session with
the edit-buffer.

Note that o-b-load-session additionally loads the body of the block into
the session; and that switch-session, if called with a prefix arg,
assigns variables from the header args in the session[1]. These are
bound to M-down and M-up when on a code block.

Oh, and also... org-babel-switch-to-session and org-babel-load-session
use the emacs function pop-to-buffer. That means that there's all sorts
of extra control you can have over how the windows are displayed. See
the documentation for things like pop-to-buffer, pop-up-windows,
split-window-sensibly, special-display-buffer-names, etc.



[1] Just fixed bug here; please pull latest version.


> A custom variable allows to choose between no process buffer
> (default), only the source code block and the process buffer, or the
> org file, the source code block and the process buffer.
> As I'm quite new to git, I hope my patch is usable, because I
> generated it from a org-babel-R.el file which already had some
> modifications from master.
> Sincerely,
> -- 
> Julien
> ---
>  contrib/babel/lisp/langs/org-babel-R.el |   27 ++++++++++++++++++++++++++-
>  1 files changed, 26 insertions(+), 1 deletions(-)
> diff --git a/contrib/babel/lisp/langs/org-babel-R.el 
> b/contrib/babel/lisp/langs/org-babel-R.el
> index 8b333cc..3924089 100644
> --- a/contrib/babel/lisp/langs/org-babel-R.el
> +++ b/contrib/babel/lisp/langs/org-babel-R.el
> @@ -218,7 +218,32 @@ Currently, insert hline if column names in output have 
> been requested."
>    (if column-names-p
>        (cons (car result) (cons 'hline (cdr result)))
>      result))
> -  
> +
> +
> +(defcustom org-babel-R-edit-src-show-process nil
> +  "Layout of windows while editing R source blocks in org files"
> +  :group 'org-babel
> +  :type '(choice (const :tag "No process buffer" nil)
> +                (const :tag "Show source block and process buffer" "full")
> +                (const :tag "Show org file, source block and process buffer" 
> "split")))
> +
> +(defadvice org-edit-src-code (around org-edit-src-code-with-R-process 
> activate)
> +  "Display process buffer when eidting R source code blocks"
> +  (if org-babel-R-edit-src-show-process
> +    (let* ((info (org-babel-get-src-block-info))
> +          (lang (first info))
> +          (R-src-block (and info (string= (upcase lang) "R"))))
> +      ad-do-it
> +      (when R-src-block
> +       (cond ((string= org-babel-R-edit-src-show-process "split")
> +              (split-window-vertically)
> +              (ess-switch-to-end-of-ESS)
> +              (other-window -1))
> +             ((string= org-babel-R-edit-src-show-process "full")
> +              (delete-other-windows)
> +              (ess-switch-to-end-of-ESS)
> +              (other-window 1)))))
> +    ad-do-it))
>  (provide 'org-babel-R)
>  ;;; org-babel-R.el ends here

reply via email to

[Prev in Thread] Current Thread [Next in Thread]