emacs-orgmode
[Top][All Lists]
Advanced

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

[Orgmode] Re: [org-babel] Using the power of ESS inside an R source code


From: Bernd Weiss
Subject: [Orgmode] Re: [org-babel] Using the power of ESS inside an R source code block
Date: Tue, 26 Oct 2010 20:35:59 -0400
User-agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.11) Gecko/20101013 Thunderbird/3.1.5

Am 26.10.2010 10:05, schrieb Dan Davison:

[...]

Am 24.10.2010 05:44, schrieb Bernd Weiss:

[...]

Dear all,

Yesterday, I spent some time (re-)discovering the power of org-babel
and R. Everything works well but there is one issue that I find
somewhat annoying (I apologise if this word is too rude).

Not at all. Good to know what drawbacks users are encountering. I'm
happy to report that all three of the things you mention are now
possible in the Org buffer. You will need to be using a recent version
of Org-mode (i.e. from within the last few weeks).


Hi Dan & Eric,

Again (and now on-list), thanks a lot for your reply and your help!


As a
long-time ESS user I wish that I could use things like ESS syntax
highlighting,

This, as Eric mentioned, is turned on with
`org-src-fontify-natively'. However from your config below it seems you
have set this variable. So that requires some explanation -- please let
us know if syntax highlighting in the Org buffer is working for you or
not.

Yes, syntax highlighting seems to be work as expected.


indentation

Setting `org-src-tab-acts-natively' causes TAB to have the indenting
effect that you would get in an ESS buffer.[2]

That also works.

I only have a very (very) basic knowledge of elips. So, I guess it is possible to change the "depth" of indentation. The current indentation behaviour is as follows:

#+BEGIN_SRC R :results output :exports results
  library(MASS)
  plot(1,1)
  for(i in 1:10){
    print(i)
  }
[...]

However, I would prefer...

#+BEGIN_SRC R :results output :exports results
library(MASS)
plot(1,1)
for(i in 1:10){
  print(i)
}
[...]


Beyond these two variables, there is a general method that addresses the
issues you are raising. It involves using the function
`org-babel-do-key-sequence-in-edit-buffer'. For example, here is how to
make C-M-\ perform language-specific indentation on the active region in
the source block:

   (defun dan/org-indent-region ()
     (interactive)
     (or (org-babel-do-key-sequence-in-edit-buffer "\C-\M-\\")
         (indent-region)))

    (define-key org-mode-map "\C-\M-\\" 'dan/org-indent-region)


or some keybindings (e.g. for "<-") inside
an R source code block.

This one can be done with

   (defun dan/org-underscore-command ()
     (interactive)
     (or (org-babel-do-key-sequence-in-edit-buffer "_")
         (org-self-insert-command 1)))

    (define-key org-mode-map "_" 'dan/org-underscore-command)

And another one that you may like is for commenting code:

   (defun dan/org-comment-dwim (&optional arg)
     (interactive "P")
     (or (org-babel-do-key-sequence-in-edit-buffer "\M-;")
         (comment-dwim arg)))

    (define-key org-mode-map "\M-;" 'dan/org-comment-dwim)


I hope the above supplies the missing functionality.

Dan


Puh, as I told you I only have a very basic understanding of elisp... If I do a simple copy and paste, I see this error: "Symbol's value as variable is void: org-mode-map". I also guess that I should change "dan/org-underscore-command"...

However, you should not care about my little elips problems. You were really helpful in solving my most important problems!

Thanks,

Bernd




reply via email to

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