From 2c45d3c1aa04e45f2318ca9a6feb47f6f617c032 Mon Sep 17 00:00:00 2001 From: kazukazuinaina Date: Sun, 28 Jun 2020 05:56:57 +0900 Subject: [PATCH 1/2] [add] support fot searchcount extension --- autoload/airline/extensions.vim | 5 +++ autoload/airline/extensions/searchcount.vim | 48 +++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 autoload/airline/extensions/searchcount.vim diff --git a/autoload/airline/extensions.vim b/autoload/airline/extensions.vim index 9030ba5b..74694ccc 100644 --- a/autoload/airline/extensions.vim +++ b/autoload/airline/extensions.vim @@ -428,6 +428,11 @@ function! airline#extensions#load() call add(s:loaded_ext, 'cursormode') endif + if get(g:, 'airline#extensions#searchcount#enabled', 1) && exists('*searchcount') + call airline#extensions#searchcount#init(s:ext) + call add(s:loaded_ext, 'searchcount') + endif + if !get(g:, 'airline#extensions#disable_rtp_load', 0) " load all other extensions, which are not part of the default distribution. " (autoload/airline/extensions/*.vim outside of our s:script_path). diff --git a/autoload/airline/extensions/searchcount.vim b/autoload/airline/extensions/searchcount.vim new file mode 100644 index 00000000..b388223d --- /dev/null +++ b/autoload/airline/extensions/searchcount.vim @@ -0,0 +1,48 @@ +" MIT License. Copyright (c) 2013-2020 Bailey Ling et al. +" This extension is inspired by vim-anzu . +" vim: et ts=2 sts=2 sw=2 + +scriptencoding utf-8 + + +function! airline#extensions#searchcount#init(ext) abort + call a:ext.add_statusline_func('airline#extensions#searchcount#apply') +endfunction + +function! airline#extensions#searchcount#apply(...) abort + call airline#extensions#append_to_section('y', + \ '%{v:hlsearch ? airline#extensions#searchcount#status() : ""}') +endfunction + +function! airline#extensions#searchcount#status() abort + let result = searchcount(#{recompute: 1}) + if empty(result) || result.total ==# 0 + return '' + endif + if result.incomplete ==# 1 " timed out + return printf(' /%s [?/??]', @/) + elseif result.incomplete ==# 2 " max count exceeded + if result.total > result.maxcount && + \ result.current > result.maxcount + return printf('%s[>%d/>%d]', @/, + \ result.current, result.total) + elseif result.total > result.maxcount + return printf('%s[%d/>%d]', @/, + \ result.current, result.total) + endif + endif + return printf('%s[%d/%d]', @/, + \ result.current, result.total) +endfunction + +autocmd CursorMoved * + \ let s:searchcount_timer = timer_start( + \ 10, function('s:update_searchcount')) + +function! s:update_searchcount(timer) abort + if a:timer ==# s:searchcount_timer + call searchcount(#{ + \ recompute: 1, maxcount: 0, timeout: 100}) + redrawstatus + endif +endfunction From 2d9e88794d6afafb78c5325fd97f424aa8a2ffce Mon Sep 17 00:00:00 2001 From: kazukazuinaina Date: Sun, 28 Jun 2020 06:37:29 +0900 Subject: [PATCH 2/2] delete redrawstatus This is unnecessary. Removing it will still work properly and improve performance. --- autoload/airline/extensions/searchcount.vim | 1 - 1 file changed, 1 deletion(-) diff --git a/autoload/airline/extensions/searchcount.vim b/autoload/airline/extensions/searchcount.vim index b388223d..7f7fd36f 100644 --- a/autoload/airline/extensions/searchcount.vim +++ b/autoload/airline/extensions/searchcount.vim @@ -43,6 +43,5 @@ function! s:update_searchcount(timer) abort if a:timer ==# s:searchcount_timer call searchcount(#{ \ recompute: 1, maxcount: 0, timeout: 100}) - redrawstatus endif endfunction