Hi Nick, Nick Dokos writes:
> Myles English <mylesengl...@gmail.com> 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