1 /* rltty.c -- functions to prepare and restore the terminal for readline's
4 /* Copyright (C) 1992 Free Software Foundation, Inc.
6 This file is part of the GNU Readline Library, a library for
7 reading lines of text with interactive input and history editing.
9 The GNU Readline Library is free software; you can redistribute it
10 and/or modify it under the terms of the GNU General Public License
11 as published by the Free Software Foundation; either version 2, or
12 (at your option) any later version.
14 The GNU Readline Library is distributed in the hope that it will be
15 useful, but WITHOUT ANY WARRANTY; without even the implied warranty
16 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 The GNU General Public License is often shipped with GNU software, and
20 is generally kept in a file called COPYING or LICENSE. If you do not
21 have a copy of the license, write to the Free Software Foundation,
22 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
23 #define READLINE_LIBRARY
25 #if defined (HAVE_CONFIG_H)
29 #include <sys/types.h>
34 #if defined (HAVE_UNISTD_H)
36 #endif /* HAVE_UNISTD_H */
40 #if defined (GWINSZ_IN_SYS_IOCTL)
41 # include <sys/ioctl.h>
42 #endif /* GWINSZ_IN_SYS_IOCTL */
46 #include "rlprivate.h"
52 rl_vintfunc_t
*rl_prep_term_function
= rl_prep_terminal
;
53 rl_voidfunc_t
*rl_deprep_term_function
= rl_deprep_terminal
;
55 static void block_sigint
PARAMS((void));
56 static void release_sigint
PARAMS((void));
58 static void set_winsize
PARAMS((int));
60 /* **************************************************************** */
62 /* Signal Management */
64 /* **************************************************************** */
66 #if defined (HAVE_POSIX_SIGNALS)
67 static sigset_t sigint_set
, sigint_oset
;
68 #else /* !HAVE_POSIX_SIGNALS */
69 # if defined (HAVE_BSD_SIGNALS)
70 static int sigint_oldmask
;
71 # endif /* HAVE_BSD_SIGNALS */
72 #endif /* !HAVE_POSIX_SIGNALS */
74 static int sigint_blocked
;
76 /* Cause SIGINT to not be delivered until the corresponding call to
84 #if defined (HAVE_POSIX_SIGNALS)
85 sigemptyset (&sigint_set
);
86 sigemptyset (&sigint_oset
);
87 sigaddset (&sigint_set
, SIGINT
);
88 sigprocmask (SIG_BLOCK
, &sigint_set
, &sigint_oset
);
89 #else /* !HAVE_POSIX_SIGNALS */
90 # if defined (HAVE_BSD_SIGNALS)
91 sigint_oldmask
= sigblock (sigmask (SIGINT
));
92 # else /* !HAVE_BSD_SIGNALS */
93 # if defined (HAVE_USG_SIGHOLD)
95 # endif /* HAVE_USG_SIGHOLD */
96 # endif /* !HAVE_BSD_SIGNALS */
97 #endif /* !HAVE_POSIX_SIGNALS */
102 /* Allow SIGINT to be delivered. */
106 if (sigint_blocked
== 0)
109 #if defined (HAVE_POSIX_SIGNALS)
110 sigprocmask (SIG_SETMASK
, &sigint_oset
, (sigset_t
*)NULL
);
112 # if defined (HAVE_BSD_SIGNALS)
113 sigsetmask (sigint_oldmask
);
114 # else /* !HAVE_BSD_SIGNALS */
115 # if defined (HAVE_USG_SIGHOLD)
117 # endif /* HAVE_USG_SIGHOLD */
118 # endif /* !HAVE_BSD_SIGNALS */
119 #endif /* !HAVE_POSIX_SIGNALS */
124 /* **************************************************************** */
126 /* Saving and Restoring the TTY */
128 /* **************************************************************** */
130 /* Non-zero means that the terminal is in a prepped state. */
131 static int terminal_prepped
;
133 static _RL_TTY_CHARS _rl_tty_chars
, _rl_last_tty_chars
;
135 /* If non-zero, means that this process has called tcflow(fd, TCOOFF)
136 and output is suspended. */
137 #if defined (__ksr1__)
141 /* Dummy call to force a backgrounded readline to stop before it tries
142 to get the tty settings. */
147 #if defined (TIOCGWINSZ)
150 if (ioctl (tty
, TIOCGWINSZ
, &w
) == 0)
151 (void) ioctl (tty
, TIOCSWINSZ
, &w
);
152 #endif /* TIOCGWINSZ */
155 #if defined (NO_TTY_DRIVER)
157 #elif defined (NEW_TTY_DRIVER)
159 /* Values for the `flags' field of a struct bsdtty. This tells which
160 elements of the struct bsdtty have been fetched from the system and
162 #define SGTTY_SET 0x01
163 #define LFLAG_SET 0x02
164 #define TCHARS_SET 0x04
165 #define LTCHARS_SET 0x08
168 struct sgttyb sgttyb
; /* Basic BSD tty driver information. */
169 int lflag
; /* Local mode flags, like LPASS8. */
170 #if defined (TIOCGETC)
171 struct tchars tchars
; /* Terminal special characters, including ^S and ^Q. */
173 #if defined (TIOCGLTC)
174 struct ltchars ltchars
; /* 4.2 BSD editing characters */
176 int flags
; /* Bitmap saying which parts of the struct are valid. */
179 #define TIOTYPE struct bsdtty
183 static void save_tty_chars
PARAMS((TIOTYPE
*));
184 static int _get_tty_settings
PARAMS((int, TIOTYPE
*));
185 static int get_tty_settings
PARAMS((int, TIOTYPE
*));
186 static int _set_tty_settings
PARAMS((int, TIOTYPE
*));
187 static int set_tty_settings
PARAMS((int, TIOTYPE
*));
189 static void prepare_terminal_settings
PARAMS((int, TIOTYPE
, TIOTYPE
*));
192 save_tty_chars (tiop
)
195 _rl_last_tty_chars
= _rl_tty_chars
;
197 if (tiop
->flags
& SGTTY_SET
)
199 _rl_tty_chars
.t_erase
= tiop
->sgttyb
.sg_erase
;
200 _rl_tty_chars
.t_kill
= tiop
->sgttyb
.sg_kill
;
203 if (tiop
->flags
& TCHARS_SET
)
205 _rl_tty_chars
.t_intr
= tiop
->tchars
.t_intrc
;
206 _rl_tty_chars
.t_quit
= tiop
->tchars
.t_quitc
;
207 _rl_tty_chars
.t_start
= tiop
->tchars
.t_startc
;
208 _rl_tty_chars
.t_stop
= tiop
->tchars
.t_stopc
;
209 _rl_tty_chars
.t_eof
= tiop
->tchars
.t_eofc
;
210 _rl_tty_chars
.t_eol
= '\n';
211 _rl_tty_chars
.t_eol2
= tiop
->tchars
.t_brkc
;
214 if (tiop
->flags
& LTCHARS_SET
)
216 _rl_tty_chars
.t_susp
= tiop
->ltchars
.t_suspc
;
217 _rl_tty_chars
.t_dsusp
= tiop
->ltchars
.t_dsuspc
;
218 _rl_tty_chars
.t_reprint
= tiop
->ltchars
.t_rprntc
;
219 _rl_tty_chars
.t_flush
= tiop
->ltchars
.t_flushc
;
220 _rl_tty_chars
.t_werase
= tiop
->ltchars
.t_werasc
;
221 _rl_tty_chars
.t_lnext
= tiop
->ltchars
.t_lnextc
;
224 _rl_tty_chars
.t_status
= -1;
228 get_tty_settings (tty
, tiop
)
232 #if defined (TIOCGWINSZ)
236 tiop
->flags
= tiop
->lflag
= 0;
238 if (ioctl (tty
, TIOCGETP
, &(tiop
->sgttyb
)) < 0)
240 tiop
->flags
|= SGTTY_SET
;
242 #if defined (TIOCLGET)
243 if (ioctl (tty
, TIOCLGET
, &(tiop
->lflag
)) == 0)
244 tiop
->flags
|= LFLAG_SET
;
247 #if defined (TIOCGETC)
248 if (ioctl (tty
, TIOCGETC
, &(tiop
->tchars
)) == 0)
249 tiop
->flags
|= TCHARS_SET
;
252 #if defined (TIOCGLTC)
253 if (ioctl (tty
, TIOCGLTC
, &(tiop
->ltchars
)) == 0)
254 tiop
->flags
|= LTCHARS_SET
;
261 set_tty_settings (tty
, tiop
)
265 if (tiop
->flags
& SGTTY_SET
)
267 ioctl (tty
, TIOCSETN
, &(tiop
->sgttyb
));
268 tiop
->flags
&= ~SGTTY_SET
;
270 readline_echoing_p
= 1;
272 #if defined (TIOCLSET)
273 if (tiop
->flags
& LFLAG_SET
)
275 ioctl (tty
, TIOCLSET
, &(tiop
->lflag
));
276 tiop
->flags
&= ~LFLAG_SET
;
280 #if defined (TIOCSETC)
281 if (tiop
->flags
& TCHARS_SET
)
283 ioctl (tty
, TIOCSETC
, &(tiop
->tchars
));
284 tiop
->flags
&= ~TCHARS_SET
;
288 #if defined (TIOCSLTC)
289 if (tiop
->flags
& LTCHARS_SET
)
291 ioctl (tty
, TIOCSLTC
, &(tiop
->ltchars
));
292 tiop
->flags
&= ~LTCHARS_SET
;
300 prepare_terminal_settings (meta_flag
, oldtio
, tiop
)
302 TIOTYPE oldtio
, *tiop
;
304 readline_echoing_p
= (oldtio
.sgttyb
.sg_flags
& ECHO
);
306 /* Copy the original settings to the structure we're going to use for
308 tiop
->sgttyb
= oldtio
.sgttyb
;
309 tiop
->lflag
= oldtio
.lflag
;
310 #if defined (TIOCGETC)
311 tiop
->tchars
= oldtio
.tchars
;
313 #if defined (TIOCGLTC)
314 tiop
->ltchars
= oldtio
.ltchars
;
316 tiop
->flags
= oldtio
.flags
;
318 /* First, the basic settings to put us into character-at-a-time, no-echo
320 tiop
->sgttyb
.sg_flags
&= ~(ECHO
| CRMOD
);
321 tiop
->sgttyb
.sg_flags
|= CBREAK
;
323 /* If this terminal doesn't care how the 8th bit is used, then we can
324 use it for the meta-key. If only one of even or odd parity is
325 specified, then the terminal is using parity, and we cannot. */
327 # define ANYP (EVENP | ODDP)
329 if (((oldtio
.sgttyb
.sg_flags
& ANYP
) == ANYP
) ||
330 ((oldtio
.sgttyb
.sg_flags
& ANYP
) == 0))
332 tiop
->sgttyb
.sg_flags
|= ANYP
;
334 /* Hack on local mode flags if we can. */
335 #if defined (TIOCLGET)
336 # if defined (LPASS8)
337 tiop
->lflag
|= LPASS8
;
339 #endif /* TIOCLGET */
342 #if defined (TIOCGETC)
343 # if defined (USE_XON_XOFF)
344 /* Get rid of terminal output start and stop characters. */
345 tiop
->tchars
.t_stopc
= -1; /* C-s */
346 tiop
->tchars
.t_startc
= -1; /* C-q */
348 /* If there is an XON character, bind it to restart the output. */
349 if (oldtio
.tchars
.t_startc
!= -1)
350 rl_bind_key (oldtio
.tchars
.t_startc
, rl_restart_output
);
351 # endif /* USE_XON_XOFF */
353 /* If there is an EOF char, bind _rl_eof_char to it. */
354 if (oldtio
.tchars
.t_eofc
!= -1)
355 _rl_eof_char
= oldtio
.tchars
.t_eofc
;
357 # if defined (NO_KILL_INTR)
358 /* Get rid of terminal-generated SIGQUIT and SIGINT. */
359 tiop
->tchars
.t_quitc
= -1; /* C-\ */
360 tiop
->tchars
.t_intrc
= -1; /* C-c */
361 # endif /* NO_KILL_INTR */
362 #endif /* TIOCGETC */
364 #if defined (TIOCGLTC)
365 /* Make the interrupt keys go away. Just enough to make people happy. */
366 tiop
->ltchars
.t_dsuspc
= -1; /* C-y */
367 tiop
->ltchars
.t_lnextc
= -1; /* C-v */
368 #endif /* TIOCGLTC */
371 #else /* !defined (NEW_TTY_DRIVER) */
381 #if defined (TERMIOS_TTY_DRIVER)
382 # define TIOTYPE struct termios
383 # define DRAIN_OUTPUT(fd) tcdrain (fd)
384 # define GETATTR(tty, tiop) (tcgetattr (tty, tiop))
386 # define SETATTR(tty, tiop) (tcsetattr (tty, TCSANOW, tiop))
388 # define SETATTR(tty, tiop) (tcsetattr (tty, TCSADRAIN, tiop))
389 # endif /* !M_UNIX */
391 # define TIOTYPE struct termio
392 # define DRAIN_OUTPUT(fd)
393 # define GETATTR(tty, tiop) (ioctl (tty, TCGETA, tiop))
394 # define SETATTR(tty, tiop) (ioctl (tty, TCSETAW, tiop))
395 #endif /* !TERMIOS_TTY_DRIVER */
399 static void save_tty_chars
PARAMS((TIOTYPE
*));
400 static int _get_tty_settings
PARAMS((int, TIOTYPE
*));
401 static int get_tty_settings
PARAMS((int, TIOTYPE
*));
402 static int _set_tty_settings
PARAMS((int, TIOTYPE
*));
403 static int set_tty_settings
PARAMS((int, TIOTYPE
*));
405 static void prepare_terminal_settings
PARAMS((int, TIOTYPE
, TIOTYPE
*));
408 # define OUTPUT_BEING_FLUSHED(tp) (tp->c_lflag & FLUSHO)
410 # define OUTPUT_BEING_FLUSHED(tp) 0
414 save_tty_chars (tiop
)
417 _rl_last_tty_chars
= _rl_tty_chars
;
419 _rl_tty_chars
.t_eof
= tiop
->c_cc
[VEOF
];
420 _rl_tty_chars
.t_eol
= tiop
->c_cc
[VEOL
];
422 _rl_tty_chars
.t_eol2
= tiop
->c_cc
[VEOL2
];
424 _rl_tty_chars
.t_erase
= tiop
->c_cc
[VERASE
];
426 _rl_tty_chars
.t_werase
= tiop
->c_cc
[VWERASE
];
428 _rl_tty_chars
.t_kill
= tiop
->c_cc
[VKILL
];
430 _rl_tty_chars
.t_reprint
= tiop
->c_cc
[VREPRINT
];
432 _rl_tty_chars
.t_intr
= tiop
->c_cc
[VINTR
];
433 _rl_tty_chars
.t_quit
= tiop
->c_cc
[VQUIT
];
435 _rl_tty_chars
.t_susp
= tiop
->c_cc
[VSUSP
];
438 _rl_tty_chars
.t_dsusp
= tiop
->c_cc
[VDSUSP
];
441 _rl_tty_chars
.t_start
= tiop
->c_cc
[VSTART
];
444 _rl_tty_chars
.t_stop
= tiop
->c_cc
[VSTOP
];
447 _rl_tty_chars
.t_lnext
= tiop
->c_cc
[VLNEXT
];
450 _rl_tty_chars
.t_flush
= tiop
->c_cc
[VDISCARD
];
453 _rl_tty_chars
.t_status
= tiop
->c_cc
[VSTATUS
];
457 #if defined (_AIX) || defined (_AIX41)
458 /* Currently this is only used on AIX */
463 fprintf (stderr
, "readline: warning: %s\n", msg
);
472 if ((tp
->c_oflag
& OPOST
) == 0)
474 rltty_warning ("turning on OPOST for terminal\r");
475 tp
->c_oflag
|= OPOST
|ONLCR
;
481 _get_tty_settings (tty
, tiop
)
489 ioctl_ret
= GETATTR (tty
, tiop
);
497 if (OUTPUT_BEING_FLUSHED (tiop
))
499 #if defined (FLUSHO) && defined (_AIX41)
500 rltty_warning ("turning off output flushing");
501 tiop
->c_lflag
&= ~FLUSHO
;
514 get_tty_settings (tty
, tiop
)
518 #if defined (TIOCGWINSZ)
522 if (_get_tty_settings (tty
, tiop
) < 0)
533 _set_tty_settings (tty
, tiop
)
537 while (SETATTR (tty
, tiop
) < 0)
547 set_tty_settings (tty
, tiop
)
551 if (_set_tty_settings (tty
, tiop
) < 0)
556 #if defined (TERMIOS_TTY_DRIVER)
557 # if defined (__ksr1__)
564 tcflow (tty
, TCOON
); /* Simulate a ^Q. */
567 ioctl (tty
, TCXONC
, 1); /* Simulate a ^Q. */
568 #endif /* !TERMIOS_TTY_DRIVER */
576 prepare_terminal_settings (meta_flag
, oldtio
, tiop
)
578 TIOTYPE oldtio
, *tiop
;
580 readline_echoing_p
= (oldtio
.c_lflag
& ECHO
);
582 tiop
->c_lflag
&= ~(ICANON
| ECHO
);
584 if ((unsigned char) oldtio
.c_cc
[VEOF
] != (unsigned char) _POSIX_VDISABLE
)
585 _rl_eof_char
= oldtio
.c_cc
[VEOF
];
587 #if defined (USE_XON_XOFF)
589 tiop
->c_iflag
&= ~(IXON
| IXOFF
| IXANY
);
591 /* `strict' Posix systems do not define IXANY. */
592 tiop
->c_iflag
&= ~(IXON
| IXOFF
);
594 #endif /* USE_XON_XOFF */
596 /* Only turn this off if we are using all 8 bits. */
597 if (((tiop
->c_cflag
& CSIZE
) == CS8
) || meta_flag
)
598 tiop
->c_iflag
&= ~(ISTRIP
| INPCK
);
600 /* Make sure we differentiate between CR and NL on input. */
601 tiop
->c_iflag
&= ~(ICRNL
| INLCR
);
603 #if !defined (HANDLE_SIGNALS)
604 tiop
->c_lflag
&= ~ISIG
;
606 tiop
->c_lflag
|= ISIG
;
609 tiop
->c_cc
[VMIN
] = 1;
610 tiop
->c_cc
[VTIME
] = 0;
613 if (OUTPUT_BEING_FLUSHED (tiop
))
615 tiop
->c_lflag
&= ~FLUSHO
;
616 oldtio
.c_lflag
&= ~FLUSHO
;
620 /* Turn off characters that we need on Posix systems with job control,
621 just to be sure. This includes ^Y and ^V. This should not really
623 #if defined (TERMIOS_TTY_DRIVER) && defined (_POSIX_VDISABLE)
626 tiop
->c_cc
[VLNEXT
] = _POSIX_VDISABLE
;
630 tiop
->c_cc
[VDSUSP
] = _POSIX_VDISABLE
;
633 #endif /* TERMIOS_TTY_DRIVER && _POSIX_VDISABLE */
635 #endif /* NEW_TTY_DRIVER */
637 /* Put the terminal in CBREAK mode so that we can detect key
639 #if defined (NO_TTY_DRIVER)
641 rl_prep_terminal (meta_flag
)
644 readline_echoing_p
= 1;
648 rl_deprep_terminal ()
652 #else /* ! NO_TTY_DRIVER */
653 /* Put the terminal in CBREAK mode so that we can detect key presses. */
655 rl_prep_terminal (meta_flag
)
661 if (terminal_prepped
)
664 /* Try to keep this function from being INTerrupted. */
667 tty
= fileno (rl_instream
);
669 if (get_tty_settings (tty
, &tio
) < 0)
677 save_tty_chars (&otio
);
679 prepare_terminal_settings (meta_flag
, otio
, &tio
);
681 if (set_tty_settings (tty
, &tio
) < 0)
687 if (_rl_enable_keypad
)
688 _rl_control_keypad (1);
690 fflush (rl_outstream
);
691 terminal_prepped
= 1;
692 RL_SETSTATE(RL_STATE_TERMPREPPED
);
697 /* Restore the terminal's normal settings and modes. */
699 rl_deprep_terminal ()
703 if (!terminal_prepped
)
706 /* Try to keep this function from being interrupted. */
709 tty
= fileno (rl_instream
);
711 if (_rl_enable_keypad
)
712 _rl_control_keypad (0);
714 fflush (rl_outstream
);
716 if (set_tty_settings (tty
, &otio
) < 0)
722 terminal_prepped
= 0;
723 RL_UNSETSTATE(RL_STATE_TERMPREPPED
);
727 #endif /* !NO_TTY_DRIVER */
729 /* **************************************************************** */
731 /* Bogus Flow Control */
733 /* **************************************************************** */
736 rl_restart_output (count
, key
)
739 #if defined (__MINGW32__)
741 #else /* !__MING32__ */
743 int fildes
= fileno (rl_outstream
);
744 #if defined (TIOCSTART)
746 ioctl (&fildes
, TIOCSTART
, 0);
748 ioctl (fildes
, TIOCSTART
, 0);
751 #else /* !TIOCSTART */
752 # if defined (TERMIOS_TTY_DRIVER)
753 # if defined (__ksr1__)
757 tcflow (fildes
, TCOON
);
760 tcflow (fildes
, TCOON
); /* Simulate a ^Q. */
762 # else /* !TERMIOS_TTY_DRIVER */
763 # if defined (TCXONC)
764 ioctl (fildes
, TCXONC
, TCOON
);
766 # endif /* !TERMIOS_TTY_DRIVER */
767 #endif /* !TIOCSTART */
770 #endif /* !__MINGW32__ */
774 rl_stop_output (count
, key
)
777 #if defined (__MINGW32__)
781 int fildes
= fileno (rl_instream
);
783 #if defined (TIOCSTOP)
784 # if defined (apollo)
785 ioctl (&fildes
, TIOCSTOP
, 0);
787 ioctl (fildes
, TIOCSTOP
, 0);
789 #else /* !TIOCSTOP */
790 # if defined (TERMIOS_TTY_DRIVER)
791 # if defined (__ksr1__)
794 tcflow (fildes
, TCOOFF
);
796 # if defined (TCXONC)
797 ioctl (fildes
, TCXONC
, TCOON
);
799 # endif /* !TERMIOS_TTY_DRIVER */
800 #endif /* !TIOCSTOP */
803 #endif /* !__MINGW32__ */
806 /* **************************************************************** */
808 /* Default Key Bindings */
810 /* **************************************************************** */
812 /* Set the system's default editing characters to their readline equivalents
813 in KMAP. Should be static, now that we have rl_tty_set_default_bindings. */
815 rltty_set_default_bindings (kmap
)
818 #if !defined (NO_TTY_DRIVER)
820 int tty
= fileno (rl_instream
);
822 #if defined (NEW_TTY_DRIVER)
824 #define SET_SPECIAL(sc, func) \
829 if (ic != -1 && kmap[(unsigned char)ic].type == ISFUNC) \
830 kmap[(unsigned char)ic].function = func; \
834 if (get_tty_settings (tty
, &ttybuff
) == 0)
836 if (ttybuff
.flags
& SGTTY_SET
)
838 SET_SPECIAL (ttybuff
.sgttyb
.sg_erase
, rl_rubout
);
839 SET_SPECIAL (ttybuff
.sgttyb
.sg_kill
, rl_unix_line_discard
);
842 # if defined (TIOCGLTC)
843 if (ttybuff
.flags
& LTCHARS_SET
)
845 SET_SPECIAL (ttybuff
.ltchars
.t_werasc
, rl_unix_word_rubout
);
846 SET_SPECIAL (ttybuff
.ltchars
.t_lnextc
, rl_quoted_insert
);
848 # endif /* TIOCGLTC */
851 #else /* !NEW_TTY_DRIVER */
853 #define SET_SPECIAL(sc, func) \
857 uc = ttybuff.c_cc[sc]; \
858 if (uc != (unsigned char)_POSIX_VDISABLE && kmap[uc].type == ISFUNC) \
859 kmap[uc].function = func; \
863 if (get_tty_settings (tty
, &ttybuff
) == 0)
865 SET_SPECIAL (VERASE
, rl_rubout
);
866 SET_SPECIAL (VKILL
, rl_unix_line_discard
);
868 # if defined (VLNEXT) && defined (TERMIOS_TTY_DRIVER)
869 SET_SPECIAL (VLNEXT
, rl_quoted_insert
);
870 # endif /* VLNEXT && TERMIOS_TTY_DRIVER */
872 # if defined (VWERASE) && defined (TERMIOS_TTY_DRIVER)
873 SET_SPECIAL (VWERASE
, rl_unix_word_rubout
);
874 # endif /* VWERASE && TERMIOS_TTY_DRIVER */
876 #endif /* !NEW_TTY_DRIVER */
880 /* New public way to set the system default editing chars to their readline
883 rl_tty_set_default_bindings (kmap
)
886 rltty_set_default_bindings (kmap
);
889 #if defined (HANDLE_SIGNALS)
891 #if defined (NEW_TTY_DRIVER) || defined (NO_TTY_DRIVER)
893 _rl_disable_tty_signals ()
899 _rl_restore_tty_signals ()
905 static TIOTYPE sigstty
, nosigstty
;
906 static int tty_sigs_disabled
= 0;
909 _rl_disable_tty_signals ()
911 if (tty_sigs_disabled
)
914 if (_get_tty_settings (fileno (rl_instream
), &sigstty
) < 0)
919 nosigstty
.c_lflag
&= ~ISIG
;
920 nosigstty
.c_iflag
&= ~IXON
;
922 if (_set_tty_settings (fileno (rl_instream
), &nosigstty
) < 0)
923 return (_set_tty_settings (fileno (rl_instream
), &sigstty
));
925 tty_sigs_disabled
= 1;
930 _rl_restore_tty_signals ()
934 if (tty_sigs_disabled
== 0)
937 r
= _set_tty_settings (fileno (rl_instream
), &sigstty
);
940 tty_sigs_disabled
= 0;
944 #endif /* !NEW_TTY_DRIVER */
946 #endif /* HANDLE_SIGNALS */