unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* How to use a new buffer as Python shell?
@ 2022-08-18 15:40 edgar
  2022-08-18 15:55 ` Emanuel Berg
  2022-08-20  8:38 ` James Thomas
  0 siblings, 2 replies; 6+ messages in thread
From: edgar @ 2022-08-18 15:40 UTC (permalink / raw)
  To: help-gnu-emacs

Hi!

I know that "shell" can mean different things to new people. What I want 
is to have 2 (or n) Python buffers optionally linked to their respective 
2 (or n) Python interpreters (1 for each).

Right now, if I create a new buffer with python-mode and do C-c C-p 
(which executes run-python) or C-c C-z (python-shell-switch-to-shell), 
all buffers are linked to one interpreter (in *Python* buffer).

What I would like is to have something like C-u C-c C-z or M-x 
run-new-python (bogus function name) and get a prompt with the name of 
the new buffer, where another interpreter is running, and which I can 
use to send lines of code from the buffer with python-mode (the one from 
which the command run-new-python was issued).

I have seen that Org (org-babel) is able to send to new interpreters, if 
the :session value is changed. I think that for what I have been looking 
is similar in a way (hopefully makes it clearer)

Is this possible? I've been running around in circles online. Can you 
please help me? Thanks!

"GNU Emacs 28.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.33, 
cairo version 1.17.6) of 2022-04-28"

-------------------------------------------------
This free account was provided by VFEmail.net - report spam to abuse@vfemail.net
 
ONLY AT VFEmail! - Use our Metadata Mitigator to keep your email out of the NSA's hands!
$24.95 ONETIME Lifetime accounts with Privacy Features!  
15GB disk! No bandwidth quotas!
Commercial and Bulk Mail Options!  



^ permalink raw reply	[flat|nested] 6+ messages in thread
* Re: How to use a new buffer as Python shell?
@ 2022-08-19  9:48 Anders Munch
  0 siblings, 0 replies; 6+ messages in thread
From: Anders Munch @ 2022-08-19  9:48 UTC (permalink / raw)
  To: help-gnu-emacs@gnu.org; +Cc: edgar@openmail.cc

edgar@openmail.cc wrote:

> What I would like is to have something like C-u C-c C-z or M-x run-new-python (bogus function name) and get a prompt with the name of the new buffer, where another interpreter is running, and which I can use to send lines of code from the buffer with python-mode (the one from which the command run-new-python was issued).

You are using python.el.  You may have more luck with python-mode.el.

C-u M-x py-shell RET
starts a new dedicated interpreter subshell.  I'm not sure exactly what that means, but it looks like it does much of what you want.  You use C-u once, and on subsequent subshell actions python-mode knows to use the same one from the same .py buffer. 

One caveat, it looks like you can't rename the buffer to something with the name of the originating buffer, because then you break the connection between the .py buffer and the subshell.
Some lisp hacking may be required to teach python-mode to prompt for a better subshell buffer name. 

regards, Anders




^ permalink raw reply	[flat|nested] 6+ messages in thread
* Re: How to use a new buffer as Python shell?
@ 2022-08-19 20:12 edgar
  0 siblings, 0 replies; 6+ messages in thread
From: edgar @ 2022-08-19 20:12 UTC (permalink / raw)
  To: Anders Munch; +Cc: help-gnu-emacs

On 2022-08-19 09:48, Anders Munch wrote:
> You are using python.el.  You may have more luck with python-mode.el.
>
> C-u M-x py-shell RET
> starts a new dedicated interpreter subshell.
> --- snip 8< ---
>
> regards, Anders

Thanks, Anders. When I
0. cd ~/.emacs.d/ && git clone  
https://gitlab.com/python-mode-devs/python-mode.git
1. emacs -q
2. evaluate

       (push "~/.emacs.d/eglot" load-path)
       (autoload 'eglot "eglot")
       (autoload 'ensure-eglot "eglot")
       (autoload 'eglot-ensure "eglot")
       (with-eval-after-load "eglot"
         (setq eldoc-echo-area-use-multiline-p 2))

       (push "~/.emacs.d/python-mode" load-path)
       (autoload 'python-mode "python-mode" "Python Mode." t)

       ;; Add Eglot to Python
       (add-hook 'python-mode-hook 'eglot-ensure)

       ;; Configuration for python-mode.el
       (add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
       (add-to-list 'interpreter-mode-alist '("python3" . python-mode))

3. Execute =C-x C-f myfile.py=  =(find-file "myfile.py")=
4. Issue =C-u M-x py-shell=

The frame is split into 2 windows. The buffer in which I was working  
is not shown (I have to =C-x b= to return). When I am back at the  
buffer with =myfile.py=, I run =M-x py-execute-line=. This creates a  
temporary buffer that I have to kill manually. Also, in step 3 I get

     Directory-local variables error: (error Command attempted to use  
minibuffer while in minibuffer)

Does anybody know if it is possible to avoid switching to a different  
buffer when =C-u M-x py-shell= is called? To avoid the temporary  
buffer, I added =(setq py-execute-no-temp-p t)=, at the end of the  
configuration. Now, the temporary buffer is not shown, but if I go to  
the REPL and type =np RET= twice, I have this:

     >>> >>> >>> np
     >>> np
     Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
     NameError: name 'np' is not defined
     >>>

(the first line of myfile.py is a comment. The second line--the one  
that I try to run--is =import numpy as np=). I also have a second  
*Python-xxxx* buffer which was automatically created. All this happens  
with or without the Eglot lines.

"GNU Emacs 28.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.33,  
cairo version 1.17.6)
  of 2022-04-28"
python-mode.el commit: 765af45, Tag: 6.3.0 (72)


-------------------------------------------------
This free account was provided by VFEmail.net - report spam to abuse@vfemail.net
 
ONLY AT VFEmail! - Use our Metadata Mitigator to keep your email out of the NSA's hands!
$24.95 ONETIME Lifetime accounts with Privacy Features!  
15GB disk! No bandwidth quotas!
Commercial and Bulk Mail Options!  



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-08-20 13:50 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-18 15:40 How to use a new buffer as Python shell? edgar
2022-08-18 15:55 ` Emanuel Berg
2022-08-20  8:38 ` James Thomas
2022-08-20 13:50   ` edgar
  -- strict thread matches above, loose matches on Subject: below --
2022-08-19  9:48 Anders Munch
2022-08-19 20:12 edgar

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).