To:
[email protected]
Subject: Patch 6.1b.012
Fcc: outbox
From: Bram Moolenaar <
[email protected]>
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 6.1b.012
Problem: Multi-byte: When 'showbreak' is set and a double-wide character
doesn't fit at the right window edge the cursor gets stuck there.
Using cursor-left gets stuck when 'virtualedit' is set. (Eric
Long)
Solution: Fix the way the extra ">" character is counted when 'showbreak' is
set. Don't correct cursor for virtual editing on a double-wide
character.
Files: src/charset.c, src/edit.c
*** ../vim61b.011/src/charset.c Fri Feb 22 16:53:26 2002
--- src/charset.c Thu Mar 14 20:35:56 2002
***************
*** 928,933 ****
--- 928,938 ----
colnr_T col2;
colnr_T colmax;
int added;
+ # ifdef FEAT_MBYTE
+ int mb_added = 0;
+ # else
+ # define mb_added 0
+ # endif
int numberextra;
char_u *ps;
int tab_corr = (*s == TAB);
***************
*** 1002,1007 ****
--- 1007,1020 ----
}
}
}
+ # ifdef FEAT_MBYTE
+ else if (has_mbyte && size == 2 && MB_BYTE2LEN(*s) > 1
+ && wp->w_p_wrap && in_win_border(wp, col))
+ {
+ ++size; /* Count the ">" in the last column. */
+ mb_added = 1;
+ }
+ # endif
/*
* May have to add something for 'showbreak' string at start of line
***************
*** 1011,1017 ****
if (*p_sbr != NUL && wp->w_p_wrap && col != 0)
{
numberextra = win_col_off(wp);
! col += numberextra;
if (col >= (colnr_T)W_WIDTH(wp))
{
col -= W_WIDTH(wp);
--- 1024,1030 ----
if (*p_sbr != NUL && wp->w_p_wrap && col != 0)
{
numberextra = win_col_off(wp);
! col += numberextra + mb_added;
if (col >= (colnr_T)W_WIDTH(wp))
{
col -= W_WIDTH(wp);
***************
*** 1031,1037 ****
}
}
if (headp != NULL)
! *headp = added;
return size;
#endif
}
--- 1044,1050 ----
}
}
if (headp != NULL)
! *headp = added + mb_added;
return size;
#endif
}
*** ../vim61b.011/src/edit.c Sat Mar 9 16:20:03 2002
--- src/edit.c Wed Mar 13 21:12:03 2002
***************
*** 4485,4491 ****
if (virtual_active())
{
int width;
- char_u *ptr;
int v = getviscol();
if (v == 0)
--- 4485,4490 ----
***************
*** 4497,4514 ****
for (;;)
{
coladvance(v - width);
! if (*p_sbr == NUL || getviscol() < v)
break;
++width;
}
# else
coladvance(v - 1);
- # endif
! /* Adjust for multi-wide char (not include TAB) */
! ptr = ml_get_cursor();
! if (*ptr != TAB && *ptr != NUL && (width = ptr2cells(ptr)) > 1)
! coladvance(v - width);
curwin->w_set_curswant = TRUE;
return OK;
--- 4496,4523 ----
for (;;)
{
coladvance(v - width);
! /* getviscol() is slow, skip it when 'showbreak' is empty and
! * there are no multi-byte characters */
! if ((*p_sbr == NUL
! # ifdef FEAT_MBYTE
! && !has_mbyte
! # endif
! ) || getviscol() < v)
break;
++width;
}
# else
coladvance(v - 1);
! {
! char_u *ptr;
!
! /* Adjust for multi-wide char (not a TAB) */
! ptr = ml_get_cursor();
! if (*ptr != TAB && *ptr != NUL && (width = ptr2cells(ptr)) > 1)
! coladvance(v - width);
! }
! # endif
curwin->w_set_curswant = TRUE;
return OK;
*** ../vim61b.011/src/version.c Fri Mar 15 21:40:01 2002
--- src/version.c Fri Mar 15 21:44:11 2002
***************
*** 608,609 ****
--- 608,611 ----
{ /* Add new patch number below this line */
+ /**/
+ 12,
/**/
--
Q: How does a UNIX Guru pick up a girl?
A: look; grep; which; eval; nice; uname; talk; date;
/// Bram Moolenaar --
[email protected] --
http://www.moolenaar.net \\\
/// Creator of Vim --
http://vim.sf.net --
ftp://ftp.vim.org/pub/vim \\\
\\\ Project leader for A-A-P --
http://www.a-a-p.org ///
\\\ Help me helping AIDS orphans in Uganda -
http://iccf-holland.org ///