To:
[email protected]
Subject: Patch 6.3a.014
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.3a.014
Problem: Using multi-byte text and highlighting in a statusline causes gaps
to appear. (Helmut Stiegler)
Solution: Advance the column by text width instead of number of bytes. Add
the vim_strnsize() function.
Files: src/charset.c, src/proto/charset.pro, src/screen.c
*** ../vim-6.3a.013/src/charset.c Fri May 7 10:59:38 2004
--- src/charset.c Wed May 12 16:54:57 2004
***************
*** 711,738 ****
}
/*
! * Return the number of characters string 's' will take on the screen,
* counting TABs as two characters: "^I".
*/
int
vim_strsize(s)
char_u *s;
{
! int len = 0;
! while (*s != NUL)
{
#ifdef FEAT_MBYTE
if (has_mbyte)
{
! len += ptr2cells(s);
! s += (*mb_ptr2len_check)(s);
}
else
#endif
! len += byte2cells(*s++);
}
! return len;
}
/*
--- 711,753 ----
}
/*
! * Return the number of characters string "s" will take on the screen,
* counting TABs as two characters: "^I".
*/
int
vim_strsize(s)
char_u *s;
{
! return vim_strnsize(s, (int)MAXCOL);
! }
! /*
! * Return the number of characters string "s[len]" will take on the screen,
! * counting TABs as two characters: "^I".
! */
! int
! vim_strnsize(s, len)
! char_u *s;
! int len;
! {
! int size = 0;
!
! while (*s != NUL && --len >= 0)
{
#ifdef FEAT_MBYTE
if (has_mbyte)
{
! int l = (*mb_ptr2len_check)(s);
!
! size += ptr2cells(s);
! s += l;
! len -= l - 1;
}
else
#endif
! size += byte2cells(*s++);
}
! return size;
}
/*
*** ../vim-6.3a.013/src/proto/charset.pro Fri May 7 10:59:36 2004
--- src/proto/charset.pro Wed May 12 17:26:46 2004
***************
*** 12,17 ****
--- 12,18 ----
int char2cells __ARGS((int c));
int ptr2cells __ARGS((char_u *p));
int vim_strsize __ARGS((char_u *s));
+ int vim_strnsize __ARGS((char_u *s, int len));
int chartabsize __ARGS((char_u *p, colnr_T col));
int linetabsize __ARGS((char_u *s));
int win_linetabsize __ARGS((win_T *wp, char_u *p, colnr_T len));
*** ../vim-6.3a.013/src/screen.c Fri May 7 10:59:38 2004
--- src/screen.c Wed May 12 16:36:12 2004
***************
*** 5341,5347 ****
{
len = (int)(hl[n].start - p);
screen_puts_len(p, len, row, col, curattr);
! col += len;
p = hl[n].start;
if (hl[n].userhl == 0)
--- 5341,5347 ----
{
len = (int)(hl[n].start - p);
screen_puts_len(p, len, row, col, curattr);
! col += vim_strnsize(p, len);
p = hl[n].start;
if (hl[n].userhl == 0)
*** ../vim-6.3a.013/src/version.c Wed May 12 17:24:27 2004
--- src/version.c Wed May 12 17:25:45 2004
***************
*** 643,644 ****
--- 643,646 ----
{ /* Add new patch number below this line */
+ /**/
+ 14,
/**/
--
hundred-and-one symptoms of being an internet addict:
10E. You start counting in hex.
/// Bram Moolenaar --
[email protected] --
http://www.Moolenaar.net \\\
/// Sponsor Vim, vote for features --
http://www.Vim.org/sponsor/ \\\
\\\ Project leader for A-A-P --
http://www.A-A-P.org ///
\\\ Buy at Amazon and help AIDS victims --
http://ICCF.nl/click1.html ///