emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Eric Schulte <eric.schulte@gmx.com>
To: Andrew Young <youngar17@gmail.com>
Cc: emacs-orgmode@gnu.org, Mikhail Titov <mlt@gmx.us>
Subject: Re: [babel, ess] How can I make S-RET to be multi-session friendly?
Date: Tue, 14 Aug 2012 07:17:36 -0600	[thread overview]
Message-ID: <87y5lh6291.fsf@gmx.com> (raw)
In-Reply-To: CAMvvmF_BHe+dcPTc3AQ39=LghHT58hqGkVLqr7n5xj5FbUK7Rw@mail.gmail.com

Andrew Young <youngar17@gmail.com> writes:

> Hello All,
>

Hi Andrew,

>
> Well, despite being relatively new to elisp, I've decided to take a
> crack at one of your problems. I'm not too sure what is causing the
> strange behaviour of the session property, but I have some thoughts on
> getting that one function working.
>

Thanks for sending this along, unfortunately ob-R.el is currently
without a core maintainer, so I'm not sure who on list would have the
expertise to review your submission.  Although hopefully those
experiencing the problem can at least check if it works for them.

>
> Bear with me :-)
>
> It seems that for me, the inferior ess process is not being properly
> associated with the src edit buffer.  It is being set correctly by
> org-babel-R-associate-session, and then being set a second time
> incorrectly by org-babel-edit-prep:R.  Commenting out line 5 in
> org-babel-edit-prep:R seems to fix this issue, although I'm honestly
> not sure if or what it breaks.  Everything seems ok for me, but ymmv.
>
> Heres the change:
> #+begin_src emacs-lisp
>   (defun org-babel-edit-prep:R (info)
>     (let ((session (cdr (assoc :session (nth 2 info)))))
>       (when (and session (string-match "^\\*\\(.+?\\)\\*$" session))
>         (save-match-data (org-babel-R-initiate-session session nil))
>         ;;(setq ess-local-process-name (match-string 1 session)))))
>         )))
> #+end_src
>

Perhaps replacing the commented "setq ess-local-process-name" line with
ess-switch-process could solve this problem?  Could the process name be
found programatically, perhaps using the regexp solution above.

>
> Is there any one having such issues, or who can weigh in on what
> exactly is happening here?
>
> Without making the above change, it is possible to manually attach an
> ess process to the current src buffer by using the command:
>
> C-c C-s (ess-switch-process)
>
> You'll have to specify the process name, rather than the buffer name,
> and the session must have already been started. From here all ESS
> functions should work. For example, calling:
>
> C-c C-z (ess-switch-to-end-of-ESS)
>
> will open the session buffer.
>
> I've implemented a variation of the function you mentioned, which uses
> the inferior process discussed above.  It should do something at least
> remotely like the function you were asking for, and will work with
> babel sessions, as long as the ess process is associated
> properly. I've made one change worth mentioning: the function now
> prompts for a buffer name to set up on if no ess process is associated,
> instead of only and always using *R*.
>
> Try it out, and let me know what you think.  Of course feel free to
> tweak & share!  This is my real first dive into lisp, so if anyone has
> anything to share please do.
>
> #+begin_src emacs-lisp
>   (defun my-ess-eval ()
>     (interactive)
>     (update-ess-process-name-list)
>     (if (not (ess-make-buffer-current))
>         ;; Obtain the target ess session
>         (let ((session
>                (read-string "Use session: "
>                             (let ((proc (get-process ess-current-process-name)))
>                               (if (processp proc)
>                                   (buffer-name (process-buffer proc)))))))
>           ;; Obtain buffer matching session
>           (if (not (get-buffer session))
>               ;; If there is no buffer, create a new one
>               (save-excursion
>                 (inferior-ess)
>                 (rename-buffer session)))
>           (setq ess-local-process-name
>                 (process-name (get-buffer-process session)))))
>     (ess-make-buffer-current)
>     (if (and transient-mark-mode mark-active)
>         (call-interactively 'ess-eval-region)
>       (call-interactively 'ess-eval-line-and-step)))
>
>     (add-hook 'ess-mode-hook
>               '(lambda ()
>                  (local-set-key [(shift return)] 'my-ess-eval)))
>
>     (add-hook 'inferior-ess-mode-hook
>               '(lambda ()
>                  (local-set-key [C-up] 'comint-previous-input)
>                  (local-set-key [C-down] 'comint-next-input)))
>
>     (add-hook 'Rnw-mode-hook
>               '(lambda ()
>                  (local-set-key [(shift return)] 'my-ess-eval)))
>
>   (require 'ess-site)
>
> #+end_src
>

This looks good to me, perhaps it should be added to the Worg page on
using R with Org-mode?

http://orgmode.org/worg/org-contrib/babel/languages/ob-doc-R.html

Thanks,

>
> Sincerely,
> Andrew Young
>

-- 
Eric Schulte
http://cs.unm.edu/~eschulte

  reply	other threads:[~2012-08-14 13:49 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-09 18:44 [babel, ess] How can I make S-RET to be multi-session friendly? Mikhail Titov
2012-08-09 19:33 ` Achim Gratz
2012-08-10 12:42 ` Eric Schulte
2012-08-10 18:54   ` Mikhail Titov
2012-08-11  3:37     ` Eric Schulte
2012-08-11 14:33       ` Andrew Young
2012-08-14 13:17         ` Eric Schulte [this message]
2012-08-14 21:48           ` Mikhail Titov
2012-08-14 21:59             ` Bastien
2012-08-16 21:06               ` Mikhail Titov
2012-08-17 14:29                 ` Eric Schulte
2012-08-23 22:11                   ` Mikhail Titov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y5lh6291.fsf@gmx.com \
    --to=eric.schulte@gmx.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=mlt@gmx.us \
    --cc=youngar17@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).