diff options
author | Wayne Davison <wayned@users.sourceforge.net> | 2005-07-15 17:41:53 +0000 |
---|---|---|
committer | Wayne Davison <wayned@users.sourceforge.net> | 2005-07-15 17:41:53 +0000 |
commit | b1e0d218c5e82e25d0cd6743cb0172ae32f5d295 (patch) | |
tree | 733799f090c047161cfdd0f47de0705991a16177 | |
parent | 85784fbfee47d16e3cb3ebc2ac37bbf1e046b626 (diff) | |
download | zsh-b1e0d218c5e82e25d0cd6743cb0172ae32f5d295.tar.gz zsh-b1e0d218c5e82e25d0cd6743cb0172ae32f5d295.tar.xz zsh-b1e0d218c5e82e25d0cd6743cb0172ae32f5d295.zip |
Reference 4 extra termcap items: save-cursor, restore-cursor, the
backspace character, and the ignore-newline-after-wrap flag.
-rw-r--r-- | Src/init.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/Src/init.c b/Src/init.c index 2dc1f8110..6ec0370a3 100644 --- a/Src/init.c +++ b/Src/init.c @@ -77,7 +77,7 @@ mod_export int tclen[TC_COUNT]; /**/ int tclines, tccolumns; /**/ -mod_export int hasam; +mod_export int hasam, hasxn; /* Pointer to read-key function from zle */ @@ -518,7 +518,7 @@ static char *tccapnams[TC_COUNT] = { "cl", "le", "LE", "nd", "RI", "up", "UP", "do", "DO", "dc", "DC", "ic", "IC", "cd", "ce", "al", "dl", "ta", "md", "so", "us", "me", "se", "ue", "ch", - "ku", "kd", "kl", "kr" + "ku", "kd", "kl", "kr", "sc", "rc", "bc" }; /* Initialise termcap */ @@ -573,6 +573,7 @@ init_term(void) /* check whether terminal has automargin (wraparound) capability */ hasam = tgetflag("am"); + hasxn = tgetflag("xn"); /* also check for newline wraparound glitch */ tclines = tgetnum("li"); tccolumns = tgetnum("co"); @@ -587,10 +588,22 @@ init_term(void) termflags |= TERM_NOUP; } - /* if there's no termcap entry for cursor left, use \b. */ + /* most termcaps don't define "bc" because they use \b. */ + if (!tccan(TCBACKSPACE)) { + tcstr[TCBACKSPACE] = ztrdup("\b"); + tclen[TCBACKSPACE] = 1; + } + + /* if there's no termcap entry for cursor left, use backspace. */ if (!tccan(TCLEFT)) { - tcstr[TCLEFT] = ztrdup("\b"); - tclen[TCLEFT] = 1; + tcstr[TCLEFT] = tcstr[TCBACKSPACE]; + tclen[TCLEFT] = tclen[TCBACKSPACE]; + } + + if (tccan(TCSAVECURSOR) && !tccan(TCRESTRCURSOR)) { + tclen[TCSAVECURSOR] = 0; + zsfree(tcstr[TCSAVECURSOR]); + tcstr[TCSAVECURSOR] = NULL; } /* if the termcap entry for down is \n, don't use it. */ |