bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: fg via keybind modifies tty settings


From: Martin D Kealey
Subject: Re: fg via keybind modifies tty settings
Date: Sun, 22 Sep 2024 10:39:14 +1000

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, <kaddkaka@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.
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]