0
0
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:
Bram Moolenaar
2013-06-11 18:40:13 +02:00
parent c09a6d6c0c
commit 9a773488a7
3 changed files with 76 additions and 0 deletions

View File

@@ -654,6 +654,8 @@ static void f_reverse __ARGS((typval_T *argvars, typval_T *rettv));
#ifdef FEAT_FLOAT
static void f_round __ARGS((typval_T *argvars, typval_T *rettv));
#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_screenrow __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
{"round", 1, 1, f_round},
#endif
{"screenattr", 2, 2, f_screenattr},
{"screenchar", 2, 2, f_screenchar},
{"screencol", 0, 0, f_screencol},
{"screenrow", 0, 0, f_screenrow},
{"search", 1, 4, f_search},
@@ -15803,6 +15807,59 @@ f_round(argvars, rettv)
}
#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
*