mergetools: vimdiff: fix single window layouts
Layouts with a single window other than "MERGED" do not work (e.g. "LOCAL" or "MERGED+LOCAL"). This is because as the documentation of bufdo says: The last buffer (or where an error occurred) becomes the current buffer. And we do always do bufdo the end. Additionally, we do it only once, when it should be per tab. Fix this by doing it once per tab right after it's created and before any buffer is switched. Cc: Fernando Ramos <greenfoo@u92.eu> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Reviewed-by: Fernando Ramos <greenfoo@u92.eu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Felipe Contreras committed
Aug 10, 2022 at 10:46 UTC
b6014eeac0963ccad3f769fc6cdd09a4a64f478d
1 file changed
+8
-12
mergetools/vimdiff
+8
-12
@@ -325,21 +325,17 @@ gen_cmd () {
325
CMD="$CMD | tabnew"
326
fi
327
328
+ # If this is a single window diff with all the buffers
329
+ if ! echo "$tab" | grep ",\|/" >/dev/null
330
+ then
331
+ CMD="$CMD | silent execute 'bufdo diffthis'"
332
+ fi
333
+
334
CMD=$(gen_cmd_aux "$tab" "$CMD")
335
done
336
IFS=$oldIFS
337
332
-
333
- # Adjust the just obtained script depending on whether more than one
334
- # windows are visible or not
335
-
336
- if echo "$LAYOUT" | grep ",\|/" >/dev/null
337
- then
338
- CMD="$CMD | tabdo windo diffthis"
339
- else
340
- CMD="$CMD | silent bufdo diffthis"
341
- fi
342
-
338
+ CMD="$CMD | tabdo windo diffthis"
339
340
# Add an extra "-c" option to move to the first tab (notice that we
341
# can't simply append the command to the previous "-c" string as
@@ -552,7 +548,7 @@ run_unit_tests () {
548
EXPECTED_CMD_01="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\" -c \"tabfirst\""
549
EXPECTED_CMD_02="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\""
550
EXPECTED_CMD_03="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 4b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\""
555
- EXPECTED_CMD_04="-c \"set hidden diffopt-=hiddenoff | echo | 4b | silent bufdo diffthis\" -c \"tabfirst\""
551
+ EXPECTED_CMD_04="-c \"set hidden diffopt-=hiddenoff | echo | silent execute 'bufdo diffthis' | 4b | tabdo windo diffthis\" -c \"tabfirst\""
552
EXPECTED_CMD_05="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | tabdo windo diffthis\" -c \"tabfirst\""
553
EXPECTED_CMD_06="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\""
554
EXPECTED_CMD_07="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 4b | wincmd l | leftabove split | 1b | wincmd j | 3b | tabdo windo diffthis\" -c \"tabfirst\""