кратко: функция применяется только для редактирования символов; discard
не является редактирующим персонажем.
дольше: используйте источник. В lib/readline/bind.c
есть таблица с этой записью:
{ "bind-tty-special-chars", &_rl_bind_stty_chars, 0 },
который присваивает имя опции адресу переменной. Переменная проверяется в нескольких местах в libreadline, в конечном счете, переходя к этой функции:
/* Rebind all of the tty special chars that readline worries about back
to self-insert. Call this before saving the current terminal special
chars with save_tty_chars(). This only works on POSIX termios or termio
systems. */
void
rl_tty_unset_default_bindings (kmap)
Keymap kmap;
{
/* Don't bother before we've saved the tty special chars at least once. */
if (RL_ISSTATE(RL_STATE_TTYCSAVED) == 0)
return;
RESET_SPECIAL (_rl_tty_chars.t_erase);
RESET_SPECIAL (_rl_tty_chars.t_kill);
# if defined (VLNEXT) && defined (TERMIOS_TTY_DRIVER)
RESET_SPECIAL (_rl_tty_chars.t_lnext);
# endif /* VLNEXT && TERMIOS_TTY_DRIVER */
# if defined (VWERASE) && defined (TERMIOS_TTY_DRIVER)
RESET_SPECIAL (_rl_tty_chars.t_werase);
# endif /* VWERASE && TERMIOS_TTY_DRIVER */
}
Вы можете увидеть имена stty
, используемые в структурах: erase
kill
и lnext
Там нет discard
. bash
не устанавливает его (или сбрасывает).