chip@ateng.ateng.com (Chip Salzenberg) (01/23/90)
As distributed, Bash 1.04 picks up the current erase and kill characters from the tty mode structure -- but only for BSD, not SysV. This patch adds this feature for SysV, and also cleans up the ttymode code a little. Index: readline/readline.c *************** *** 1035,1060 **** readline_default_bindings () { ! #ifdef TIOCGETP ! struct sgttyb ttybuff; int tty = fileno (rl_instream); ! if (ioctl (tty, TIOCGETP, &ttybuff) != -1) ! { ! int erase = ttybuff.sg_erase, kill = ttybuff.sg_kill; ! if (erase != -1 && keymap[erase].type == ISFUNC) ! keymap[erase].function = rl_rubout; ! if (kill != -1 && keymap[kill].type == ISFUNC) ! keymap[kill].function = rl_unix_line_discard; } #ifdef TIOCGLTC { struct ltchars lt; ! if (ioctl (tty, TIOCGLTC, <) != -1) { ! int erase = lt.t_werasc, nextc = lt.t_lnextc; if (erase != -1 && keymap[erase].type == ISFUNC) --- 1037,1063 ---- readline_default_bindings () { ! int erase = -1, kill = -1; int tty = fileno (rl_instream); ! #ifdef NEW_TTY_DRIVER ! struct sgttyb ttybuff; ! if (ioctl (tty, TIOCGETP, &ttybuff) == 0) ! { ! erase = ttybuff.sg_erase; ! kill = ttybuff.sg_kill; } #ifdef TIOCGLTC + { struct ltchars lt; + int erase, nextc; ! if (ioctl (tty, TIOCGLTC, <) == 0) { ! int erase = lt.t_werasc; ! int nextc = lt.t_lnextc; if (erase != -1 && keymap[erase].type == ISFUNC) *************** *** 1065,1070 **** } } #endif /* TIOCGLTC */ ! #endif /* TIOCGETP */ } --- 1068,1091 ---- } } + #endif /* TIOCGLTC */ ! ! #else /* not new driver */ ! ! struct termio ttyio; ! ! if (ioctl (tty, TCGETA, &ttyio) == 0) ! { ! erase = ttyio.c_cc[VERASE]; ! kill = ttyio.c_cc[VKILL]; ! } ! ! #endif /* not new driver */ ! ! if (erase != -1 && keymap[erase].type == ISFUNC) ! keymap[erase].function = rl_rubout; ! ! if (kill != -1 && keymap[kill].type == ISFUNC) ! keymap[kill].function = rl_unix_line_discard; }