Add case-insensitive sort option

This commit is contained in:
Martin Vuille 2016-08-27 18:14:10 -04:00
parent 7b36c46d17
commit 7fbd1ad375
3 changed files with 58 additions and 11 deletions

View File

@ -964,11 +964,12 @@ function! s:MapKeys() abort
\ ['nextfold', 'GotoNextFold()'],
\ ['prevfold', 'GotoPrevFold()'],
\
\ ['togglesort', 'ToggleSort()'],
\ ['toggleautoclose', 'ToggleAutoclose()'],
\ ['zoomwin', 'ZoomWindow()'],
\ ['close', 'CloseWindow()'],
\ ['help', 'ToggleHelp()'],
\ ['togglesort', 'ToggleSort()'],
\ ['togglecaseinsensitive', 'ToggleCaseInsensitive()'],
\ ['toggleautoclose', 'ToggleAutoclose()'],
\ ['zoomwin', 'ZoomWindow()'],
\ ['close', 'CloseWindow()'],
\ ['help', 'ToggleHelp()'],
\ ]
for [map, func] in maps
@ -2579,7 +2580,8 @@ function! s:CompareByKind(tag1, tag2) abort
let name2 = a:tag2.name
endif
if name1 <=# name2
let ci = g:tagbar_case_insensitive
if (((!ci) && (name1 <=# name2)) || (ci && (name1 <=? name2)))
return -1
else
return 1
@ -2890,6 +2892,7 @@ function! s:PrintHelp() abort
silent put ='\"'
silent put ='\" ---------- Misc -----------'
silent put ='\" ' . s:get_map_str('togglesort') . ': Toggle sort'
silent put ='\" ' . s:get_map_str('togglecaseinsensitive') . ': Toggle case insensitive sort option'
silent put ='\" ' . s:get_map_str('toggleautoclose') . ': Toggle autoclose option'
silent put ='\" ' . s:get_map_str('zoomwin') . ': Zoom window in/out'
silent put ='\" ' . s:get_map_str('close') . ': Close window'
@ -3823,6 +3826,35 @@ function! s:ToggleHideNonPublicTags() abort
call s:SetStatusLine('current')
endfunction
" s:ToggleCaseInsensitive() {{{2
function! s:ToggleCaseInsensitive() abort
let fileinfo = s:known_files.getCurrent(0)
if empty(fileinfo)
return
endif
" Save the tag the cursor is currently on
let curline = line('.')
let taginfo = s:GetTagInfo(curline, 0)
match none
let g:tagbar_case_insensitive = !g:tagbar_case_insensitive
call fileinfo.sortTags()
call s:RenderKeepView()
call s:SetStatusLine('current')
" If we were on a tag before sorting then jump to it, otherwise restore
" the cursor to the current line
if !empty(taginfo)
execute taginfo.tline
else
execute curline
endif
endfunction
" s:ToggleAutoclose() {{{2
function! s:ToggleAutoclose() abort
let g:tagbar_autoclose = !g:tagbar_autoclose
@ -3893,6 +3925,7 @@ function! s:SetStatusLine(current)
let flags = []
let flags += exists('w:autoclose') && w:autoclose ? ['c'] : []
let flags += g:tagbar_autoclose ? ['C'] : []
let flags += (g:tagbar_sort && g:tagbar_case_insensitive) ? ['i'] : []
let flags += g:tagbar_hide_nonpublic ? ['v'] : []
if exists('g:tagbar_status_func')

View File

@ -481,6 +481,18 @@ Example:
let g:tagbar_sort = 0
<
*g:tagbar_case_insensitive*
g:tagbar_case_insensitive~
Default: 0
If this option is set a case-insensitive comparison is used when the tags
are sorted according to their name. If it is unset a case-sensitive
comparison is used.
Example:
>
let g:tagbar_case_insensitive = 1
<
*g:tagbar_compact*
g:tagbar_compact~
Default: 0

View File

@ -59,6 +59,7 @@ function! s:setup_options() abort
\ ['autofocus', 0],
\ ['autopreview', 0],
\ ['autoshowtag', 0],
\ ['case_insensitive', 0],
\ ['compact', 0],
\ ['expand', 0],
\ ['foldlevel', 99],
@ -109,11 +110,12 @@ function! s:setup_keymaps() abort
\ ['nextfold', 'zj'],
\ ['prevfold', 'zk'],
\
\ ['togglesort', 's'],
\ ['toggleautoclose', 'c'],
\ ['zoomwin', 'x'],
\ ['close', 'q'],
\ ['help', ['<F1>', '?']],
\ ['togglesort', 's'],
\ ['togglecaseinsensitive', 'i'],
\ ['toggleautoclose', 'c'],
\ ['zoomwin', 'x'],
\ ['close', 'q'],
\ ['help', ['<F1>', '?']],
\ ]
for [map, key] in keymaps