GNU bug report logs -
#76943
30.1; comint-interrupt-subjob does not interrupt process in inferior-python
Previous Next
To reply to this bug, email your comments to 76943 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#76943
; Package
emacs
.
(Tue, 11 Mar 2025 15:28:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Garid Zorigoo <garidzorigoo <at> gmail.com>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Tue, 11 Mar 2025 15:28:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
I cannot interrupt the long process in the inferior python.
How to reproduce:
1. M-x run-python
2. Start long process (for example below: time.sleep())
3. Both C-c C-c and M-x comint-interrupt-subjob doesn't interrupt the
process
-----------------------------------------------------------------------------
Python 3.13.2 (main, Feb 5 2025, 08:05:21) [GCC 14.2.1 20250128] on linux
Type "help", "copyright", "credits" or "license" for more information.
warning: can't use pyrepl: terminal doesn't have the required clear
capability; TERM=dumb
>>> import time
>>> time.sleep(1000)
C-c C-c C-c C-c
M-x c o m i n t - i n t e r r u p t - s u b j o b RET
----------------------------------------------------------------------------
This is probably due to the new updated REPL in python-3.13
(this seems caused another issue discussed in the
thread
https://lists.gnu.org/archive/html/bug-gnu-emacs/2025-02/msg01038.html)
In GNU Emacs 30.1 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.48,
cairo version 1.18.2)
Windowing system distributor 'The X.Org Foundation', version 11.0.12401006
System Description: Arch Linux
Configured using:
'configure --with-x-toolkit=gtk3 --sysconfdir=/etc --prefix=/usr
--libexecdir=/usr/lib --localstatedir=/var --disable-build-details
--with-cairo --with-harfbuzz --with-libsystemd --with-modules
--with-native-compilation=aot --with-tree-sitter 'CFLAGS=-march=x86-64
-mtune=generic -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3
-Wformat -Werror=format-security -fstack-clash-protection
-fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -g
-ffile-prefix-map=/build/emacs/src=/usr/src/debug/emacs -flto=auto'
'LDFLAGS=-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro
-Wl,-z,now -Wl,-z,pack-relative-relocs -flto=auto''
Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
LCMS2 LIBOTF LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP NOTIFY
INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB
Important settings:
value of $LANG: en_US.UTF-8
value of $XMODIFIERS: @im=fcitx
locale-coding-system: utf-8-unix
Major mode: Lisp Interaction
Minor modes in effect:
fido-vertical-mode: t
icomplete-vertical-mode: t
icomplete-mode: t
fido-mode: t
tooltip-mode: t
global-eldoc-mode: t
eldoc-mode: t
show-paren-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
minibuffer-regexp-mode: t
line-number-mode: t
indent-tabs-mode: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
Load-path shadows:
None found.
Features:
(shadow sort mail-extr emacsbug message mailcap yank-media puny dired
dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068
epg-config gnus-util mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils time-date compile text-property-search
cl-seq cl-extra help-mode files-x python rx project byte-opt gv bytecomp
byte-compile compat pcase treesit comint subr-x ansi-osc ring ansi-color
cus-start cus-load icomplete cl-loaddefs cl-lib rmc iso-transl tooltip
cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-mode mwheel term/x-win x-win term/common-win x-dnd touch-screen
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq
simple cl-generic indonesian philippine cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese composite emoji-zwj charscript charprop case-table
epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button
loaddefs theme-loaddefs faces cus-face macroexp files window
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget keymap hashtable-print-readable backquote threads dbusbind
inotify lcms2 dynamic-setting system-font-setting font-render-setting
cairo gtk x-toolkit xinput2 x multi-tty move-toolbar
make-network-process native-compile emacs)
Memory information:
((conses 16 111495 10661) (symbols 48 13485 0) (strings 32 32939 3083)
(string-bytes 1 844154) (vectors 16 14053)
(vector-slots 8 183289 6546) (floats 8 38 3333) (intervals 56 393 10)
(buffers 992 14))
[Message part 2 (text/html, inline)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#76943
; Package
emacs
.
(Thu, 13 Mar 2025 02:05:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 76943 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
I found a work around, not sure how & why.
Changing the value of comint-ptyp seems to make comint-interrupt-subjob
work:
(setq comint-ptyp nil)
Hope this helps.
I believe that inferior-python should be able to interrupt subjobs
by default (i.e. without the user changing the above variable value).
Garid
[Message part 2 (text/html, inline)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#76943
; Package
emacs
.
(Thu, 13 Mar 2025 06:23:01 GMT)
Full text and
rfc822 format available.
Message #11 received at 76943 <at> debbugs.gnu.org (full text, mbox):
> From: Garid Zorigoo <garidzorigoo <at> gmail.com>
> Date: Thu, 13 Mar 2025 11:04:23 +0900
>
>
> I found a work around, not sure how & why.
> Changing the value of comint-ptyp seems to make comint-interrupt-subjob work:
>
> (setq comint-ptyp nil)
>
> Hope this helps.
>
> I believe that inferior-python should be able to interrupt subjobs
> by default (i.e. without the user changing the above variable value).
kobarity, any comments or suggestions?
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#76943
; Package
emacs
.
(Thu, 13 Mar 2025 16:14:02 GMT)
Full text and
rfc822 format available.
Message #14 received at 76943 <at> debbugs.gnu.org (full text, mbox):
Eli Zaretskii wrote:
>
> > From: Garid Zorigoo <garidzorigoo <at> gmail.com>
> > Date: Thu, 13 Mar 2025 11:04:23 +0900
> >
> >
> > I found a work around, not sure how & why.
> > Changing the value of comint-ptyp seems to make comint-interrupt-subjob work:
> >
> > (setq comint-ptyp nil)
> >
> > Hope this helps.
> >
> > I believe that inferior-python should be able to interrupt subjobs
> > by default (i.e. without the user changing the above variable value).
>
> kobarity, any comments or suggestions?
This turned out to be an effect of the setting to make the tty RAW,
which Mattias and I did as part of #68559.
(defconst python-shell-setup-code
"\
try:
import tty
except ImportError:
pass
else:
tty.setraw(0)"
"Code used to setup the inferior Python processes.")
This is to disable echo back on MacOS, so there is a workaround to
limit this setting to MacOS only. That would not solve the
`comint-interrupt-subjob' problem on MacOS, though.
`comint-ptyp' is passed as the CURRENT-GROUP argument of
`interrupt-process' function. It is finally processed by the
process_send_signal function in process.c. If CURRENT-GROUP is
non-nil, it first try to send the control character instead of sending
the signal. However, I believe the control character is ignored
because tty is set to RAW by the above code.
I feel it would be better for process_send_signal to check if the tty
is RAW, but I am not sure if that is appropriate.
Since process_send_signal checks whether control characters such as
VINTR are valid, we can also avoid this problem by disabling VINTR as
follows.
(defconst python-shell-setup-code
"\
try:
import tty
import termios
except ImportError:
pass
else:
tty.setraw(0)
attr = termios.tcgetattr(0)
attr[-1][termios.VINTR] = b'\x00'
termios.tcsetattr(0, termios.TCSANOW, attr)"
"Code used to setup the inferior Python processes.")
In summary, there are at least four possible options.
1. Set `comint-ptyp' to nil.
2. Improve process_send_signal to check if tty is RAW.
3. Disable VINTR in addition to making the tty RAW.
4. Do not set tty to RAW except on MacOS.
If we choose 4, I believe MacOS requires one of 1-3.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#76943
; Package
emacs
.
(Thu, 13 Mar 2025 16:50:01 GMT)
Full text and
rfc822 format available.
Message #17 received at 76943 <at> debbugs.gnu.org (full text, mbox):
> Date: Fri, 14 Mar 2025 01:13:29 +0900
> From: kobarity <kobarity <at> gmail.com>
> Cc: Garid Zorigoo <garidzorigoo <at> gmail.com>,
> 76943 <at> debbugs.gnu.org
>
> Eli Zaretskii wrote:
> >
> > > From: Garid Zorigoo <garidzorigoo <at> gmail.com>
> > > Date: Thu, 13 Mar 2025 11:04:23 +0900
> > >
> > >
> > > I found a work around, not sure how & why.
> > > Changing the value of comint-ptyp seems to make comint-interrupt-subjob work:
> > >
> > > (setq comint-ptyp nil)
> > >
> > > Hope this helps.
> > >
> > > I believe that inferior-python should be able to interrupt subjobs
> > > by default (i.e. without the user changing the above variable value).
> >
> > kobarity, any comments or suggestions?
>
> This turned out to be an effect of the setting to make the tty RAW,
> which Mattias and I did as part of #68559.
>
> (defconst python-shell-setup-code
> "\
> try:
> import tty
> except ImportError:
> pass
> else:
> tty.setraw(0)"
> "Code used to setup the inferior Python processes.")
>
> This is to disable echo back on MacOS, so there is a workaround to
> limit this setting to MacOS only. That would not solve the
> `comint-interrupt-subjob' problem on MacOS, though.
>
> `comint-ptyp' is passed as the CURRENT-GROUP argument of
> `interrupt-process' function. It is finally processed by the
> process_send_signal function in process.c. If CURRENT-GROUP is
> non-nil, it first try to send the control character instead of sending
> the signal. However, I believe the control character is ignored
> because tty is set to RAW by the above code.
>
> I feel it would be better for process_send_signal to check if the tty
> is RAW, but I am not sure if that is appropriate.
Paul, WDYT about this?
> Since process_send_signal checks whether control characters such as
> VINTR are valid, we can also avoid this problem by disabling VINTR as
> follows.
>
> (defconst python-shell-setup-code
> "\
> try:
> import tty
> import termios
> except ImportError:
> pass
> else:
> tty.setraw(0)
> attr = termios.tcgetattr(0)
> attr[-1][termios.VINTR] = b'\x00'
> termios.tcsetattr(0, termios.TCSANOW, attr)"
> "Code used to setup the inferior Python processes.")
>
> In summary, there are at least four possible options.
>
> 1. Set `comint-ptyp' to nil.
> 2. Improve process_send_signal to check if tty is RAW.
> 3. Disable VINTR in addition to making the tty RAW.
> 4. Do not set tty to RAW except on MacOS.
>
> If we choose 4, I believe MacOS requires one of 1-3.
Thanks.
Let's see what Paul thinks about this, and take it from there.
This bug report was last modified today.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.