diff --git a/.config/kak/autoload/search-highlight.kak b/.config/kak/autoload/search-highlight.kak index e6b684cb..1515c4a0 100644 --- a/.config/kak/autoload/search-highlight.kak +++ b/.config/kak/autoload/search-highlight.kak @@ -7,12 +7,21 @@ provide-module search-highlight %— declare-option -docstring %{ Face definition for search highlighting. See :doc faces. } str search_highlight_face rgb:D87C4A+i + declare-option -docstring %{ + Whether escaping the search prompt should clear the highlighting. + } bool search_highlight_prompt_escape false + declare-option -docstring %{ + Whether the highlighting should always be cleared when returning to + normal mode. Takes priority over search_highlight_prompt_escape. + } bool search_highlight_auto_clear false ## end # track current highlighting status declare-option -hidden str search_highlight_status 'search-highlight-off' def -hidden -override search-highlight-on nop def -hidden -override search-highlight-off fail + def -hidden -override true nop + def -hidden -override false fail declare-option -hidden bool search_highlight_quit false @@ -35,9 +44,13 @@ provide-module search-highlight %— try %{ %opt{search_highlight_status} } catch %{ - # if the user escapes search, we should immediately clear the highlight - # in normal mode so we set the flag before escaping - # map window prompt ': set-option window search_highlight_quit true' + try %{ + # if the user escapes search, we should immediately clear the highlight + # in normal mode so we set the flag before escaping + # but only if the option is set + %opt{search_highlight_prompt_escape} + map window prompt ': set-option window search_highlight_quit true' + } # if not already enabled, add the highlighter add-highlighter window/search-highlight dynregex '%reg{/}' %exp{0:%opt{search_highlight_face}} # update status tracker @@ -45,15 +58,21 @@ provide-module search-highlight %— # register hook to clear highlighter after leaving search hook -once -group search-highlight window NormalIdle .* %{ - # check if user escaped search + # check if auto clear is set try %{ - %opt{search_highlight_quit} - # if so, clear immediately + %opt{search_highlight_auto_clear} search-highlight-clear } catch %{ - # otherwise, we clear on escape - hook -once -group search-highlight window NormalKey %{ + # check if user escaped search + try %{ + %opt{search_highlight_quit} + # if so, clear immediately search-highlight-clear + } catch %{ + # otherwise, we clear on escape + hook -once -group search-highlight window NormalKey %{ + search-highlight-clear + } } } # clear the prompt mapping so it doesn't conflict with