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.
This commit is contained in:
Andy Stewart
2018-02-12 16:32:43 +00:00
parent a8af1853bd
commit 2d32a2965a

View File

@@ -196,15 +196,23 @@ endfunction
function! s:preview(hunk_diff) 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 silent! wincmd P
if !&previewwindow if !&previewwindow
noautocmd execute 'bo' &previewheight 'new' noautocmd execute 'bo' previewheight 'new'
set previewwindow set previewwindow
else
execute 'resize' previewheight
endif endif
setlocal noro modifiable filetype=diff buftype=nofile bufhidden=delete noswapfile setlocal noreadonly modifiable filetype=diff buftype=nofile bufhidden=delete noswapfile
execute "%delete_" 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 noautocmd wincmd p
endfunction endfunction