Thread View: gnu.bash.bug
1 messages
1 total messages
Started by Chris Siebenmann
Fri, 11 Aug 1989 00:11
Suggested speedup in readline.c
Author: Chris Siebenmann
Date: Fri, 11 Aug 1989 00:11
Date: Fri, 11 Aug 1989 00:11
116 lines
3755 bytes
3755 bytes
As it stands, readline.c tries to re-read your termcap entry every
time TERM or TERMCAP changes, when it only really needs to do this
right before it starts line editing. Since my .profile plus .bashrc
change them a total of seven times I decided to fix this. The
following context diffs are relative to bash 1.01. They don't QUITE
preserve all the facets of readline.c behavior; in particular,
rl_reset_terminal()'s argument is now ignored (since I didn't feel
like doing yet more malloc()'s to store it away). This doesn't cause
problems in bash, but may in some environments readline is used in.
For free, you also get a patch to avoid a problem with Ultrix 2.2's
termcap routines (they ignore the tty window size fields). If you
don't want this, delete the last context diff before patching.
*** /tmp/,RCSt1017603 Thu Aug 10 17:37:22 1989
--- readline.c Wed Jul 5 17:49:25 1989
***************
*** 469,472 ****
--- 469,475 ----
}
+ /* This flags whether we need to reinitialize terminal stuff. */
+ static int redo_init_term = 1;
+
/* Initliaze readline (and terminal if not already). */
rl_initialize ()
***************
*** 474,477 ****
--- 477,486 ----
extern char *rl_display_prompt;
+ if (redo_init_term)
+ {
+ init_terminal_io ((char *) NULL);
+ redo_init_term = 0;
+ }
+
/* If we have never been called before, initialize the
terminal and data structures. */
***************
*** 520,524 ****
/* Initialize the terminal interface. */
! init_terminal_io ((char *)NULL);
/* Initialize default key bindings. */
--- 529,533 ----
/* Initialize the terminal interface. */
! /* init_terminal_io ((char *)NULL); */
/* Initialize default key bindings. */
***************
*** 1279,1283 ****
char *terminal_name;
{
! init_terminal_io (terminal_name);
}
--- 1288,1293 ----
char *terminal_name;
{
! redo_init_term = 1;
! /* init_terminal_io (terminal_name); */
}
***************
*** 1325,1328 ****
--- 1335,1360 ----
#endif /* HACK_TERMCAP_MOTION */
+ #ifdef TIOCGWINSZ
+ {
+ struct winsize winsize;
+
+ /* Oh HI, oh Brain Dead Ultrix Termcap! */
+ screenwidth = tgetnum ("co");
+ screenheight = tgetnum ("li");
+ if (ioctl(0, TIOCGWINSZ, (char *) &winsize) >= 0)
+ {
+ if (winsize.ws_row > 0)
+ screenheight = winsize.ws_row;
+ if (winsize.ws_col > 0)
+ screenwidth = winsize.ws_col;
+ }
+ if (screenwidth <= 0)
+ screenwidth = 80;
+ screenwidth--; /* PWP: avoid autowrap bugs */
+
+ if (screenheight <= 0)
+ screenheight = 24;
+ }
+ #else
screenwidth = tgetnum ("co");
if (screenwidth <= 0)
***************
*** 1333,1337 ****
if (screenheight <= 0)
screenheight = 24;
!
term_im = tgetstr ("im", &buffer);
term_ei = tgetstr ("ei", &buffer);
--- 1365,1370 ----
if (screenheight <= 0)
screenheight = 24;
! #endif
!
term_im = tgetstr ("im", &buffer);
term_ei = tgetstr ("ei", &buffer);
--
"I shall clasp my hands together and bow to the corners of the world."
Number Ten Ox, "Bridge of Birds"
Chris Siebenmann ...!utgpu!{ncrcan,ontmoh!moore}!ziebmef!cks
cks@white.toronto.edu or ...!utgpu!{,csri!}cks
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads