diff options
Diffstat (limited to 'readline/terminal.c')
-rw-r--r-- | readline/terminal.c | 64 |
1 files changed, 43 insertions, 21 deletions
diff --git a/readline/terminal.c b/readline/terminal.c index 8094186..495b87a 100644 --- a/readline/terminal.c +++ b/readline/terminal.c @@ -51,15 +51,14 @@ /* System-specific feature definitions and include files. */ #include "rldefs.h" -#if defined (GWINSZ_IN_SYS_IOCTL) && !defined (TIOCGWINSZ) -# include <sys/ioctl.h> -#endif /* GWINSZ_IN_SYS_IOCTL && !TIOCGWINSZ */ - #ifdef __MSDOS__ -# include <pc.h> +# include <pc.h> #endif #include "rltty.h" +#if defined (HAVE_SYS_IOCTL_H) +# include <sys/ioctl.h> /* include for declaration of ioctl */ +#endif #include "tcap.h" /* Some standard library routines. */ @@ -81,14 +80,15 @@ static void _win_get_screensize PARAMS((int *, int *)); static void _emx_get_screensize PARAMS((int *, int *)); #endif -#define CUSTOM_REDISPLAY_FUNC() (rl_redisplay_function != rl_redisplay) -#define CUSTOM_INPUT_FUNC() (rl_getc_function != rl_getc) - -/* If the calling application sets this to a non-zero value, readline will - use the $LINES and $COLUMNS environment variables to set its idea of the - window size before interrogating the kernel. */ +/* If the calling application sets this to a non-zero value, readline will + use the $LINES and $COLUMNS environment variables to set its idea of the + window size before interrogating the kernel. */ int rl_prefer_env_winsize = 0; +/* If this is non-zero, readline will set LINES and COLUMNS in the + environment when it handles SIGWINCH. */ +int rl_change_environment = 1; + /* **************************************************************** */ /* */ /* Terminal and Termcap */ @@ -98,7 +98,7 @@ int rl_prefer_env_winsize = 0; #ifndef __MSDOS__ static char *term_buffer = (char *)NULL; static char *term_string_buffer = (char *)NULL; -#endif /* !__MSDOS__ */ +#endif static int tcap_initialized; @@ -308,7 +308,8 @@ _rl_get_screen_size (tty, ignore_env) /* If we're being compiled as part of bash, set the environment variables $LINES and $COLUMNS to new values. Otherwise, just do a pair of putenv () or setenv () calls. */ - sh_set_lines_and_columns (_rl_screenheight, _rl_screenwidth); + if (rl_change_environment) + sh_set_lines_and_columns (_rl_screenheight, _rl_screenwidth); if (_rl_term_autowrap == 0) _rl_screenwidth--; @@ -358,7 +359,13 @@ rl_reset_screen_size () { _rl_get_screen_size (fileno (rl_instream), 0); } - + +void +_rl_sigwinch_resize_terminal () +{ + _rl_get_screen_size (fileno (rl_instream), 1); +} + void rl_resize_terminal () { @@ -560,7 +567,6 @@ _rl_init_terminal_io (terminal_name) term_has_meta = tgetflag ("km") != 0; if (term_has_meta == 0) _rl_term_mm = _rl_term_mo = (char *)NULL; - #endif /* !__MSDOS__ */ /* Attempt to find and bind the arrow keys. Do not override already @@ -694,17 +700,16 @@ rl_ding () default: break; case VISIBLE_BELL: -#ifdef __MSDOS__ - ScreenVisualBell (); - break; -#else if (_rl_visible_bell) { +#ifdef __DJGPP__ + ScreenVisualBell (); +#else tputs (_rl_visible_bell, 1, _rl_output_character_function); +#endif break; } /* FALLTHROUGH */ -#endif case AUDIBLE_BELL: fprintf (stderr, "\007"); fflush (stderr); @@ -721,12 +726,29 @@ rl_ding () /* */ /* **************************************************************** */ +static int enabled_meta = 0; /* flag indicating we enabled meta mode */ + void _rl_enable_meta_key () { #if !defined (__DJGPP__) if (term_has_meta && _rl_term_mm) - tputs (_rl_term_mm, 1, _rl_output_character_function); + { + tputs (_rl_term_mm, 1, _rl_output_character_function); + enabled_meta = 1; + } +#endif +} + +void +_rl_disable_meta_key () +{ +#if !defined (__DJGPP__) + if (term_has_meta && _rl_term_mo && enabled_meta) + { + tputs (_rl_term_mo, 1, _rl_output_character_function); + enabled_meta = 0; + } #endif } |