diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Src/Zle/zle_refresh.c | 19 |
2 files changed, 14 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog index b09759376..57853752c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2009-01-13 Peter Stephenson <pws@csr.com> + * 26393: Src/Zle/zle_refresh.c: turn off text attributes when + deleting text, to avoid them being used for inserted blanks. + * unposted: Completion/Base/Utility/_values, Doc/Zsh/compwid.yo, Src/Zle/compcore.c, Src/Zle/complete.c, Src/Zle/compresult.c: Back off 26270 and follow up; was causing memory corruption. @@ -10901,5 +10904,5 @@ ***************************************************** * This is used by the shell to define $ZSH_PATCHLEVEL -* $Revision: 1.4506 $ +* $Revision: 1.4507 $ ***************************************************** diff --git a/Src/Zle/zle_refresh.c b/Src/Zle/zle_refresh.c index ba6fdaaf1..8fb2dff34 100644 --- a/Src/Zle/zle_refresh.c +++ b/Src/Zle/zle_refresh.c @@ -1973,8 +1973,18 @@ refreshline(int ln) eg. oldline: hifoobar \ hopefully cheaper here to delete two newline: foobar / characters, then we have six matches */ if (tccan(TCDEL)) { + int first = 1; for (i = 1; ol[i].chr; i++) if (tcdelcost(i) < wpfxlen(ol + i, nl)) { + /* + * Some terminals will output the current + * attributes into cells added at the end by + * deletions, so turn off text attributes. + */ + if (first) { + clearattributes(); + first = 0; + } tc_delchars(i); ol += i; char_ins -= i; @@ -1984,15 +1994,6 @@ refreshline(int ln) char_ins--; } #endif - /* - * If the sequence we're deleting ended - * by turning off an attribute, make sure - * it stays turned off. I don't think we - * should need this. - */ - if (ol[-1].atr & TXT_ATTR_OFF_MASK) - settextattributes(ol[-1].atr & - TXT_ATTR_OFF_MASK); i = 0; break; } |