@@ -3443,33 +3443,37 @@ function! s:RunEdit(state, tmp, job) abort
34433443 endif
34443444 call remove (a: state , ' request' )
34453445 let sentinel = a: state .file . ' .edit'
3446- let file = FugitiveVimPath (readfile (sentinel, ' ' , 1 )[0 ])
3447- try
3448- if ! &equalalways && a: state .mods !~# ' \<\d*tab\>' && 3 > (a: state .mods = ~# ' \<vert' ? winwidth (0 ) : winheight (0 ))
3449- let noequalalways = 1
3450- setglobal equalalways
3451- endif
3452- let mods = s: Mods (a: state .mods, ' SpanOrigin' )
3453- exe substitute (mods, ' \<tab\>' , ' -tab' , ' g' ) ' keepalt split' s: fnameescape (file )
3454- finally
3455- if exists (' l:noequalalways' )
3456- setglobal noequalalways
3457- endif
3458- endtry
3459- set bufhidden = wipe
3460- call s: InitializeBuffer (a: state )
3461- let bufnr = bufnr (' ' )
3462- let s: edit_jobs [bufnr ] = [a: state , a: tmp , a: job , sentinel]
3463- call fugitive#DidChange (a: state .git_dir)
3464- if bufnr == bufnr (' ' ) && ! exists (' g:fugitive_event' )
3446+ let files = readfile (sentinel, ' ' )
3447+ call writefile ([len (files )], sentinel)
3448+ for file in reverse (files )
3449+ let file = FugitiveVimPath (file )
34653450 try
3466- let g: fugitive_event = a: state .git_dir
3467- let g: fugitive_result = a: state
3468- exe s: DoAutocmd (' User FugitiveEditor' )
3451+ if ! &equalalways && a: state .mods !~# ' \<\d*tab\>' && 3 > (a: state .mods = ~# ' \<vert' ? winwidth (0 ) : winheight (0 ))
3452+ let noequalalways = 1
3453+ setglobal equalalways
3454+ endif
3455+ let mods = s: Mods (a: state .mods, ' SpanOrigin' )
3456+ exe substitute (mods, ' \<tab\>' , ' -tab' , ' g' ) ' keepalt split' s: fnameescape (file )
34693457 finally
3470- unlet ! g: fugitive_event g: fugitive_result
3458+ if exists (' l:noequalalways' )
3459+ setglobal noequalalways
3460+ endif
34713461 endtry
3472- endif
3462+ set bufhidden = wipe
3463+ call s: InitializeBuffer (a: state )
3464+ let bufnr = bufnr (' ' )
3465+ let s: edit_jobs [bufnr ] = [a: state , a: tmp , a: job , sentinel]
3466+ call fugitive#DidChange (a: state .git_dir)
3467+ if bufnr == bufnr (' ' ) && ! exists (' g:fugitive_event' )
3468+ try
3469+ let g: fugitive_event = a: state .git_dir
3470+ let g: fugitive_result = a: state
3471+ exe s: DoAutocmd (' User FugitiveEditor' )
3472+ finally
3473+ unlet ! g: fugitive_event g: fugitive_result
3474+ endtry
3475+ endif
3476+ endfor
34733477 return 1
34743478endfunction
34753479
@@ -3623,6 +3627,9 @@ if !exists('s:edit_jobs')
36233627endif
36243628function ! s: RunWait (state , tmp, job, ... ) abort
36253629 if a: 0 && filereadable (a: 1 )
3630+ if a: 0 > 1 && a: 2 > 0
3631+ return ' '
3632+ endif
36263633 call delete (a: 1 )
36273634 endif
36283635 try
@@ -3725,8 +3732,16 @@ function! s:RunBufDelete(bufnr) abort
37253732 endif
37263733 if has_key (s: edit_jobs , a: bufnr ) |
37273734 call add (s: resume_queue , remove (s: edit_jobs , a: bufnr ))
3728- call feedkeys (" \<C-\>\<C-N> :redraw!|call delete(" . string (s: resume_queue [-1 ][0 ].file . ' .edit' ) .
3729- \ " )|call fugitive#Resume()|checktime\r " , ' n' )
3735+ let sentinel = s: resume_queue [-1 ][0 ].file . ' .edit'
3736+ let active_buffers = str2nr (readfile (sentinel, ' ' , 1 )[0 ]) - 1
3737+ call add (s: resume_queue [-1 ], active_buffers)
3738+ if active_buffers < 1
3739+ call feedkeys (" \<C-\>\<C-N> :redraw!|call delete(" . string (sentinel) .
3740+ \ " )|call fugitive#Resume()|checktime\r " , ' n' )
3741+ else
3742+ call writefile ([active_buffers], sentinel)
3743+ call fugitive#Resume ()
3744+ endif
37303745 endif
37313746endfunction
37323747
@@ -3940,7 +3955,7 @@ function! fugitive#Command(line1, line2, range, bang, mods, arg, ...) abort
39403955 let env.FUGITIVE = state .file
39413956 let editor = ' sh ' . s: TempScript (
39423957 \ ' [ -f "$FUGITIVE.exit" ] && cat "$FUGITIVE.exit" >&2 && exit 1' ,
3943- \ ' echo "$1 " > "$FUGITIVE.edit"' ,
3958+ \ ' for arg; do echo "$arg " >> "$FUGITIVE.edit"; done ' ,
39443959 \ ' printf "\033]51;fugitive:edit\007" >&2' ,
39453960 \ ' while [ -f "$FUGITIVE.edit" -a ! -f "$FUGITIVE.exit" ]; do sleep 0.05 2>/dev/null || sleep 1; done' ,
39463961 \ ' exit 0' )
0 commit comments