diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-07-05 04:28:14 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-04 13:28:14 -0700 |
commit | 826fe56f5cf30a823dc627b8a710174d04004cef (patch) | |
tree | 51bbea0e951123baac79eafee533a677a7d577e7 /src | |
parent | 1803b0ffd7f08b50a3f59272ebe7290ffd21e90f (diff) | |
download | rneovim-826fe56f5cf30a823dc627b8a710174d04004cef.tar.gz rneovim-826fe56f5cf30a823dc627b8a710174d04004cef.tar.bz2 rneovim-826fe56f5cf30a823dc627b8a710174d04004cef.zip |
fix(mark): mark without a view restores at topline #19224
For a local mark without a view, currently trying to restore its view
will put the cursor at topline, which is not the correct behavior.
Initialize `topline_offset` to `MAXLNUM` instead to fix this.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/mark.c | 2 | ||||
-rw-r--r-- | src/nvim/mark_defs.h | 3 |
2 files changed, 4 insertions, 1 deletions
diff --git a/src/nvim/mark.c b/src/nvim/mark.c index 2402ea3035..0bf5875269 100644 --- a/src/nvim/mark.c +++ b/src/nvim/mark.c @@ -607,6 +607,8 @@ void mark_view_restore(fmark_T *fm) { if (fm != NULL && fm->view.topline_offset >= 0) { linenr_T topline = fm->mark.lnum - fm->view.topline_offset; + // If the mark does not have a view, topline_offset is MAXLNUM, + // and this check can prevent restoring mark view in that case. if (topline >= 1) { set_topline(curwin, topline); } diff --git a/src/nvim/mark_defs.h b/src/nvim/mark_defs.h index 16d85a6e51..a78056c5f9 100644 --- a/src/nvim/mark_defs.h +++ b/src/nvim/mark_defs.h @@ -64,9 +64,10 @@ typedef enum { /// Represents view in which the mark was created typedef struct fmarkv { linenr_T topline_offset; ///< Amount of lines from the mark lnum to the top of the window. + ///< Use MAXLNUM to indicate that the mark does not have a view. } fmarkv_T; -#define INIT_FMARKV { 0 } +#define INIT_FMARKV { MAXLNUM } /// Structure defining single local mark typedef struct filemark { |