◐ Shell
clean mode source ↗

`getpass`'s `echo_char` should not affect keyboard shortcuts

Bug report

Bug description:

Hitting Ctrl+U should clear the line but this is badly handled when echo_char is given:

>>> getpass.getpass()
Password: 
'bar'
>>> getpass.getpass(echo_char="*")
Password: *******
'foo\x15bar'

See #138514 (comment).

This issue stems from the fact that we switch to non-canonical mode (https://www.man7.org/linux/man-pages/man3/termios.3.html). The rationale is that in canonical mode, we only have a line-by-line feedback (so we would see the characters only when we hit ENTER, which is not really useful...)

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Linked PRs