Feature: Optionally disable todo propagation to parents/children (Issue #954)
taskwiki integrates vimwiki with taskwarrior, and in doing so changes
the semantics of checkboxes a bit:
* [ ] Install Taskwiki | pending task
* [X] Install Taskwiki | completed task
* [D] Install Taskwiki | deleted task
* [S] Install Taskwiki | started task
* [W] Install Taskwiki | waiting task
It's still desirable for vimwiki to automatically insert `* [ ]` on
`i_<CR>`, `o` and `O` and to syntax highlight all these five as
checkboxes, so I have this in my .vimrc:
let g:vimwiki_listsym_rejected = 'D'
let g:vimwiki_listsyms = ' WSX'
but it results in undesirable behaviour with task hierarchies: when I
add a new subtask (using `i_<CR>`, `o` or `O`)
or mark a subtask done, the parent's checkbox is updated to reflect its
overall completion, to one of ` `, `W`, `S` or `X`, depending on
subtasks completion. This makes little sense in taskwiki. One usually
doesn't want to touch the "parent" task in taskwarrior until the
"subtasks" are done. Setting
let g:vimwiki_listsym_rejected = 'W'
let g:vimwiki_listsyms = ' SX'
results in slightly less illogical behaviour, but it still assumes that
(1) all subtasks are visible (not necessarily true in taskwiki) and
(2) that it's a parent/subtask relationship, not a dependency
relationship (not true in taskwarrior, questionable in taskwiki).
This commit adds an option to disable this behaviour.
This commit is contained in:
committed by
Tinmarino
parent
f794f1e284
commit
2a31984369
@@ -800,6 +800,10 @@ function! s:set_state_plus_children(item, new_rate, ...) abort
|
||||
call s:set_state(a:item, a:new_rate)
|
||||
endif
|
||||
|
||||
if vimwiki#vars#get_wikilocal('listsyms_propagate') == 0
|
||||
return
|
||||
endif
|
||||
|
||||
let all_children_are_done = 1
|
||||
let all_children_are_rejected = 1
|
||||
|
||||
@@ -867,7 +871,7 @@ endfunction
|
||||
"updates the symbol of a checkboxed item according to the symbols of its
|
||||
"children
|
||||
function! s:update_state(item) abort
|
||||
if a:item.type == 0 || a:item.cb ==? ''
|
||||
if a:item.type == 0 || a:item.cb ==? '' || vimwiki#vars#get_wikilocal('listsyms_propagate') == 0
|
||||
return
|
||||
endif
|
||||
|
||||
|
||||
@@ -506,6 +506,7 @@ function! s:get_default_wikilocal() abort
|
||||
\ 'list_margin': {'type': type(0), 'default': -1, 'min': -1},
|
||||
\ 'listsym_rejected': {'type': type(''), 'default': vimwiki#vars#get_global('listsym_rejected')},
|
||||
\ 'listsyms': {'type': type(''), 'default': vimwiki#vars#get_global('listsyms')},
|
||||
\ 'listsyms_propagate': {'type': type(0), 'default': 1},
|
||||
\ 'markdown_link_ext': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'maxhi': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
|
||||
\ 'name': {'type': type(''), 'default': ''},
|
||||
|
||||
Reference in New Issue
Block a user