From mboxrd@z Thu Jan 1 00:00:00 1970 From: Myles English Subject: Re: [PATCH] session with python-mode.el complains of void py-toggle-shells Date: Wed, 23 Jan 2013 12:46:46 +0000 Message-ID: <87fw1sxe15.fsf@gmail.com> References: <87ham8y5rw.fsf@gmail.com> <3314.1358914289@alphaville> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([208.118.235.92]:34163) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TxziK-0000T6-NP for Emacs-orgmode@gnu.org; Wed, 23 Jan 2013 07:46:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TxziJ-0007n9-BC for Emacs-orgmode@gnu.org; Wed, 23 Jan 2013 07:46:00 -0500 Received: from mail-wi0-f180.google.com ([209.85.212.180]:44361) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TxziJ-0007mu-2j for Emacs-orgmode@gnu.org; Wed, 23 Jan 2013 07:45:59 -0500 Received: by mail-wi0-f180.google.com with SMTP id hj13so668770wib.7 for ; Wed, 23 Jan 2013 04:45:58 -0800 (PST) In-reply-to: <3314.1358914289@alphaville> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: nicholas.dokos@hp.com Cc: Emacs-orgmode Hi Nick, Nick Dokos writes: > Myles English 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