|
29 | 29 | ################################################################################
|
30 | 30 |
|
31 | 31 | debug_print () {
|
32 |
| - # Send message to stderr if global variable GIT_MERGETOOL_VIMDIFF is set |
33 |
| - # to "true" |
| 32 | + # Send message to stderr if global variable GIT_MERGETOOL_VIMDIFF_DEBUG |
| 33 | + # is set. |
34 | 34 |
|
35 | 35 | if test -n "$GIT_MERGETOOL_VIMDIFF_DEBUG"
|
36 | 36 | then
|
@@ -66,11 +66,6 @@ gen_cmd_aux () {
|
66 | 66 | debug_print "LAYOUT : $LAYOUT"
|
67 | 67 | debug_print "CMD : $CMD"
|
68 | 68 |
|
69 |
| - if test -z "$CMD" |
70 |
| - then |
71 |
| - CMD="echo" # vim "nop" operator |
72 |
| - fi |
73 |
| - |
74 | 69 | start=0
|
75 | 70 | end=${#LAYOUT}
|
76 | 71 |
|
@@ -144,11 +139,10 @@ gen_cmd_aux () {
|
144 | 139 |
|
145 | 140 | # Step 2:
|
146 | 141 | #
|
147 |
| - # Search for all valid separators ("+", "/" or ",") which are *not* |
| 142 | + # Search for all valid separators ("/" or ",") which are *not* |
148 | 143 | # inside parenthesis. Save the index at which each of them makes the
|
149 | 144 | # first appearance.
|
150 | 145 |
|
151 |
| - index_new_tab="" |
152 | 146 | index_horizontal_split=""
|
153 | 147 | index_vertical_split=""
|
154 | 148 |
|
@@ -182,14 +176,7 @@ gen_cmd_aux () {
|
182 | 176 | then
|
183 | 177 | current=$c
|
184 | 178 |
|
185 |
| - if test "$current" = "+" |
186 |
| - then |
187 |
| - if test -z "$index_new_tab" |
188 |
| - then |
189 |
| - index_new_tab=$i |
190 |
| - fi |
191 |
| - |
192 |
| - elif test "$current" = "/" |
| 179 | + if test "$current" = "/" |
193 | 180 | then
|
194 | 181 | if test -z "$index_horizontal_split"
|
195 | 182 | then
|
@@ -219,14 +206,7 @@ gen_cmd_aux () {
|
219 | 206 |
|
220 | 207 | terminate="false"
|
221 | 208 |
|
222 |
| - if ! test -z "$index_new_tab" |
223 |
| - then |
224 |
| - before="-tabnew" |
225 |
| - after="tabnext" |
226 |
| - index=$index_new_tab |
227 |
| - terminate="true" |
228 |
| - |
229 |
| - elif ! test -z "$index_horizontal_split" |
| 209 | + if ! test -z "$index_horizontal_split" |
230 | 210 | then
|
231 | 211 | before="leftabove split"
|
232 | 212 | after="wincmd j"
|
@@ -333,25 +313,31 @@ gen_cmd () {
|
333 | 313 |
|
334 | 314 | # Obtain the first part of vim "-c" option to obtain the desired layout
|
335 | 315 |
|
336 |
| - CMD=$(gen_cmd_aux "$LAYOUT") |
337 |
| - |
338 |
| - |
339 |
| - # Adjust the just obtained script depending on whether more than one |
340 |
| - # windows are visible or not |
| 316 | + CMD= |
| 317 | + oldIFS=$IFS |
| 318 | + IFS=+ |
| 319 | + for tab in $LAYOUT |
| 320 | + do |
| 321 | + if test -z "$CMD" |
| 322 | + then |
| 323 | + CMD="echo" # vim "nop" operator |
| 324 | + else |
| 325 | + CMD="$CMD | tabnew" |
| 326 | + fi |
341 | 327 |
|
342 |
| - if echo "$LAYOUT" | grep ",\|/" >/dev/null |
343 |
| - then |
344 |
| - CMD="$CMD | tabdo windo diffthis" |
345 |
| - else |
346 |
| - CMD="$CMD | bufdo diffthis" |
347 |
| - fi |
| 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 |
348 | 333 |
|
| 334 | + CMD=$(gen_cmd_aux "$tab" "$CMD") |
| 335 | + done |
| 336 | + IFS=$oldIFS |
349 | 337 |
|
350 |
| - # Add an extra "-c" option to move to the first tab (notice that we |
351 |
| - # can't simply append the command to the previous "-c" string as |
352 |
| - # explained here: https://github.com/vim/vim/issues/9076 |
| 338 | + CMD="$CMD | execute 'tabdo windo diffthis'" |
353 | 339 |
|
354 |
| - FINAL_CMD="-c \"$CMD\" -c \"tabfirst\"" |
| 340 | + FINAL_CMD="-c \"set hidden diffopt-=hiddenoff | $CMD | tabfirst\"" |
355 | 341 | }
|
356 | 342 |
|
357 | 343 |
|
@@ -555,22 +541,22 @@ run_unit_tests () {
|
555 | 541 | TEST_CASE_15=" (( (LOCAL , BASE , REMOTE) / MERGED)) +(BASE) , LOCAL+ BASE , REMOTE+ (((LOCAL / BASE / REMOTE)) , MERGED ) "
|
556 | 542 | TEST_CASE_16="LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL / BASE / REMOTE),MERGED"
|
557 | 543 |
|
558 |
| - EXPECTED_CMD_01="-c \"echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
559 |
| - EXPECTED_CMD_02="-c \"echo | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\"" |
560 |
| - EXPECTED_CMD_03="-c \"echo | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 4b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\"" |
561 |
| - EXPECTED_CMD_04="-c \"echo | 4b | bufdo diffthis\" -c \"tabfirst\"" |
562 |
| - EXPECTED_CMD_05="-c \"echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | tabdo windo diffthis\" -c \"tabfirst\"" |
563 |
| - EXPECTED_CMD_06="-c \"echo | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
564 |
| - EXPECTED_CMD_07="-c \"echo | leftabove vertical split | 4b | wincmd l | leftabove split | 1b | wincmd j | 3b | tabdo windo diffthis\" -c \"tabfirst\"" |
565 |
| - EXPECTED_CMD_08="-c \"echo | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
566 |
| - EXPECTED_CMD_09="-c \"echo | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\"" |
567 |
| - EXPECTED_CMD_10="-c \"echo | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
568 |
| - EXPECTED_CMD_11="-c \"echo | -tabnew | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | leftabove vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnext | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
569 |
| - EXPECTED_CMD_12="-c \"echo | leftabove vertical split | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
570 |
| - EXPECTED_CMD_13="-c \"echo | leftabove vertical split | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
571 |
| - EXPECTED_CMD_14="-c \"echo | -tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnext | leftabove vertical split | 2b | wincmd l | 1b | tabdo windo diffthis\" -c \"tabfirst\"" |
572 |
| - EXPECTED_CMD_15="-c \"echo | -tabnew | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | leftabove vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnext | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
573 |
| - EXPECTED_CMD_16="-c \"echo | -tabnew | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | leftabove vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnext | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
| 544 | + 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 | execute 'tabdo windo diffthis' | tabfirst\"" |
| 545 | + EXPECTED_CMD_02="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 1b | wincmd l | 3b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 546 | + EXPECTED_CMD_03="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 4b | wincmd l | 3b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 547 | + EXPECTED_CMD_04="-c \"set hidden diffopt-=hiddenoff | echo | silent execute 'bufdo diffthis' | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 548 | + EXPECTED_CMD_05="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 549 | + EXPECTED_CMD_06="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 550 | + EXPECTED_CMD_07="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 4b | wincmd l | leftabove split | 1b | wincmd j | 3b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 551 | + EXPECTED_CMD_08="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 552 | + EXPECTED_CMD_09="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 553 | + EXPECTED_CMD_10="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 554 | + EXPECTED_CMD_11="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnew | leftabove vertical split | 2b | wincmd l | 1b | tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnew | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 555 | + EXPECTED_CMD_12="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 556 | + EXPECTED_CMD_13="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 557 | + EXPECTED_CMD_14="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 2b | wincmd l | 3b | tabnew | leftabove vertical split | 2b | wincmd l | 1b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 558 | + EXPECTED_CMD_15="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnew | leftabove vertical split | 2b | wincmd l | 1b | tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnew | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 559 | + EXPECTED_CMD_16="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnew | leftabove vertical split | 2b | wincmd l | 1b | tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnew | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
574 | 560 |
|
575 | 561 | EXPECTED_TARGET_01="MERGED"
|
576 | 562 | EXPECTED_TARGET_02="LOCAL"
|
@@ -635,9 +621,7 @@ run_unit_tests () {
|
635 | 621 | cat >expect <<-\EOF
|
636 | 622 | -f
|
637 | 623 | -c
|
638 |
| - echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | quit | wincmd l | 2b | wincmd j | 3b | tabdo windo diffthis |
639 |
| - -c |
640 |
| - tabfirst |
| 624 | + set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | quit | wincmd l | 2b | wincmd j | 3b | execute 'tabdo windo diffthis' | tabfirst |
641 | 625 | lo cal
|
642 | 626 | ' '
|
643 | 627 | mer ged
|
|
0 commit comments