diff options
author | Bram Moolenaar <Bram@vim.org> | 2013-06-11 18:40:13 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2013-06-11 18:40:13 +0200 |
commit | 9a773488a7113cd028151e71ab6c9cd43bf56972 (patch) | |
tree | 9d20f190b083bc9bc99f7b358d552a6808724b9a /src | |
parent | c09a6d6c0c9d0e9056816f518171864158c72076 (diff) | |
download | vim-9a773488a7113cd028151e71ab6c9cd43bf56972.zip |
updated for version 7.3.1164
Problem: Can't test what is actually displayed on screen.
Solution: Add the screenchar() and screenattr() functions.
Diffstat (limited to 'src')
-rw-r--r-- | src/eval.c | 57 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 59 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c index 38893c795..81c3ca278 100644 --- a/src/eval.c +++ b/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}, @@ -15804,6 +15808,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 * * First column is 1 to be consistent with virtcol(). diff --git a/src/version.c b/src/version.c index 6be6a6cff..0122a8092 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1164, +/**/ 1163, /**/ 1162, |