diff options
Diffstat (limited to 'src/nvim/buffer.c')
| -rw-r--r-- | src/nvim/buffer.c | 37 | 
1 files changed, 37 insertions, 0 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index 9d42fbc1b3..3080d4960d 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -5278,6 +5278,43 @@ 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 The 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 Id of the highlight group to use +/// @param lpos_start Cursor position to start the hightlighting at +/// @param lpos_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  | 
