Does this happen with any raw-mode application, or just vim? When using readline in Emacs mode, the terminal is necessarily in raw mode.
I suspect what you're seeing is that 'fg' bound to a key is bypasses the normal "exit readline" that would restore the settings. Then when vim exits or is suspended, Bash notices that it's still in raw mode (-icanon), but doesn't otherwise know the details of exactly how you want it cooked (+icanon but what else?). I'll check on this when I get back to my PC. -Martin On Sat, 21 Sep 2024, 09:23 David Moberg, <kaddk...@gmail.com> wrote: > Configuration Information [Automatically generated, do not change]: > Machine: x86_64 > OS: linux-gnu > Compiler: gcc > Compilation CFLAGS: -g -O2 -fno-omit-frame-pointer > -mno-omit-leaf-frame-pointer -flto=auto -ffat-lto-objects > -fstack-protector-strong -fstack-clash-protection -Wformat > -Werror=format-security -fcf-protection -Wall > uname output: Linux Tugge 6.8.0-45-generic #45-Ubuntu SMP PREEMPT_DYNAMIC > Fri Aug 30 12:02:04 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux > Machine Type: x86_64-pc-linux-gnu > > Bash Version: 5.2 > Patch Level: 21 > Release Status: release > > Description: > When a process/job is suspended, foregrounded via ctrl-a as a > keybinding for fg, and then > suspended again, the tty will be in a surprising state where no > input is seen (-echo) > > Repeat-By: > | bind -x '"\C-a":"fg"' # bind C-A to perform fg > vim # > <ctrl-z> # Terminal still works > stty -a > working.txt # store tty settings > <ctrl-a> # Put vim in foreground again > :q # Quit vim > vim # Start a new vim session (*) > <ctrl-z> # Terminal is broken > stty -a > broken.txt # store tty settings > #type text and no echo > > Dumping the tty configuration before and after the broken state > reveals this diff after the > second vim command above (*) has been executed: > > ```console > $ diff working.txt broken.txt > 4c4 > < werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0; > --- > > werase = ^W; lnext = <undef>; discard = <undef>; min = 1; time = > 0; > 6c6 > < -ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl > ixon -ixoff > --- > > -ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr > -icrnl ixon -ixoff > 9c9 > < isig icanon iexten echo echoe echok -echonl -noflsh -xcase > -tostop -echoprt > --- > > isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase > -tostop -echoprt > ``` > > The tty can get back into working state by running `stty sane`. > > By redoing the <start vim> <ctrl-z> <ctrl-a> <quit vim> <stty sane> > it can be seen that the > terminal will only be broken after every second invocation. > > Similar issue(?) in fish that has been resolved: > https://github.com/fish-shell/fish-shell/issues/2114 > > I have experienced the same weirdness with other applications than > vim, for example python3. > I have experienced the issue several terminals: Wezterm, xfce-4 > terminal. >