emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [O] [PATCH] session with python-mode.el complains of void py-toggle-


From: Myles English
Subject: Re: [O] [PATCH] session with python-mode.el complains of void py-toggle-shells
Date: Wed, 23 Jan 2013 12:46:46 +0000
User-agent: mu4e 0.9.9.5-dev6; emacs 24.2.1

Hi Nick,

Nick Dokos writes:

> Myles English <address@hidden> wrote:

>> I think it should be possible to execute a python block in a session
>> using python-mode.el but get this message:
>> 
>> "Symbol's function definition is void: py-toggle-shells"

I have made a bit of progress with the patch below.  The breakage may
have been due to changes in python-mode.el .  The patch works for
versions 6.0.10 and 6.1.0.

> I get in trouble much sooner than you do: when evaluating the first code
> block.  The error in my case was that run-python was called with the
> wrong number of args (from the same function: it's a couple of lines
> before py-toggle-shells is called). I'm running
>
> GNU Emacs 24.3.50.2 (x86_64-unknown-linux-gnu, GTK+ Version 2.24.4) of 
> 2012-12-29
>
> and run-python does indeed need a required arg in this version:
>
> ,----
> | run-python is an interactive autoloaded compiled Lisp function in
> | `python.el'.
> | 
> | (run-python CMD &optional DEDICATED SHOW)
> | 
> | Run an inferior Python process.
> | Input and output via buffer named after
> | `python-shell-buffer-name'.  If there is a process already
> | running in that buffer, just switch to it.
> `----
>
> So I changed the call to
>
>
>       (run-python py-python-command)
>
> and then all the code blocks could execute with no problem. Has
> run-python changed signature recently?

Doing git blame ob-python.el shows that not much has changed in that
file over the last couple of years.

> This may or may not be the problem you are running into however.

I have made some progress and the patch below passes this test:

#+BEGIN_SRC emacs-lisp
(add-to-list 'load-path
             "~/.emacs.d/plugins/org-mode/lisp")
  (require 'org)
  (org-babel-do-load-languages
   'org-babel-load-languages
   '((python . t)))
(setq org-babel-python-mode 'python-mode)
#+END_SRC

#+begin_src python :results output :session a
import sys
#+end_src

#+begin_src python :results output :session a
print(sys.path)
#+end_src

Patch:

--- lisp/ob-python.el
+++ lisp/ob-python.el
@@ -32,7 +32,7 @@
 
 (declare-function org-remove-indentation "org" )
 (declare-function py-shell "ext:python-mode" (&optional argprompt))
-(declare-function py-toggle-shells "ext:python-mode" (arg))
+(declare-function py-toggle-shell "ext:python-mode" (arg))
 (declare-function run-python "ext:python" (&optional cmd noshow new))
 
 (defvar org-babel-tangle-lang-exts)
@@ -162,16 +162,17 @@ then create.  Return the initialized session."
        ;; Make sure that py-which-bufname is initialized, as otherwise
        ;; it will be overwritten the first time a Python buffer is
        ;; created.
-       (py-toggle-shells py-default-interpreter)
+       (py-toggle-shell py-default-interpreter)
        ;; `py-shell' creates a buffer whose name is the value of
        ;; `py-which-bufname' with '*'s at the beginning and end
        (let* ((bufname (if (and python-buffer (buffer-live-p python-buffer))
                            (replace-regexp-in-string ;; zap surrounding *
                             "^\\*\\([^*]+\\)\\*$" "\\1" python-buffer)
                          (concat "Python-" (symbol-name session))))
-              (py-which-bufname bufname))
-         (py-shell)
-         (setq python-buffer (concat "*" bufname "*"))))
+              (py-buffer-name bufname))
+         (setq python-buffer (concat "*" bufname "*"))
+         (py-shell nil nil nil nil nil python-buffer)
+         ))
        (t
        (error "No function available for running an inferior Python")))
       (setq org-babel-python-buffers



Myles



reply via email to

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