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:
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
|
||||
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
|
||||
*
|
||||
|
Reference in New Issue
Block a user