Discussion:
Option to disable VSUSP at prompt (feature request with proof of concept)
Eric Pruitt
2016-11-24 08:05:20 UTC
Permalink
In my Bash configuration, I have things setup so Ctrl+Z is no longer
translated into a signal at the Bash prompt so it can be remapped. Most
recently, I decided to modify the Bash source to implement this change
in the interpreter because the stty invocations introduced a perceptible
amount of lag on a virtualized OpenBSD host I use. I think this feature
would be a useful default since it usually does not make sense to send
SIGTSTP to a prompt. Here's an accompanying snippet from my inputrc:

# Allows Ctrl+Z to be used to bring programs back into the
# foreground. The cursor is moved to the beginning of the line
# before typing so a specific job can be resumed by typing its
# identifier (e.g. a number) then hitting Ctrl+Z. This depends on
# Ctrl+Z being a literal sequence i.e. "stty susp undef".
"\C-z": "\C-afg \C-m"

With my changes to Bash and this in my inputrc, Ctrl+Z becomes a toggle.
I have attached the patch I wrote for myself. Since I only use modern
POSIX / UNIX-like systems, it was not written with portability in mind
and cannot be disabled with with "set" or "shopt." Consider it a proof
of concept rather than a pull request. Please let me know what you
think.

Thanks,
Eric
Eric Pruitt
2018-10-03 07:14:09 UTC
Permalink
Post by Eric Pruitt
In my Bash configuration, I have things setup so Ctrl+Z is no longer
translated into a signal at the Bash prompt so it can be remapped. Most
recently, I decided to modify the Bash source to implement this change
in the interpreter because the stty invocations introduced a perceptible
amount of lag on a virtualized OpenBSD host I use. I think this feature
would be a useful default since it usually does not make sense to send
# Allows Ctrl+Z to be used to bring programs back into the
# foreground. The cursor is moved to the beginning of the line
# before typing so a specific job can be resumed by typing its
# identifier (e.g. a number) then hitting Ctrl+Z. This depends on
# Ctrl+Z being a literal sequence i.e. "stty susp undef".
"\C-z": "\C-afg \C-m"
This patch had a bug that I recently fixed, and I've attached an updated
version. Under certain conditions, ^Z for SIGTSTP would not be
re-enabled after executing a command. For example, if "cat /dev/zero >
/dev/null" was interrupted by pressing Ctrl+C, pressing Ctrl+Z would not
generate a literal ^Z control character at the next prompt. Some
debugging revealed that I did not fully understand the control flow of
the prompt handling when writing the original patch; control may be
resumed at the top of the "reader_loop" function by way of a long lump
which bypassed the vsusp toggling code. The bug has been fixed by moving
the vsusp toggle logic after the aforementioned long-jump destination.

I'm not requesting that this patch be accepted upstream, just posting an
updated version for anyone that might interested in this feature.

Eric

Loading...