diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2017-10-31 01:11:35 +0100 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2017-10-31 01:11:35 +0100 |
commit | 60b1e8ad12376c2aa930e50f119a4a1ca636233d (patch) | |
tree | e120e58150b9a1cd530b61130c86401ee5ca235b /src/nvim/buffer.c | |
parent | 241fe704a52092aad7eff8c1cbf25262bfcf0195 (diff) | |
parent | 4daf63871adc2713ded2a6b8c07fe0ac4b6b3fc1 (diff) | |
download | rneovim-60b1e8ad12376c2aa930e50f119a4a1ca636233d.tar.gz rneovim-60b1e8ad12376c2aa930e50f119a4a1ca636233d.tar.bz2 rneovim-60b1e8ad12376c2aa930e50f119a4a1ca636233d.zip |
Merge #7315 "'inccommand': multiline, other fixes"
closes #5589
closes #5590
closes #5598
closes #5608
Diffstat (limited to 'src/nvim/buffer.c')
-rw-r--r-- | src/nvim/buffer.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index 9d42fbc1b3..f874268910 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -5278,6 +5278,44 @@ int bufhl_add_hl(buf_T *buf, return src_id; } +/// Add highlighting to a buffer, bounded by two cursor positions, +/// with an offset. +/// +/// @param buf Buffer to add highlights to +/// @param src_id src_id to use or 0 to use a new src_id group, +/// or -1 for ungrouped highlight. +/// @param hl_id Highlight group id +/// @param pos_start Cursor position to start the hightlighting at +/// @param pos_end Cursor position to end the highlighting at +/// @param offset Move the whole highlighting this many columns to the right +void bufhl_add_hl_pos_offset(buf_T *buf, + int src_id, + int hl_id, + lpos_T pos_start, + lpos_T pos_end, + colnr_T offset) +{ + colnr_T hl_start = 0; + colnr_T hl_end = 0; + + for (linenr_T lnum = pos_start.lnum; lnum <= pos_end.lnum; lnum ++) { + if (pos_start.lnum < lnum && lnum < pos_end.lnum) { + hl_start = offset; + hl_end = MAXCOL; + } else if (lnum == pos_start.lnum && lnum < pos_end.lnum) { + hl_start = pos_start.col + offset + 1; + hl_end = MAXCOL; + } else if (pos_start.lnum < lnum && lnum == pos_end.lnum) { + hl_start = offset; + hl_end = pos_end.col + offset; + } else if (pos_start.lnum == lnum && pos_end.lnum == lnum) { + hl_start = pos_start.col + offset + 1; + hl_end = pos_end.col + offset; + } + (void)bufhl_add_hl(buf, src_id, hl_id, lnum, hl_start, hl_end); + } +} + /// Clear bufhl highlights from a given source group and range of lines. /// /// @param buf The buffer to remove highlights from |