From 2d32a2965a5dbd5d299a277ebc75b07b2c186090 Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Mon, 12 Feb 2018 16:32:43 +0000 Subject: [PATCH] Improve hunk previewing. - Treat &previewheight as a maximum height. - Make preview window shrink to fit the hunk. - Resize preview window each time. - Make preview window readonly and nomodifiable. Based on code by @somini. Thanks! See #451. --- autoload/gitgutter/hunk.vim | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/autoload/gitgutter/hunk.vim b/autoload/gitgutter/hunk.vim index fd8de80..31e500b 100644 --- a/autoload/gitgutter/hunk.vim +++ b/autoload/gitgutter/hunk.vim @@ -196,15 +196,23 @@ endfunction function! s:preview(hunk_diff) + let hunk_lines = split(s:discard_header(a:hunk_diff), "\n") + let hunk_lines_length = len(hunk_lines) + let previewheight = min([hunk_lines_length, &previewheight]) + silent! wincmd P if !&previewwindow - noautocmd execute 'bo' &previewheight 'new' + noautocmd execute 'bo' previewheight 'new' set previewwindow + else + execute 'resize' previewheight endif - setlocal noro modifiable filetype=diff buftype=nofile bufhidden=delete noswapfile + setlocal noreadonly modifiable filetype=diff buftype=nofile bufhidden=delete noswapfile execute "%delete_" - call append(0, split(s:discard_header(a:hunk_diff), "\n")) + call append(0, hunk_lines) + normal! gg + setlocal readonly nomodifiable noautocmd wincmd p endfunction