mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
updated for version 7.3.713
Problem: printf() can only align to bytes, not characters. Solution: Add the "S" item. (Christian Brabandt)
This commit is contained in:
@@ -4451,6 +4451,7 @@ printf({fmt}, {expr1} ...) *printf()*
|
|||||||
|
|
||||||
Often used items are:
|
Often used items are:
|
||||||
%s string
|
%s string
|
||||||
|
%6S string right-aligned in 6 display cells
|
||||||
%6s string right-aligned in 6 bytes
|
%6s string right-aligned in 6 bytes
|
||||||
%.9s string truncated to 9 bytes
|
%.9s string truncated to 9 bytes
|
||||||
%c single byte
|
%c single byte
|
||||||
@@ -4565,6 +4566,10 @@ printf({fmt}, {expr1} ...) *printf()*
|
|||||||
s The text of the String argument is used. If a
|
s The text of the String argument is used. If a
|
||||||
precision is specified, no more bytes than the number
|
precision is specified, no more bytes than the number
|
||||||
specified are used.
|
specified are used.
|
||||||
|
S The text of the String argument is used. If a
|
||||||
|
precision is specified, no more display cells than the
|
||||||
|
number specified are used. Without the |+multi_byte|
|
||||||
|
feature works just like 's'.
|
||||||
|
|
||||||
*printf-f* *E807*
|
*printf-f* *E807*
|
||||||
f The Float argument is converted into a string of the
|
f The Float argument is converted into a string of the
|
||||||
|
@@ -4290,6 +4290,7 @@ vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
|
|||||||
case '%':
|
case '%':
|
||||||
case 'c':
|
case 'c':
|
||||||
case 's':
|
case 's':
|
||||||
|
case 'S':
|
||||||
length_modifier = '\0';
|
length_modifier = '\0';
|
||||||
str_arg_l = 1;
|
str_arg_l = 1;
|
||||||
switch (fmt_spec)
|
switch (fmt_spec)
|
||||||
@@ -4318,6 +4319,7 @@ vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
|
case 'S':
|
||||||
str_arg =
|
str_arg =
|
||||||
#ifndef HAVE_STDARG_H
|
#ifndef HAVE_STDARG_H
|
||||||
(char *)get_a_arg(arg_idx);
|
(char *)get_a_arg(arg_idx);
|
||||||
@@ -4354,6 +4356,24 @@ vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
|
|||||||
str_arg_l = (q == NULL) ? precision
|
str_arg_l = (q == NULL) ? precision
|
||||||
: (size_t)(q - str_arg);
|
: (size_t)(q - str_arg);
|
||||||
}
|
}
|
||||||
|
#ifdef FEAT_MBYTE
|
||||||
|
if (fmt_spec == 'S')
|
||||||
|
{
|
||||||
|
if (min_field_width != 0)
|
||||||
|
min_field_width += STRLEN(str_arg)
|
||||||
|
- mb_string2cells((char_u *)str_arg, -1);
|
||||||
|
if (precision)
|
||||||
|
{
|
||||||
|
char_u *p1 = (char_u *)str_arg;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < precision && *p1; i++)
|
||||||
|
p1 += mb_ptr2len(p1);
|
||||||
|
|
||||||
|
str_arg_l = precision = p1 - (char_u *)str_arg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@@ -725,6 +725,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
713,
|
||||||
/**/
|
/**/
|
||||||
712,
|
712,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user