* Visual 'U' followed by 'u' lead to garbage on the screen when multibyte

characters were present on the changed line.
This commit is contained in:
Gunnar Ritter 2005-01-10 23:32:28 +00:00
parent 335f1e9f08
commit 91464fa6fb
4 changed files with 14 additions and 9 deletions

View File

@ -6,6 +6,8 @@ Release ...
screen representation was sometimes not updated accordingly. screen representation was sometimes not updated accordingly.
* Undoing the replacement of a multicolumn character by a singlecolumn * Undoing the replacement of a multicolumn character by a singlecolumn
character twice made the singlecolumn character invisible. character twice made the singlecolumn character invisible.
* Visual 'U' followed by 'u' lead to garbage on the screen when multibyte
characters were present on the changed line.
* The '\u', '\l', '\U', and '\L' substitution sequences work with multibyte * The '\u', '\l', '\U', and '\L' substitution sequences work with multibyte
characters now. characters now.
* Handle character case conversions with the '~' vi command correctly if the * Handle character case conversions with the '~' vi command correctly if the

View File

@ -70,12 +70,12 @@
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* Sccsid @(#)ex_version.c 1.111 (gritter) 1/10/05 * Sccsid @(#)ex_version.c 1.112 (gritter) 1/11/05
*/ */
#include "ex.h" #include "ex.h"
static char *versionstring = "@(#)Version 4.0 (gritter) 1/10/05"; static char *versionstring = "@(#)Version 4.0 (gritter) 1/11/05";
void void
printver(void) printver(void)

View File

@ -73,7 +73,7 @@
#ifndef lint #ifndef lint
#ifdef DOSCCS #ifdef DOSCCS
static char sccsid[] = "@(#)ex_vops.c 1.24 (gritter) 1/10/05"; static char sccsid[] = "@(#)ex_vops.c 1.25 (gritter) 1/11/05";
#endif #endif
#endif #endif
@ -225,8 +225,12 @@ vundo (
OO = Outchar; Outchar = vinschar; hold |= HOLDQIK; OO = Outchar; Outchar = vinschar; hold |= HOLDQIK;
vprepins(); vprepins();
temp[vUA2 - linebuf] = 0; temp[vUA2 - linebuf] = 0;
for (cp = &temp[vUA1 - linebuf]; *cp;) for (cp = &temp[vUA1 - linebuf]; *cp;) {
putchar(*cp++); int c, n;
nextc(c, cp, n);
cp += n;
putchar(c);
}
Outchar = OO; hold = oldhold; Outchar = OO; hold = oldhold;
endim(); endim();
physdc(cindent(), cindent() + doomed); physdc(cindent(), cindent() + doomed);

View File

@ -73,7 +73,7 @@
#ifndef lint #ifndef lint
#ifdef DOSCCS #ifdef DOSCCS
static char sccsid[] = "@(#)ex_vput.c 1.38 (gritter) 1/10/05"; static char sccsid[] = "@(#)ex_vput.c 1.39 (gritter) 1/11/05";
#endif #endif
#endif #endif
@ -691,11 +691,10 @@ vinschar(int c)
int (*OO)() = Outchar; int (*OO)() = Outchar;
endim(); endim();
if (inscol + insmc0 != linend) if (inscol + insmc0 != linend)
doomed -= inssiz + insmc0; doomed -= inssiz + insmc1;
if (insmc1 == 0 && c != '\t' && if (insmc1 == 0 && c != '\t' &&
vtube0[inscol+insmc0] & MULTICOL) vtube0[inscol+insmc0] & MULTICOL)
cellcpy(&vtube0[inscol+insmc0], vtube0[inscol+insmc0] = INVBIT;
&vtube0[inscol+insmc0+1]);
/* /*
* This indicates to vputchar() that it has to set MULTICOL * This indicates to vputchar() that it has to set MULTICOL
* bits but must not call us recursively. * bits but must not call us recursively.