From 186dada663e7dbe23546e4a5d57be31e690da292 Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Thu, 5 Mar 2015 12:19:02 +0100 Subject: [PATCH] Warn when cursor not in a hunk. --- autoload/gitgutter.vim | 50 +++++++++++++++++++++++-------------- autoload/gitgutter/hunk.vim | 8 +++--- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/autoload/gitgutter.vim b/autoload/gitgutter.vim index 83413f6..3693356 100644 --- a/autoload/gitgutter.vim +++ b/autoload/gitgutter.vim @@ -156,11 +156,15 @@ function! gitgutter#stage_hunk() " It doesn't make sense to stage a hunk otherwise. silent write - let diff_for_hunk = gitgutter#diff#generate_diff_for_hunk('stage') - call gitgutter#utility#system(gitgutter#utility#command_in_directory_of_file('git apply --cached --unidiff-zero - '), diff_for_hunk) + if empty(gitgutter#hunk#current_hunk()) + call gitgutter#utility#warn('cursor is not in a hunk') + else + let diff_for_hunk = gitgutter#diff#generate_diff_for_hunk('stage') + call gitgutter#utility#system(gitgutter#utility#command_in_directory_of_file('git apply --cached --unidiff-zero - '), diff_for_hunk) - " refresh gitgutter's view of buffer - silent execute "GitGutter" + " refresh gitgutter's view of buffer + silent execute "GitGutter" + endif silent! call repeat#set("\GitGutterStageHunk", -1) endif @@ -172,11 +176,15 @@ function! gitgutter#revert_hunk() " It doesn't make sense to stage a hunk otherwise. silent write - let diff_for_hunk = gitgutter#diff#generate_diff_for_hunk('revert') - call gitgutter#utility#system(gitgutter#utility#command_in_directory_of_file('git apply --reverse --unidiff-zero - '), diff_for_hunk) + if empty(gitgutter#hunk#current_hunk()) + call gitgutter#utility#warn('cursor is not in a hunk') + else + let diff_for_hunk = gitgutter#diff#generate_diff_for_hunk('revert') + call gitgutter#utility#system(gitgutter#utility#command_in_directory_of_file('git apply --reverse --unidiff-zero - '), diff_for_hunk) - " reload file - silent edit + " reload file + silent edit + endif silent! call repeat#set("\GitGutterRevertHunk", -1) endif @@ -186,19 +194,23 @@ function! gitgutter#preview_hunk() if gitgutter#utility#is_active() silent write - let diff_for_hunk = gitgutter#diff#generate_diff_for_hunk('preview') + if empty(gitgutter#hunk#current_hunk()) + call gitgutter#utility#warn('cursor is not in a hunk') + else + let diff_for_hunk = gitgutter#diff#generate_diff_for_hunk('preview') - silent! wincmd P - if !&previewwindow - execute 'bo ' . &previewheight . ' new' - set previewwindow + silent! wincmd P + if !&previewwindow + execute 'bo ' . &previewheight . ' new' + set previewwindow + endif + + setlocal noro modifiable filetype=diff buftype=nofile bufhidden=delete noswapfile + execute "%delete_" + call append(0, split(diff_for_hunk, "\n")) + + wincmd p endif - - setlocal noro modifiable filetype=diff buftype=nofile bufhidden=delete noswapfile - execute "%delete_" - call append(0, split(diff_for_hunk, "\n")) - - wincmd p endif endfunction diff --git a/autoload/gitgutter/hunk.vim b/autoload/gitgutter/hunk.vim index e50516e..9d895d8 100644 --- a/autoload/gitgutter/hunk.vim +++ b/autoload/gitgutter/hunk.vim @@ -63,8 +63,8 @@ function! gitgutter#hunk#prev_hunk(count) endif endfunction -" Returns the hunk the cursor is currently in or 0 if the cursor isn't in a -" hunk. +" Returns the hunk the cursor is currently in or an empty list if the cursor +" isn't in a hunk. function! gitgutter#hunk#current_hunk() let current_hunk = [] @@ -75,9 +75,7 @@ function! gitgutter#hunk#current_hunk() endif endfor - if len(current_hunk) == 4 - return current_hunk - endif + return current_hunk endfunction function! gitgutter#hunk#cursor_in_hunk(hunk)