diff options
author | Famiu Haque <famiuhaque@protonmail.com> | 2022-04-11 22:20:24 +0600 |
---|---|---|
committer | Famiu Haque <famiuhaque@protonmail.com> | 2022-04-17 19:24:59 +0600 |
commit | b16afe4d556af7c3e86b311cfffd1c68a5eed71f (patch) | |
tree | 7a7ad533686d93535238adad0c931259a51aa6cc /src | |
parent | 3f2e9298bdd971a4d2baa298aff7c6f2c2c1ad1a (diff) | |
download | rneovim-b16afe4d556af7c3e86b311cfffd1c68a5eed71f.tar.gz rneovim-b16afe4d556af7c3e86b311cfffd1c68a5eed71f.tar.bz2 rneovim-b16afe4d556af7c3e86b311cfffd1c68a5eed71f.zip |
feat(highlight): implement CurSearch highlight
Adds a `CurSearch` highlight group to highlight the current search result under the cursor.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/highlight_defs.h | 2 | ||||
-rw-r--r-- | src/nvim/highlight_group.c | 2 | ||||
-rw-r--r-- | src/nvim/match.c | 12 | ||||
-rw-r--r-- | src/nvim/move.c | 16 |
4 files changed, 24 insertions, 8 deletions
diff --git a/src/nvim/highlight_defs.h b/src/nvim/highlight_defs.h index e0ee649013..0515842b61 100644 --- a/src/nvim/highlight_defs.h +++ b/src/nvim/highlight_defs.h @@ -63,6 +63,7 @@ typedef enum { HLF_E, // error messages HLF_I, // incremental search HLF_L, // last search string + HLF_LC, // current search match HLF_M, // "--More--" message HLF_CM, // Mode (e.g., "-- INSERT --") HLF_N, // line number for ":number" and ":#" commands @@ -123,6 +124,7 @@ EXTERN const char *hlf_names[] INIT(= { [HLF_E] = "ErrorMsg", [HLF_I] = "IncSearch", [HLF_L] = "Search", + [HLF_LC] = "CurSearch", [HLF_M] = "MoreMsg", [HLF_CM] = "ModeMsg", [HLF_N] = "LineNr", diff --git a/src/nvim/highlight_group.c b/src/nvim/highlight_group.c index 3092aaefab..a9ced84280 100644 --- a/src/nvim/highlight_group.c +++ b/src/nvim/highlight_group.c @@ -1927,7 +1927,7 @@ void highlight_changed(void) } highlight_attr[hlf] = hl_get_ui_attr(hlf, final_id, - hlf == HLF_INACTIVE); + (hlf == HLF_INACTIVE || hlf == HLF_LC)); if (highlight_attr[hlf] != highlight_attr_last[hlf]) { if (hlf == HLF_MSG) { diff --git a/src/nvim/match.c b/src/nvim/match.c index af89319a09..4129e84fc2 100644 --- a/src/nvim/match.c +++ b/src/nvim/match.c @@ -4,6 +4,7 @@ // match.c: functions for highlighting matches #include <stdbool.h> +#include "nvim/buffer_defs.h" #include "nvim/charset.h" #include "nvim/fold.h" #include "nvim/highlight_group.h" @@ -667,7 +668,16 @@ int update_search_hl(win_T *wp, linenr_T lnum, colnr_T col, char_u **line, match if (shl->endcol < next_col) { shl->endcol = next_col; } - shl->attr_cur = shl->attr; + // Use "CurSearch" highlight for current search match + if (shl == search_hl + && (HL_ATTR(HLF_LC) || wp->w_hl_ids[HLF_LC]) + && wp->w_cursor.lnum == lnum + && wp->w_cursor.col >= shl->startcol + && wp->w_cursor.col < shl->endcol) { + shl->attr_cur = win_hl_attr(wp, HLF_LC) ? win_hl_attr(wp, HLF_LC) : HL_ATTR(HLF_LC); + } else { + shl->attr_cur = shl->attr; + } // Match with the "Conceal" group results in hiding // the match. if (cur != NULL diff --git a/src/nvim/move.c b/src/nvim/move.c index eda3298101..c55a9a296b 100644 --- a/src/nvim/move.c +++ b/src/nvim/move.c @@ -95,27 +95,31 @@ static void comp_botline(win_T *wp) win_check_anchored_floats(wp); } -/// Redraw when w_cline_row changes and 'relativenumber' or 'cursorline' is set. +/// Redraw when w_cline_row changes and 'relativenumber' or 'cursorline' is set +/// or if the 'CurSearch' highlight is defined. /// Also when concealing is on and 'concealcursor' is not active. void redraw_for_cursorline(win_T *wp) FUNC_ATTR_NONNULL_ALL { if ((wp->w_valid & VALID_CROW) == 0 && !pum_visible() - && (wp->w_p_rnu || win_cursorline_standout(wp))) { - // win_line() will redraw the number column and cursorline only. + && (wp->w_p_rnu || win_cursorline_standout(wp) + || HL_ATTR(HLF_LC) || wp->w_hl_ids[HLF_LC])) { + // win_line() will redraw the number column and cursorline only + // and also update the CurSearch highlight (if needed). redraw_later(wp, VALID); } } /// Redraw when w_virtcol changes and 'cursorcolumn' is set or 'cursorlineopt' -/// contains "screenline". +/// contains "screenline" or when the 'CurSearch' highlight is defined. /// Also when concealing is on and 'concealcursor' is active. static void redraw_for_cursorcolumn(win_T *wp) FUNC_ATTR_NONNULL_ALL { if ((wp->w_valid & VALID_VIRTCOL) == 0 && !pum_visible()) { - if (wp->w_p_cuc) { - // When 'cursorcolumn' is set need to redraw with SOME_VALID. + if (wp->w_p_cuc || HL_ATTR(HLF_LC) || wp->w_hl_ids[HLF_LC]) { + // When 'cursorcolumn' is set or 'CurSearch' is defined + // need to redraw with SOME_VALID. redraw_later(wp, SOME_VALID); } else if (wp->w_p_cul && (wp->w_p_culopt_flags & CULOPT_SCRLINE)) { // When 'cursorlineopt' contains "screenline" need to redraw with VALID. |