@@ -3443,33 +3443,37 @@ function! s:RunEdit(state, tmp, job) abort
3443
3443
endif
3444
3444
call remove (a: state , ' request' )
3445
3445
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 )
3465
3450
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 )
3469
3457
finally
3470
- unlet ! g: fugitive_event g: fugitive_result
3458
+ if exists (' l:noequalalways' )
3459
+ setglobal noequalalways
3460
+ endif
3471
3461
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
3473
3477
return 1
3474
3478
endfunction
3475
3479
@@ -3623,6 +3627,9 @@ if !exists('s:edit_jobs')
3623
3627
endif
3624
3628
function ! s: RunWait (state , tmp, job, ... ) abort
3625
3629
if a: 0 && filereadable (a: 1 )
3630
+ if a: 0 > 1 && a: 2 > 0
3631
+ return ' '
3632
+ endif
3626
3633
call delete (a: 1 )
3627
3634
endif
3628
3635
try
@@ -3725,8 +3732,16 @@ function! s:RunBufDelete(bufnr) abort
3725
3732
endif
3726
3733
if has_key (s: edit_jobs , a: bufnr ) |
3727
3734
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
3730
3745
endif
3731
3746
endfunction
3732
3747
@@ -3940,7 +3955,7 @@ function! fugitive#Command(line1, line2, range, bang, mods, arg, ...) abort
3940
3955
let env.FUGITIVE = state .file
3941
3956
let editor = ' sh ' . s: TempScript (
3942
3957
\ ' [ -f "$FUGITIVE.exit" ] && cat "$FUGITIVE.exit" >&2 && exit 1' ,
3943
- \ ' echo "$1 " > "$FUGITIVE.edit"' ,
3958
+ \ ' for arg; do echo "$arg " >> "$FUGITIVE.edit"; done ' ,
3944
3959
\ ' printf "\033]51;fugitive:edit\007" >&2' ,
3945
3960
\ ' while [ -f "$FUGITIVE.edit" -a ! -f "$FUGITIVE.exit" ]; do sleep 0.05 2>/dev/null || sleep 1; done' ,
3946
3961
\ ' exit 0' )
0 commit comments