From e34767b7920413b5f317e206531a2b349ba320d2 Mon Sep 17 00:00:00 2001 From: Malcolm Ramsay Date: Mon, 15 May 2017 22:01:06 +1000 Subject: [PATCH 1/4] Hack to enable neovim support This is a very first attempt at enabling neovim support for vim-taskwarrir. In my use the only functions that require interaction are undo and delete, for these two functions there is a check `has('nvim')` which changes execution from `!` to `terminal`. There is also no `taskwarrior#refresh()` call, which is done in a BufEnter autocmd. --- autoload/taskwarrior/action.vim | 67 +++++++++++++++++++++------------ ftplugin/taskreport.vim | 7 ++++ 2 files changed, 49 insertions(+), 25 deletions(-) diff --git a/autoload/taskwarrior/action.vim b/autoload/taskwarrior/action.vim index 852a4b6..7bb5a25 100644 --- a/autoload/taskwarrior/action.vim +++ b/autoload/taskwarrior/action.vim @@ -85,23 +85,34 @@ function! taskwarrior#action#modify(mode) endfunction function! taskwarrior#action#delete() - let uuid = taskwarrior#data#get_uuid() - if uuid == '' - call taskwarrior#action#annotate('del') - else - let ccol = taskwarrior#data#current_column() - if index(['project', 'tags', 'due', 'priority', 'start', 'depends'], ccol) != -1 - call taskwarrior#system_call(uuid, 'modify', ccol.':', 'silent') + let uuid = taskwarrior#data#get_uuid() + if uuid == '' + call taskwarrior#action#annotate('del') else - execute '!task '.uuid.' delete' + let ccol = taskwarrior#data#current_column() + if index(['project', 'tags', 'due', 'priority', 'start', 'depends'], ccol) != -1 + call taskwarrior#system_call(uuid, 'modify', ccol.':', 'silent') + else + if !has('nvim') + execute '!task '.uuid.' delete' + else + execute terminal 'task'.uuid.'delete' + endif + endif + endif + if !has('nvim') + call taskwarrior#refresh() endif endif - call taskwarrior#refresh() endfunction function! taskwarrior#action#remove() - execute '!task '.taskwarrior#data#get_uuid().' delete' - call taskwarrior#list() + if !has('nvim') + execute '!task '.taskwarrior#data#get_uuid().' delete' + call taskwarrior#list() + else + execute 'terminal task '.taskwarrior#data#get_uuid().' delete' + endif endfunction function! taskwarrior#action#annotate(op) @@ -297,21 +308,27 @@ function! taskwarrior#action#move_cursor(direction, mode) endfunction function! taskwarrior#action#undo() - if has("gui_running") - if exists('g:task_gui_term') && g:task_gui_term == 1 - !task rc.color=off undo - elseif executable('xterm') - silent !xterm -e 'task undo' - elseif executable('urxvt') - silent !urxvt -e task undo - elseif executable('gnome-terminal') - silent !gnome-terminal -e 'task undo' - endif + if has('nvim') + terminal task undo else - sil !clear - !task undo + if has("gui_running") + if exists('g:task_gui_term') && g:task_gui_term == 1 + !task rc.color=off undo + elseif executable('xterm') + silent !xterm -e 'task undo' + elseif executable('urxvt') + silent !urxvt -e task undo + elseif executable('gnome-terminal') + silent !gnome-terminal -e 'task undo' + endif + else + sil !clear + !task undo + endif + if has('nvim') + call taskwarrior#refresh() + endif endif - call taskwarrior#refresh() endfunction function! taskwarrior#action#clear_completed() @@ -320,7 +337,7 @@ function! taskwarrior#action#clear_completed() endfunction function! taskwarrior#action#sync(action) - execute '!task '.a:action.' ' + terminal task '.a:action.' ' call taskwarrior#refresh() endfunction diff --git a/ftplugin/taskreport.vim b/ftplugin/taskreport.vim index a5d1161..26a6e8a 100644 --- a/ftplugin/taskreport.vim +++ b/ftplugin/taskreport.vim @@ -143,3 +143,10 @@ endif command! -buffer TWToggleReadonly :let g:task_readonly = (g:task_readonly ? 0 : 1) | call taskwarrior#refresh() command! -buffer TWToggleHLField :let g:task_highlight_field = (g:task_highlight_field ? 0 : 1) | call taskwarrior#refresh() command! -buffer -nargs=? -complete=customlist,taskwarrior#complete#sort TWReportSort :call taskwarrior#action#sort_by_arg() + +if has('nvim') + augroup taskwarrior#neovim + autocmd! + autocmd BufEnter task*report call taskwarrior#refresh() + augroup end +endif From 310c5aa46ce8d7641afa5034af77e9ed92b4c314 Mon Sep 17 00:00:00 2001 From: Malcolm Ramsay Date: Sun, 21 May 2017 12:54:59 +1000 Subject: [PATCH 2/4] Neovim support for sync The refresh of the terminal occurred before sync had updated so any new tasks were not showing up when syncing in neovim. --- autoload/taskwarrior/action.vim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/autoload/taskwarrior/action.vim b/autoload/taskwarrior/action.vim index 7bb5a25..9247f6e 100644 --- a/autoload/taskwarrior/action.vim +++ b/autoload/taskwarrior/action.vim @@ -337,8 +337,10 @@ function! taskwarrior#action#clear_completed() endfunction function! taskwarrior#action#sync(action) - terminal task '.a:action.' ' - call taskwarrior#refresh() + execute '!task '.a:action.' ' + if !has('nvim') + call taskwarrior#refresh() + endif endfunction function! taskwarrior#action#select() From c98816c3b1ec1cd09c4a3e11b9fe19b6fce2ed6f Mon Sep 17 00:00:00 2001 From: Malcolm Ramsay Date: Thu, 25 May 2017 16:22:16 +1000 Subject: [PATCH 3/4] Change to positive has('nvim') conditionals All the conditionals in the check for nvim have been modified to check for the positive rather than negative. --- autoload/taskwarrior/action.vim | 45 ++++++++++++++++----------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/autoload/taskwarrior/action.vim b/autoload/taskwarrior/action.vim index 9247f6e..ca5880e 100644 --- a/autoload/taskwarrior/action.vim +++ b/autoload/taskwarrior/action.vim @@ -85,33 +85,32 @@ function! taskwarrior#action#modify(mode) endfunction function! taskwarrior#action#delete() - let uuid = taskwarrior#data#get_uuid() - if uuid == '' - call taskwarrior#action#annotate('del') + let uuid = taskwarrior#data#get_uuid() + if uuid == '' + call taskwarrior#action#annotate('del') + call taskwarrior#refresh() + else + let ccol = taskwarrior#data#current_column() + if index(['project', 'tags', 'due', 'priority', 'start', 'depends'], ccol) != -1 + call taskwarrior#system_call(uuid, 'modify', ccol.':', 'silent') + call taskwarrior#refresh() else - let ccol = taskwarrior#data#current_column() - if index(['project', 'tags', 'due', 'priority', 'start', 'depends'], ccol) != -1 - call taskwarrior#system_call(uuid, 'modify', ccol.':', 'silent') + if has('nvim') + execute 'terminal task '.uuid.' delete' else - if !has('nvim') - execute '!task '.uuid.' delete' - else - execute terminal 'task'.uuid.'delete' - endif + execute '!task '.uuid.' delete' + call taskwarrior#refresh() endif endif - if !has('nvim') - call taskwarrior#refresh() - endif endif endfunction function! taskwarrior#action#remove() - if !has('nvim') + if has('nvim') + execute 'terminal task '.taskwarrior#data#get_uuid().' delete' + else execute '!task '.taskwarrior#data#get_uuid().' delete' call taskwarrior#list() - else - execute 'terminal task '.taskwarrior#data#get_uuid().' delete' endif endfunction @@ -309,7 +308,7 @@ endfunction function! taskwarrior#action#undo() if has('nvim') - terminal task undo + execute 'terminal task undo' else if has("gui_running") if exists('g:task_gui_term') && g:task_gui_term == 1 @@ -325,9 +324,7 @@ function! taskwarrior#action#undo() sil !clear !task undo endif - if has('nvim') - call taskwarrior#refresh() - endif + call taskwarrior#refresh() endif endfunction @@ -337,8 +334,10 @@ function! taskwarrior#action#clear_completed() endfunction function! taskwarrior#action#sync(action) - execute '!task '.a:action.' ' - if !has('nvim') + if has('nvim') + execute 'terminal task '.a:action.' ' + else + execute '!task '.a:action.' ' call taskwarrior#refresh() endif endfunction From ac73c271b7382dc934d0edbdb412a1446a65ea95 Mon Sep 17 00:00:00 2001 From: Malcolm Ramsay Date: Wed, 7 Jun 2017 15:59:14 +1000 Subject: [PATCH 4/4] Additional windows/tabs no longer close I am creating a new window every time there is a call to terminal, as without it when there are multiple windows or tabs open the terminal call will close the current window. --- autoload/taskwarrior/action.vim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/autoload/taskwarrior/action.vim b/autoload/taskwarrior/action.vim index ca5880e..d11b913 100644 --- a/autoload/taskwarrior/action.vim +++ b/autoload/taskwarrior/action.vim @@ -96,7 +96,7 @@ function! taskwarrior#action#delete() call taskwarrior#refresh() else if has('nvim') - execute 'terminal task '.uuid.' delete' + execute 'new | terminal task '.uuid.' delete' else execute '!task '.uuid.' delete' call taskwarrior#refresh() @@ -107,7 +107,7 @@ endfunction function! taskwarrior#action#remove() if has('nvim') - execute 'terminal task '.taskwarrior#data#get_uuid().' delete' + execute 'new | terminal task '.taskwarrior#data#get_uuid().' delete' else execute '!task '.taskwarrior#data#get_uuid().' delete' call taskwarrior#list() @@ -308,7 +308,7 @@ endfunction function! taskwarrior#action#undo() if has('nvim') - execute 'terminal task undo' + execute 'new | terminal task undo' else if has("gui_running") if exists('g:task_gui_term') && g:task_gui_term == 1 @@ -335,7 +335,7 @@ endfunction function! taskwarrior#action#sync(action) if has('nvim') - execute 'terminal task '.a:action.' ' + execute 'new | terminal task '.a:action.' ' else execute '!task '.a:action.' ' call taskwarrior#refresh()