Mercurial > vim
diff src/eval.c @ 30755:b7efd41d43b8 v9.0.0712
patch 9.0.0712: wrong column when calling setcursorcharpos() with zero lnum
Commit: https://github.com/vim/vim/commit/79f234499b6692cc16970b7455bc9b002242632f
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Oct 10 12:42:57 2022 +0100
patch 9.0.0712: wrong column when calling setcursorcharpos() with zero lnum
Problem: Wrong column when calling setcursorcharpos() with zero lnum.
Solution: Set the line number before calling buf_charidx_to_byteidx().
(closes #11329)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 10 Oct 2022 13:45:03 +0200 |
parents | d914a3812d5b |
children | 5bc99d85f773 |
line wrap: on
line diff
--- a/src/eval.c +++ b/src/eval.c @@ -6023,10 +6023,12 @@ var2fpos( } /* - * Convert list in "arg" into a position and optional file number. - * When "fnump" is NULL there is no file number, only 3 items. + * Convert list in "arg" into position "psop" and optional file number "fnump". + * When "fnump" is NULL there is no file number, only 3 items: [lnum, col, off] * Note that the column is passed on as-is, the caller may want to decrement * it to use 1 for the first column. + * If "charcol" is TRUE use the column as the character index instead of the + * byte index. * Return FAIL when conversion is not possible, doesn't check the position for * validity. */ @@ -6069,6 +6071,7 @@ list2fpos( if (n < 0) return FAIL; // If character position is specified, then convert to byte position + // If the line number is zero use the cursor line. if (charcol) { buf_T *buf; @@ -6078,7 +6081,8 @@ list2fpos( if (buf == NULL || buf->b_ml.ml_mfp == NULL) return FAIL; - n = buf_charidx_to_byteidx(buf, posp->lnum, n) + 1; + n = buf_charidx_to_byteidx(buf, + posp->lnum == 0 ? curwin->w_cursor.lnum : posp->lnum, n) + 1; } posp->col = n;