summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2013-06-11 18:40:13 +0200
committerBram Moolenaar <Bram@vim.org>2013-06-11 18:40:13 +0200
commit9a773488a7113cd028151e71ab6c9cd43bf56972 (patch)
tree9d20f190b083bc9bc99f7b358d552a6808724b9a
parentc09a6d6c0c9d0e9056816f518171864158c72076 (diff)
updated for version 7.3.1164v7.3.1164
Problem: Can't test what is actually displayed on screen. Solution: Add the screenchar() and screenattr() functions.
-rw-r--r--runtime/doc/eval.txt17
-rw-r--r--src/eval.c57
-rw-r--r--src/version.c2
3 files changed, 76 insertions, 0 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index f7cc93b723..09eb22dbd5 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1906,6 +1906,8 @@ repeat( {expr}, {count}) String repeat {expr} {count} times
resolve( {filename}) String get filename a shortcut points to
reverse( {list}) List reverse {list} in-place
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
screenrow() Number current cursor row
search( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
@@ -4890,6 +4892,21 @@ round({expr}) *round()*
< -5.0
{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()*
The result is a Number, which is the current screen column of
the cursor. The leftmost column has number 1.
diff --git a/src/eval.c b/src/eval.c
index 38893c795d..81c3ca278a 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 6be6a6cffe..0122a8092a 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,