mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
updated for version 7.3.1164
Problem: Can't test what is actually displayed on screen. Solution: Add the screenchar() and screenattr() functions.
This commit is contained in:
@@ -1906,6 +1906,8 @@ repeat( {expr}, {count}) String repeat {expr} {count} times
|
|||||||
resolve( {filename}) String get filename a shortcut points to
|
resolve( {filename}) String get filename a shortcut points to
|
||||||
reverse( {list}) List reverse {list} in-place
|
reverse( {list}) List reverse {list} in-place
|
||||||
round( {expr}) Float round off {expr}
|
round( {expr}) Float round off {expr}
|
||||||
|
screenattr( {row}, {col}) Number attribute at screen position
|
||||||
|
screenchar( {row}, {col}) Number character at screen position
|
||||||
screencol() Number current cursor column
|
screencol() Number current cursor column
|
||||||
screenrow() Number current cursor row
|
screenrow() Number current cursor row
|
||||||
search( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
|
search( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
|
||||||
@@ -4890,6 +4892,21 @@ round({expr}) *round()*
|
|||||||
< -5.0
|
< -5.0
|
||||||
{only available when compiled with the |+float| feature}
|
{only available when compiled with the |+float| feature}
|
||||||
|
|
||||||
|
screenattr(row, col) *screenattr()*
|
||||||
|
Like screenchar(), but return the attribute. This is a rather
|
||||||
|
arbitrary number that can only be used to compare to the
|
||||||
|
attribute at other positions.
|
||||||
|
|
||||||
|
screenchar(row, col) *screenchar()*
|
||||||
|
The result is a Number, which is the character at position
|
||||||
|
[row, col] on the screen. This works for every possible
|
||||||
|
screen position, also status lines, window separators and the
|
||||||
|
command line. The top left position is row one, column one
|
||||||
|
The character excludes composing characters. For double-byte
|
||||||
|
encodings it may only be the first byte.
|
||||||
|
This is mainly to be used for testing.
|
||||||
|
Returns -1 when row or col is out of range.
|
||||||
|
|
||||||
screencol() *screencol()*
|
screencol() *screencol()*
|
||||||
The result is a Number, which is the current screen column of
|
The result is a Number, which is the current screen column of
|
||||||
the cursor. The leftmost column has number 1.
|
the cursor. The leftmost column has number 1.
|
||||||
|
57
src/eval.c
57
src/eval.c
@@ -654,6 +654,8 @@ static void f_reverse __ARGS((typval_T *argvars, typval_T *rettv));
|
|||||||
#ifdef FEAT_FLOAT
|
#ifdef FEAT_FLOAT
|
||||||
static void f_round __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_round __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
#endif
|
#endif
|
||||||
|
static void f_screenattr __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
|
static void f_screenchar __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
static void f_screencol __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_screencol __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
static void f_screenrow __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_screenrow __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
static void f_search __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_search __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
@@ -8037,6 +8039,8 @@ static struct fst
|
|||||||
#ifdef FEAT_FLOAT
|
#ifdef FEAT_FLOAT
|
||||||
{"round", 1, 1, f_round},
|
{"round", 1, 1, f_round},
|
||||||
#endif
|
#endif
|
||||||
|
{"screenattr", 2, 2, f_screenattr},
|
||||||
|
{"screenchar", 2, 2, f_screenchar},
|
||||||
{"screencol", 0, 0, f_screencol},
|
{"screencol", 0, 0, f_screencol},
|
||||||
{"screenrow", 0, 0, f_screenrow},
|
{"screenrow", 0, 0, f_screenrow},
|
||||||
{"search", 1, 4, f_search},
|
{"search", 1, 4, f_search},
|
||||||
@@ -15803,6 +15807,59 @@ f_round(argvars, rettv)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* "screenattr()" function
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
f_screenattr(argvars, rettv)
|
||||||
|
typval_T *argvars UNUSED;
|
||||||
|
typval_T *rettv;
|
||||||
|
{
|
||||||
|
int row;
|
||||||
|
int col;
|
||||||
|
int c;
|
||||||
|
|
||||||
|
row = get_tv_number_chk(&argvars[0], NULL) - 1;
|
||||||
|
col = get_tv_number_chk(&argvars[1], NULL) - 1;
|
||||||
|
if (row < 0 || row >= screen_Rows
|
||||||
|
|| col < 0 || col >= screen_Columns)
|
||||||
|
c = -1;
|
||||||
|
else
|
||||||
|
c = ScreenAttrs[LineOffset[row] + col];
|
||||||
|
rettv->vval.v_number = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* "screenchar()" function
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
f_screenchar(argvars, rettv)
|
||||||
|
typval_T *argvars UNUSED;
|
||||||
|
typval_T *rettv;
|
||||||
|
{
|
||||||
|
int row;
|
||||||
|
int col;
|
||||||
|
int off;
|
||||||
|
int c;
|
||||||
|
|
||||||
|
row = get_tv_number_chk(&argvars[0], NULL) - 1;
|
||||||
|
col = get_tv_number_chk(&argvars[1], NULL) - 1;
|
||||||
|
if (row < 0 || row >= screen_Rows
|
||||||
|
|| col < 0 || col >= screen_Columns)
|
||||||
|
c = -1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
off = LineOffset[row] + col;
|
||||||
|
#ifdef FEAT_MBYTE
|
||||||
|
if (enc_utf8 && ScreenLinesUC[off] != 0)
|
||||||
|
c = ScreenLinesUC[off];
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
c = ScreenLines[off];
|
||||||
|
}
|
||||||
|
rettv->vval.v_number = c;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "screencol()" function
|
* "screencol()" function
|
||||||
*
|
*
|
||||||
|
@@ -728,6 +728,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 */
|
||||||
|
/**/
|
||||||
|
1164,
|
||||||
/**/
|
/**/
|
||||||
1163,
|
1163,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user