From 20afe48edd7fdb0442bb0c305a3f398343774fa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=2E=20Sch=C3=B6nitzer?= Date: Sun, 9 Jul 2017 21:21:50 +0200 Subject: [PATCH] Add comment & binding for in-/decrease Todo-status --- autoload/vimwiki/lst.vim | 72 ++++++++++++++++++++++++++++++++++++++++ ftplugin/vimwiki.vim | 19 +++++++++++ 2 files changed, 91 insertions(+) diff --git a/autoload/vimwiki/lst.vim b/autoload/vimwiki/lst.vim index 4a75f3f..2bf9f31 100644 --- a/autoload/vimwiki/lst.vim +++ b/autoload/vimwiki/lst.vim @@ -808,6 +808,78 @@ function! s:remove_cb(item) "{{{ return item endfunction "}}} + +"Increment checkbox between [ ] and [X] +"in the lines of the given range +function! vimwiki#lst#decrement_cb(from_line, to_line) "{{{ + let from_item = s:get_corresponding_item(a:from_line) + if from_item.type == 0 + return + endif + + let parent_items_of_lines = [] + + if from_item.cb != '' + + "if from_line has CB, toggle it and set all siblings to the same new state + let rate_first_line = s:get_rate(from_item) + let n=len(g:vimwiki_listsyms_list) + let new_rate = max([rate_first_line - 100/(n-1)-1, 0]) + + for cur_ln in range(from_item.lnum, a:to_line) + let cur_item = s:get_item(cur_ln) + if cur_item.type != 0 && cur_item.cb != '' + call s:set_state_plus_children(cur_item, new_rate) + let cur_parent_item = s:get_parent(cur_item) + if index(parent_items_of_lines, cur_parent_item) == -1 + call insert(parent_items_of_lines, cur_parent_item) + endif + endif + endfor + + endif + + for parent_item in parent_items_of_lines + call s:update_state(parent_item) + endfor + +endfunction "}}} +"Increment checkbox between [ ] and [X] +"in the lines of the given range +function! vimwiki#lst#increment_cb(from_line, to_line) "{{{ + let from_item = s:get_corresponding_item(a:from_line) + if from_item.type == 0 + return + endif + + let parent_items_of_lines = [] + + if from_item.cb != '' + + "if from_line has CB, toggle it and set all siblings to the same new state + let rate_first_line = s:get_rate(from_item) + let n=len(g:vimwiki_listsyms_list) + let new_rate = min([rate_first_line + 100/(n-1)+1, 100]) + + for cur_ln in range(from_item.lnum, a:to_line) + let cur_item = s:get_item(cur_ln) + if cur_item.type != 0 && cur_item.cb != '' + call s:set_state_plus_children(cur_item, new_rate) + let cur_parent_item = s:get_parent(cur_item) + if index(parent_items_of_lines, cur_parent_item) == -1 + call insert(parent_items_of_lines, cur_parent_item) + endif + endif + endfor + + endif + + for parent_item in parent_items_of_lines + call s:update_state(parent_item) + endfor + +endfunction "}}} + "Toggles checkbox between [ ] and [X] or creates one "in the lines of the given range function! vimwiki#lst#toggle_cb(from_line, to_line) "{{{ diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim index 9262c5e..3fb0095 100644 --- a/ftplugin/vimwiki.vim +++ b/ftplugin/vimwiki.vim @@ -295,6 +295,8 @@ command! -buffer -range -nargs=1 VimwikiChangeSymbolTo call vimwiki#lst#change_m command! -buffer -range -nargs=1 VimwikiListChangeSymbolI call vimwiki#lst#change_marker(, , , 'i') command! -buffer -nargs=1 VimwikiChangeSymbolInListTo call vimwiki#lst#change_marker_in_list() command! -buffer -range VimwikiToggleListItem call vimwiki#lst#toggle_cb(, ) +command! -buffer -range VimwikiIncrementListItem call vimwiki#lst#increment_cb(, ) +command! -buffer -range VimwikiDecrementListItem call vimwiki#lst#decrement_cb(, ) command! -buffer -range -nargs=+ VimwikiListChangeLvl call vimwiki#lst#change_level(, , ) command! -buffer -range VimwikiRemoveSingleCB call vimwiki#lst#remove_cb(, ) command! -buffer VimwikiRemoveCBInList call vimwiki#lst#remove_cb_in_list() @@ -445,6 +447,23 @@ nnoremap