patch 8.2.5034: there is no way to get the byte index from a virtual column

Problem:    There is no way to get the byte index from a virtual column.
Solution:   Add virtcol2col(). (Yegappan Lakshmanan, closes #10477,
            closes #10098)
This commit is contained in:
Bram Moolenaar
2022-05-27 21:58:00 +01:00
parent 968443efb5
commit 5a6ec10cc8
7 changed files with 89 additions and 0 deletions
+28
View File
@@ -691,6 +691,8 @@ uniq({list} [, {func} [, {dict}]])
values({dict}) List values in {dict}
virtcol({expr} [, {list}]) Number or List
screen column of cursor or mark
virtcol2col({winid}, {lnum}, {col})
Number byte index of a character on screen
visualmode([expr]) String last visual mode used
wildmenumode() Number whether 'wildmenu' mode is active
win_execute({id}, {command} [, {silent}])
@@ -6211,11 +6213,17 @@ nr2char({expr} [, {utf8}]) *nr2char()*
or({expr}, {expr}) *or()*
Bitwise OR on the two arguments. The arguments are converted
to a number. A List, Dict or Float argument causes an error.
Also see `and()` and `xor()`.
Example: >
:let bits = or(bits, 0x80)
< Can also be used as a |method|: >
:let bits = bits->or(0x80)
< Rationale: The reason this is a function and not using the "|"
character like many languages, is that Vi has always used "|"
to separate commands. In many places it would not be clear if
"|" is an operator or a command separator.
pathshorten({path} [, {len}]) *pathshorten()*
Shorten directory names in the path {path} and return the
@@ -9788,6 +9796,25 @@ virtcol({expr} [, {list}]) *virtcol()*
< Can also be used as a |method|: >
GetPos()->virtcol()
virtcol2col({winid}, {lnum}, {col}) *virtcol2col()*
The result is a Number, which is the byte index of the
character in window {winid} at buffer line {lnum} and virtual
column {col}.
If {col} is greater than the last virtual column in line
{lnum}, then the byte index of the character at the last
virtual column is returned.
The {winid} argument can be the window number or the
|window-ID|. If this is zero, then the current window is used.
Returns -1 if the window {winid} doesn't exist or the buffer
line {lnum} or virtual column {col} is invalid.
See also |screenpos()|, |virtcol()| and |col()|.
Can also be used as a |method|: >
GetWinid()->virtcol2col(lnum, col)
visualmode([{expr}]) *visualmode()*
The result is a String, which describes the last Visual mode
@@ -10220,6 +10247,7 @@ writefile({object}, {fname} [, {flags}])
xor({expr}, {expr}) *xor()*
Bitwise XOR on the two arguments. The arguments are converted
to a number. A List, Dict or Float argument causes an error.
Also see `and()` and `or()`.
Example: >
:let bits = xor(bits, 0x80)
<
+1
View File
@@ -835,6 +835,7 @@ Cursor and mark position: *cursor-functions* *mark-functions*
screencol() get screen column of the cursor
screenrow() get screen row of the cursor
screenpos() screen row and col of a text character
virtcol2col() byte index of a text character on screen
getcurpos() get position of the cursor
getpos() get position of cursor, mark, etc.
setpos() set position of cursor, mark, etc.