From 425c7cf2e21b3e9d13597ea1cf75d92a4180935a Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Thu, 23 Apr 2020 09:28:38 +0100 Subject: [PATCH] Maintain backward compatibility in hunk preview code win_getid() was introduced in Vim 7.4.1557. The code uses it to remember the id of the preview window. In newer Vims or Neovim this could be a floating window but pre-7.4.1557 it can only be an ordinary preview window. And in that case we only need the preview window's buffer number. This commit uses the buffer number when win_getid() isn't available. Fixes #683. --- 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 0723bc5..2404f08 100644 --- a/autoload/gitgutter/hunk.vim +++ b/autoload/gitgutter/hunk.vim @@ -1,4 +1,5 @@ let s:winid = 0 +let s:preview_bufnr = 0 let s:nomodeline = (v:version > 703 || (v:version == 703 && has('patch442'))) ? '' : '' function! gitgutter#hunk#set_hunks(bufnr, hunks) abort @@ -442,7 +443,11 @@ function! s:open_hunk_preview_window() if !&previewwindow noautocmd execute g:gitgutter_preview_win_location &previewheight 'new gitgutter://hunk-preview' doautocmd WinEnter - let s:winid = win_getid() + if exists('*win_getid') + let s:winid = win_getid() + else + let s:preview_bufnr = bufnr('') + endif set previewwindow setlocal filetype=diff buftype=acwrite bufhidden=delete " Reset some defaults in case someone else has changed them. @@ -511,7 +516,8 @@ endfunction function! s:enable_staging_from_hunk_preview_window() augroup gitgutter_hunk_preview autocmd! - execute 'autocmd BufWriteCmd GitGutterStageHunk' + let bufnr = s:winid != 0 ? winbufnr(s:winid) : s:preview_bufnr + execute 'autocmd BufWriteCmd GitGutterStageHunk' augroup END endfunction @@ -523,7 +529,8 @@ endfunction function! s:close_hunk_preview_window() - call setbufvar(winbufnr(s:winid), '&modified', 0) + let bufnr = s:winid != 0 ? winbufnr(s:winid) : s:preview_bufnr + call setbufvar(bufnr, '&modified', 0) if g:gitgutter_preview_win_floating if win_id2win(s:winid) > 0 @@ -534,4 +541,5 @@ function! s:close_hunk_preview_window() endif let s:winid = 0 + let s:preview_bufnr = 0 endfunction