{"thread":{"id":"58281","subject":"[PATCH v3 0/7] mergetools: vimdiff: regression fixes and improvements","startedAt":"2022-08-09T00:45:57Z","lastAt":"2022-08-10T18:29:43Z","messageCount":13,"participants":["Felipe Contreras","Fernando Ramos","Junio C Hamano"],"isPatch":true,"patchVersion":3,"patchTotal":7},"messages":[{"id":"460860","messageId":"20220809004549.123020-1-felipe.contreras@gmail.com","threadId":"58281","inReplyTo":null,"subject":"[PATCH v3 0/7] mergetools: vimdiff: regression fixes and improvements","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2022-08-09T00:45:42Z","receivedAt":"2022-08-09T00:45:57Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"Hello,\n\nI wrote vimdiff3 to leverage both the power of git's diff3 and vim's\ndiff mode, but commit 0041797449 broke that.\n\nHere you can see how it used to work:\n\nhttps://i.snipboard.io/hSdfkj.jpg\n\nThe added and changed lines are properly highlighted.\n\nAfter I fix the conflicts vim still properly highlights which lines were\nchanged, and even what specific characters were modified:\n\nhttps://i.snipboard.io/HvpULI.jpg\n\nNow I get absolutely nothing:\n\nhttps://i.snipboard.io/HXMui4.jpg\n\nAdditionally, every time I run the command I get an annoying message:\n\n  \"./content_LOCAL_8975\" 6L, 28B\n  \"./content_BASE_8975\" 6 lines, 29 bytes\n  \"./content_REMOTE_8975\" 6 lines, 29 bytes\n  \"content\" 16 lines, 115 bytes\n  Press ENTER or type command to continue\n\nBecause that's what `bufdo` does.\n\nSince v2 there's a lot more reorganization in order to deal with cases\nFernando Ramos mentioned.\n\nFelipe Contreras (7):\n  mergetools: vimdiff: fix comment\n  mergetools: vimdiff: make vimdiff3 actually work\n  mergetools: vimdiff: silence annoying messages\n  mergetools: vimdiff: fix for diffopt\n  mergetools: vimdiff: fix single window layouts\n  mergetools: vimdiff: rework tab logic\n  mergetools: vimdiff: restore selective diff mode\n\n mergetools/vimdiff | 96 ++++++++++++++++++++++------------------------\n 1 file changed, 45 insertions(+), 51 deletions(-)\n\nRange-diff against v2:\n 1:  20c5abdbc8 =  1:  20c5abdbc8 mergetools: vimdiff: fix comment\n 2:  e6c860d2be <  -:  ---------- mergetools: vimdiff: shuffle single window case\n 3:  bdf1e919a5 <  -:  ---------- mergetools: vimdiff: add get_buf() helper\n 4:  c5e21e3049 <  -:  ---------- mergetools: vimdiff: make vimdiff3 actually work\n 5:  2bf45c882d <  -:  ---------- mergetools: vimdiff: silence annoying messages\n 6:  77a67628e7 <  -:  ---------- mergetools: vimdiff: fix for diffopt\n 7:  adc9d18f2b <  -:  ---------- mergetools: vimdiff: cleanup cruft\n 8:  fe7fb1a018 <  -:  ---------- mergetools: vimdiff: fix single window mode\n 9:  15765aa9d2 <  -:  ---------- mergetools: vimdiff: use vimdiff for vimdiff3\n -:  ---------- >  2:  8d466e06aa mergetools: vimdiff: make vimdiff3 actually work\n -:  ---------- >  3:  95bfab5813 mergetools: vimdiff: silence annoying messages\n -:  ---------- >  4:  08f6b2bce2 mergetools: vimdiff: fix for diffopt\n -:  ---------- >  5:  2bff74f499 mergetools: vimdiff: fix single window layouts\n -:  ---------- >  6:  39e8277317 mergetools: vimdiff: rework tab logic\n -:  ---------- >  7:  92df35208d mergetools: vimdiff: restore selective diff mode\n-- \n2.37.1\n\n"},{"id":"460861","messageId":"20220809004549.123020-2-felipe.contreras@gmail.com","threadId":"58281","inReplyTo":"20220809004549.123020-1-felipe.contreras@gmail.com","subject":"[PATCH v3 1/7] mergetools: vimdiff: fix comment","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2022-08-09T00:45:43Z","receivedAt":"2022-08-09T00:46:00Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"The name of the variable is wrong, and it can be set to anything, like\n1.\n\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n mergetools/vimdiff | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/mergetools/vimdiff b/mergetools/vimdiff\nindex f770b8fe24..ea416adcaa 100644\n--- a/mergetools/vimdiff\n+++ b/mergetools/vimdiff\n@@ -29,8 +29,8 @@\n ################################################################################\n \n debug_print () {\n-\t# Send message to stderr if global variable GIT_MERGETOOL_VIMDIFF is set\n-\t# to \"true\"\n+\t# Send message to stderr if global variable GIT_MERGETOOL_VIMDIFF_DEBUG\n+\t# is set.\n \n \tif test -n \"$GIT_MERGETOOL_VIMDIFF_DEBUG\"\n \tthen\n-- \n2.37.1\n\n"},{"id":"460862","messageId":"20220809004549.123020-3-felipe.contreras@gmail.com","threadId":"58281","inReplyTo":"20220809004549.123020-1-felipe.contreras@gmail.com","subject":"[PATCH v3 2/7] mergetools: vimdiff: make vimdiff3 actually work","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2022-08-09T00:45:44Z","receivedAt":"2022-08-09T00:46:01Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"When vimdiff3 was added in 7c147b77d3 (mergetools: add vimdiff3 mode,\n2014-04-20), the description made clear the intention:\n\n    It's similar to the default, except that the other windows are\n    hidden.  This ensures that removed/added colors are still visible on\n    the main merge window, but the other windows not visible.\n\nHowever, in 0041797449 (vimdiff: new implementation with layout support,\n2022-03-30) this was broken by generating a command that never creates\nwindows, and therefore vim never shows the diff.\n\nIn order to show the diff, the windows need to be created first, and\nthen when they are hidden the diff remains (if hidenoff isn't set).\n\nThe layout support implementation broke the whole purpose of vimdiff3,\nand simply shows MERGED, which is no different from simply opening the\nfile with vim.\n\nSetting the `hidden` option makes it work as intended.\n\nSuggested-by: Fernando Ramos <greenfoo@u92.eu>\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n mergetools/vimdiff | 36 ++++++++++++++++++------------------\n 1 file changed, 18 insertions(+), 18 deletions(-)\n\ndiff --git a/mergetools/vimdiff b/mergetools/vimdiff\nindex ea416adcaa..95d637b997 100644\n--- a/mergetools/vimdiff\n+++ b/mergetools/vimdiff\n@@ -351,7 +351,7 @@ gen_cmd () {\n \t# can't simply append the command to the previous \"-c\" string as\n \t# explained here: https://github.com/vim/vim/issues/9076\n \n-\tFINAL_CMD=\"-c \\\"$CMD\\\" -c \\\"tabfirst\\\"\"\n+\tFINAL_CMD=\"-c \\\"set hidden | $CMD\\\" -c \\\"tabfirst\\\"\"\n }\n \n \n@@ -555,22 +555,22 @@ run_unit_tests () {\n \tTEST_CASE_15=\"  ((  (LOCAL , BASE , REMOTE) / MERGED))   +(BASE)   , LOCAL+ BASE , REMOTE+ (((LOCAL / BASE / REMOTE)) ,    MERGED   )  \"\n \tTEST_CASE_16=\"LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL / BASE / REMOTE),MERGED\"\n \n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_CMD_02=\"-c \\\"echo | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_03=\"-c \\\"echo | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 4b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_04=\"-c \\\"echo | 4b | bufdo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_05=\"-c \\\"echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_06=\"-c \\\"echo | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_07=\"-c \\\"echo | leftabove vertical split | 4b | wincmd l | leftabove split | 1b | wincmd j | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_08=\"-c \\\"echo | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_09=\"-c \\\"echo | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n+\tEXPECTED_CMD_01=\"-c \\\"set hidden | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_02=\"-c \\\"set hidden | echo | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_03=\"-c \\\"set hidden | echo | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 4b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_04=\"-c \\\"set hidden | echo | 4b | bufdo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_05=\"-c \\\"set hidden | echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_06=\"-c \\\"set hidden | echo | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_07=\"-c \\\"set hidden | echo | leftabove vertical split | 4b | wincmd l | leftabove split | 1b | wincmd j | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_08=\"-c \\\"set hidden | echo | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_09=\"-c \\\"set hidden | echo | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_10=\"-c \\\"set hidden | echo | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_11=\"-c \\\"set hidden | 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\\\"\"\n+\tEXPECTED_CMD_12=\"-c \\\"set hidden | echo | leftabove vertical split | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_13=\"-c \\\"set hidden | 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\\\"\"\n+\tEXPECTED_CMD_14=\"-c \\\"set hidden | echo | -tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnext | leftabove vertical split | 2b | wincmd l | 1b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_15=\"-c \\\"set hidden | 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\\\"\"\n+\tEXPECTED_CMD_16=\"-c \\\"set hidden | 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\\\"\"\n \n \tEXPECTED_TARGET_01=\"MERGED\"\n \tEXPECTED_TARGET_02=\"LOCAL\"\n@@ -635,7 +635,7 @@ run_unit_tests () {\n \tcat >expect <<-\\EOF\n \t-f\n \t-c\n-\techo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | quit | wincmd l | 2b | wincmd j | 3b | tabdo windo diffthis\n+\tset hidden | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | quit | wincmd l | 2b | wincmd j | 3b | tabdo windo diffthis\n \t-c\n \ttabfirst\n \tlo cal\n-- \n2.37.1\n\n"},{"id":"460863","messageId":"20220809004549.123020-4-felipe.contreras@gmail.com","threadId":"58281","inReplyTo":"20220809004549.123020-1-felipe.contreras@gmail.com","subject":"[PATCH v3 3/7] mergetools: vimdiff: silence annoying messages","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2022-08-09T00:45:45Z","receivedAt":"2022-08-09T00:46:03Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"When using the single window mode we are greeted with the following\nwarning:\n\n  \"./content_LOCAL_8975\" 6L, 28B\n  \"./content_BASE_8975\" 6 lines, 29 bytes\n  \"./content_REMOTE_8975\" 6 lines, 29 bytes\n  \"content\" 16 lines, 115 bytes\n  Press ENTER or type command to continue\n\nevery time.\n\nSilence that.\n\nSuggested-by: Fernando Ramos <greenfoo@u92.eu>\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n mergetools/vimdiff | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/mergetools/vimdiff b/mergetools/vimdiff\nindex 95d637b997..06a7b38841 100644\n--- a/mergetools/vimdiff\n+++ b/mergetools/vimdiff\n@@ -343,7 +343,7 @@ gen_cmd () {\n \tthen\n \t\tCMD=\"$CMD | tabdo windo diffthis\"\n \telse\n-\t\tCMD=\"$CMD | bufdo diffthis\"\n+\t\tCMD=\"$CMD | silent bufdo diffthis\"\n \tfi\n \n \n@@ -558,7 +558,7 @@ run_unit_tests () {\n \tEXPECTED_CMD_01=\"-c \\\"set hidden | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n \tEXPECTED_CMD_02=\"-c \\\"set hidden | echo | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n \tEXPECTED_CMD_03=\"-c \\\"set hidden | echo | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 4b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_04=\"-c \\\"set hidden | echo | 4b | bufdo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_04=\"-c \\\"set hidden | echo | 4b | silent bufdo diffthis\\\" -c \\\"tabfirst\\\"\"\n \tEXPECTED_CMD_05=\"-c \\\"set hidden | echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n \tEXPECTED_CMD_06=\"-c \\\"set hidden | echo | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n \tEXPECTED_CMD_07=\"-c \\\"set hidden | echo | leftabove vertical split | 4b | wincmd l | leftabove split | 1b | wincmd j | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-- \n2.37.1\n\n"},{"id":"460864","messageId":"20220809004549.123020-5-felipe.contreras@gmail.com","threadId":"58281","inReplyTo":"20220809004549.123020-1-felipe.contreras@gmail.com","subject":"[PATCH v3 4/7] mergetools: vimdiff: fix for diffopt","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2022-08-09T00:45:46Z","receivedAt":"2022-08-09T00:46:10Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"When diffopt has hiddenoff set and there's only one window (as is the\ncase in the single window mode) the diff mode is turned off.\n\nWe don't want that, so turn that option off.\n\nCc: Fernando Ramos <greenfoo@u92.eu>\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n mergetools/vimdiff | 36 ++++++++++++++++++------------------\n 1 file changed, 18 insertions(+), 18 deletions(-)\n\ndiff --git a/mergetools/vimdiff b/mergetools/vimdiff\nindex 06a7b38841..2ecac41231 100644\n--- a/mergetools/vimdiff\n+++ b/mergetools/vimdiff\n@@ -351,7 +351,7 @@ gen_cmd () {\n \t# can't simply append the command to the previous \"-c\" string as\n \t# explained here: https://github.com/vim/vim/issues/9076\n \n-\tFINAL_CMD=\"-c \\\"set hidden | $CMD\\\" -c \\\"tabfirst\\\"\"\n+\tFINAL_CMD=\"-c \\\"set hidden diffopt-=hiddenoff | $CMD\\\" -c \\\"tabfirst\\\"\"\n }\n \n \n@@ -555,22 +555,22 @@ run_unit_tests () {\n \tTEST_CASE_15=\"  ((  (LOCAL , BASE , REMOTE) / MERGED))   +(BASE)   , LOCAL+ BASE , REMOTE+ (((LOCAL / BASE / REMOTE)) ,    MERGED   )  \"\n \tTEST_CASE_16=\"LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL / BASE / REMOTE),MERGED\"\n \n-\tEXPECTED_CMD_01=\"-c \\\"set hidden | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_02=\"-c \\\"set hidden | echo | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_03=\"-c \\\"set hidden | echo | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 4b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_04=\"-c \\\"set hidden | echo | 4b | silent bufdo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_05=\"-c \\\"set hidden | echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_06=\"-c \\\"set hidden | echo | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_07=\"-c \\\"set hidden | echo | leftabove vertical split | 4b | wincmd l | leftabove split | 1b | wincmd j | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_08=\"-c \\\"set hidden | echo | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_09=\"-c \\\"set hidden | echo | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_10=\"-c \\\"set hidden | echo | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_11=\"-c \\\"set hidden | 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\\\"\"\n-\tEXPECTED_CMD_12=\"-c \\\"set hidden | echo | leftabove vertical split | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_13=\"-c \\\"set hidden | 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\\\"\"\n-\tEXPECTED_CMD_14=\"-c \\\"set hidden | echo | -tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnext | leftabove vertical split | 2b | wincmd l | 1b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_15=\"-c \\\"set hidden | 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\\\"\"\n-\tEXPECTED_CMD_16=\"-c \\\"set hidden | 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\\\"\"\n+\tEXPECTED_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\\\"\"\n+\tEXPECTED_CMD_02=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_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\\\"\"\n+\tEXPECTED_CMD_04=\"-c \\\"set hidden diffopt-=hiddenoff | echo | 4b | silent bufdo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_05=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_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\\\"\"\n+\tEXPECTED_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\\\"\"\n+\tEXPECTED_CMD_08=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_09=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_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 | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_11=\"-c \\\"set hidden diffopt-=hiddenoff | 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\\\"\"\n+\tEXPECTED_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 | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_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 | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_14=\"-c \\\"set hidden diffopt-=hiddenoff | echo | -tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnext | leftabove vertical split | 2b | wincmd l | 1b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_15=\"-c \\\"set hidden diffopt-=hiddenoff | 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\\\"\"\n+\tEXPECTED_CMD_16=\"-c \\\"set hidden diffopt-=hiddenoff | 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\\\"\"\n \n \tEXPECTED_TARGET_01=\"MERGED\"\n \tEXPECTED_TARGET_02=\"LOCAL\"\n@@ -635,7 +635,7 @@ run_unit_tests () {\n \tcat >expect <<-\\EOF\n \t-f\n \t-c\n-\tset hidden | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | quit | wincmd l | 2b | wincmd j | 3b | tabdo windo diffthis\n+\tset hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | quit | wincmd l | 2b | wincmd j | 3b | tabdo windo diffthis\n \t-c\n \ttabfirst\n \tlo cal\n-- \n2.37.1\n\n"},{"id":"460865","messageId":"20220809004549.123020-7-felipe.contreras@gmail.com","threadId":"58281","inReplyTo":"20220809004549.123020-1-felipe.contreras@gmail.com","subject":"[PATCH v3 6/7] mergetools: vimdiff: rework tab logic","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2022-08-09T00:45:48Z","receivedAt":"2022-08-09T00:46:12Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"If we treat tabs especially, the logic becomes much simpler.\n\nCc: Fernando Ramos <greenfoo@u92.eu>\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n mergetools/vimdiff | 39 ++++++++++++++++-----------------------\n 1 file changed, 16 insertions(+), 23 deletions(-)\n\ndiff --git a/mergetools/vimdiff b/mergetools/vimdiff\nindex 64a8fe170d..8029be0975 100644\n--- a/mergetools/vimdiff\n+++ b/mergetools/vimdiff\n@@ -144,11 +144,10 @@ gen_cmd_aux () {\n \n \t# Step 2:\n \t#\n-\t# Search for all valid separators (\"+\", \"/\" or \",\") which are *not*\n+\t# Search for all valid separators (\"/\" or \",\") which are *not*\n \t# inside parenthesis. Save the index at which each of them makes the\n \t# first appearance.\n \n-\tindex_new_tab=\"\"\n \tindex_horizontal_split=\"\"\n \tindex_vertical_split=\"\"\n \n@@ -182,14 +181,7 @@ gen_cmd_aux () {\n \t\tthen\n \t\t\tcurrent=$c\n \n-\t\t\tif test \"$current\" = \"+\"\n-\t\t\tthen\n-\t\t\t\tif test -z \"$index_new_tab\"\n-\t\t\t\tthen\n-\t\t\t\t\tindex_new_tab=$i\n-\t\t\t\tfi\n-\n-\t\t\telif test \"$current\" = \"/\"\n+\t\t\tif test \"$current\" = \"/\"\n \t\t\tthen\n \t\t\t\tif test -z \"$index_horizontal_split\"\n \t\t\t\tthen\n@@ -219,14 +211,7 @@ gen_cmd_aux () {\n \n \tterminate=\"false\"\n \n-\tif ! test -z \"$index_new_tab\"\n-\tthen\n-\t\tbefore=\"-tabnew | silent execute 'bufdo diffthis'\"\n-\t\tafter=\"tabnext\"\n-\t\tindex=$index_new_tab\n-\t\tterminate=\"true\"\n-\n-\telif ! test -z \"$index_horizontal_split\"\n+\tif ! test -z \"$index_horizontal_split\"\n \tthen\n \t\tbefore=\"leftabove split\"\n \t\tafter=\"wincmd j\"\n@@ -333,7 +318,15 @@ gen_cmd () {\n \n \t# Obtain the first part of vim \"-c\" option to obtain the desired layout\n \n-\tCMD=$(gen_cmd_aux \"$LAYOUT\")\n+\tCMD=\n+\toldIFS=$IFS\n+\tIFS=+\n+\tfor tab in $LAYOUT\n+\tdo\n+\t\ttest -n \"$CMD\" && CMD=\"$CMD | tabnew | silent execute 'bufdo diffthis'\"\n+\t\tCMD=$(gen_cmd_aux \"$tab\" \"$CMD\")\n+\tdone\n+\tIFS=$oldIFS\n \n \n \t# Add an extra \"-c\" option to move to the first tab (notice that we\n@@ -554,12 +547,12 @@ run_unit_tests () {\n \tEXPECTED_CMD_08=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b\\\" -c \\\"tabfirst\\\"\"\n \tEXPECTED_CMD_09=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b\\\" -c \\\"tabfirst\\\"\"\n \tEXPECTED_CMD_10=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_11=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | -tabnew | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | silent execute 'bufdo diffthis' | 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\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_11=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 1b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 3b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b\\\" -c \\\"tabfirst\\\"\"\n \tEXPECTED_CMD_12=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | 4b\\\" -c \\\"tabfirst\\\"\"\n \tEXPECTED_CMD_13=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | 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\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_14=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | -tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 3b | tabnext | leftabove vertical split | 2b | wincmd l | 1b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_15=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | -tabnew | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | silent execute 'bufdo diffthis' | 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\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_16=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | -tabnew | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | silent execute 'bufdo diffthis' | 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\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_14=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 3b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 1b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_15=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 1b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 3b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_16=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 1b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 3b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b\\\" -c \\\"tabfirst\\\"\"\n \n \tEXPECTED_TARGET_01=\"MERGED\"\n \tEXPECTED_TARGET_02=\"LOCAL\"\n-- \n2.37.1\n\n"},{"id":"460866","messageId":"20220809004549.123020-6-felipe.contreras@gmail.com","threadId":"58281","inReplyTo":"20220809004549.123020-1-felipe.contreras@gmail.com","subject":"[PATCH v3 5/7] mergetools: vimdiff: fix single window layouts","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2022-08-09T00:45:47Z","receivedAt":"2022-08-09T00:46:13Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"Layouts with a single window other than \"MERGED\" do not work (e.g.\n\"LOCAL\" or \"MERGED+LOCAL\").\n\nThis is because as the documentation of bufdo says:\n\n    The last buffer (or where an error occurred) becomes the current\n    buffer.\n\nAnd we do always do bufdo the end.\n\nAdditionally, we do it only once, when it should be per tab.\n\nThere's no need to enable the diff mode differently depending on the\nlayout: we can enable it the same way for all cases by doing\n`bufdo diffthis` before doing anything else.\n\nIf we do this on every tab, then all the windows in the tab will have\ndiff mode enabled against all buffers, which is what we want, and in\nsingle window tabs, the desired buffer will remain.\n\nThis way a multi-window layout like \"MERGED,REMOTE\" behaves the same way\nas \"MERGED\" after closing the \"REMOTE\" window. A consistent behavior is\nclearly what most users would want.\n\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n mergetools/vimdiff | 49 ++++++++++++++++++----------------------------\n 1 file changed, 19 insertions(+), 30 deletions(-)\n\ndiff --git a/mergetools/vimdiff b/mergetools/vimdiff\nindex 2ecac41231..64a8fe170d 100644\n--- a/mergetools/vimdiff\n+++ b/mergetools/vimdiff\n@@ -68,7 +68,7 @@ gen_cmd_aux () {\n \n \tif test -z \"$CMD\"\n \tthen\n-\t\tCMD=\"echo\" # vim \"nop\" operator\n+\t\tCMD=\"silent execute 'bufdo diffthis'\"\n \tfi\n \n \tstart=0\n@@ -221,7 +221,7 @@ gen_cmd_aux () {\n \n \tif ! test -z \"$index_new_tab\"\n \tthen\n-\t\tbefore=\"-tabnew\"\n+\t\tbefore=\"-tabnew | silent execute 'bufdo diffthis'\"\n \t\tafter=\"tabnext\"\n \t\tindex=$index_new_tab\n \t\tterminate=\"true\"\n@@ -336,17 +336,6 @@ gen_cmd () {\n \tCMD=$(gen_cmd_aux \"$LAYOUT\")\n \n \n-\t# Adjust the just obtained script depending on whether more than one\n-\t# windows are visible or not\n-\n-\tif echo \"$LAYOUT\" | grep \",\\|/\" >/dev/null\n-\tthen\n-\t\tCMD=\"$CMD | tabdo windo diffthis\"\n-\telse\n-\t\tCMD=\"$CMD | silent bufdo diffthis\"\n-\tfi\n-\n-\n \t# Add an extra \"-c\" option to move to the first tab (notice that we\n \t# can't simply append the command to the previous \"-c\" string as\n \t# explained here: https://github.com/vim/vim/issues/9076\n@@ -555,22 +544,22 @@ run_unit_tests () {\n \tTEST_CASE_15=\"  ((  (LOCAL , BASE , REMOTE) / MERGED))   +(BASE)   , LOCAL+ BASE , REMOTE+ (((LOCAL / BASE / REMOTE)) ,    MERGED   )  \"\n \tTEST_CASE_16=\"LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL / BASE / REMOTE),MERGED\"\n \n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_CMD_02=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_CMD_04=\"-c \\\"set hidden diffopt-=hiddenoff | echo | 4b | silent bufdo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_05=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_CMD_08=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_09=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_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 | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_11=\"-c \\\"set hidden diffopt-=hiddenoff | 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\\\"\"\n-\tEXPECTED_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 | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_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 | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_14=\"-c \\\"set hidden diffopt-=hiddenoff | echo | -tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnext | leftabove vertical split | 2b | wincmd l | 1b | tabdo windo diffthis\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_15=\"-c \\\"set hidden diffopt-=hiddenoff | 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\\\"\"\n-\tEXPECTED_CMD_16=\"-c \\\"set hidden diffopt-=hiddenoff | 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\\\"\"\n+\tEXPECTED_CMD_01=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_02=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | 1b | wincmd l | 3b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_03=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 4b | wincmd l | 3b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_04=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | 4b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_05=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_06=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_07=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | 4b | wincmd l | leftabove split | 1b | wincmd j | 3b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_08=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_09=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_10=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_11=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | -tabnew | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | silent execute 'bufdo diffthis' | 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\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_12=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | 4b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_13=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | 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\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_14=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | -tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 3b | tabnext | leftabove vertical split | 2b | wincmd l | 1b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_15=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | -tabnew | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | silent execute 'bufdo diffthis' | 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\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_16=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | -tabnew | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | silent execute 'bufdo diffthis' | 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\\\" -c \\\"tabfirst\\\"\"\n \n \tEXPECTED_TARGET_01=\"MERGED\"\n \tEXPECTED_TARGET_02=\"LOCAL\"\n@@ -635,7 +624,7 @@ run_unit_tests () {\n \tcat >expect <<-\\EOF\n \t-f\n \t-c\n-\tset hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | quit | wincmd l | 2b | wincmd j | 3b | tabdo windo diffthis\n+\tset hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | quit | wincmd l | 2b | wincmd j | 3b\n \t-c\n \ttabfirst\n \tlo cal\n-- \n2.37.1\n\n"},{"id":"460867","messageId":"20220809004549.123020-8-felipe.contreras@gmail.com","threadId":"58281","inReplyTo":"20220809004549.123020-1-felipe.contreras@gmail.com","subject":"[PATCH v3 7/7] mergetools: vimdiff: restore selective diff mode","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2022-08-09T00:45:49Z","receivedAt":"2022-08-09T00:46:15Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"Apparently some people want the diff mode to show differences only on\nthe visible windows, so turn this on only when the tab has more than one\nwindow.\n\nThis should probably be configurable.\n\nCc: Fernando Ramos <greenfoo@u92.eu>\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n mergetools/vimdiff | 50 ++++++++++++++++++++++++++++------------------\n 1 file changed, 31 insertions(+), 19 deletions(-)\n\ndiff --git a/mergetools/vimdiff b/mergetools/vimdiff\nindex 8029be0975..17921b6ba9 100644\n--- a/mergetools/vimdiff\n+++ b/mergetools/vimdiff\n@@ -68,7 +68,7 @@ gen_cmd_aux () {\n \n \tif test -z \"$CMD\"\n \tthen\n-\t\tCMD=\"silent execute 'bufdo diffthis'\"\n+\t\tCMD=\"echo\"\n \tfi\n \n \tstart=0\n@@ -323,8 +323,20 @@ gen_cmd () {\n \tIFS=+\n \tfor tab in $LAYOUT\n \tdo\n-\t\ttest -n \"$CMD\" && CMD=\"$CMD | tabnew | silent execute 'bufdo diffthis'\"\n-\t\tCMD=$(gen_cmd_aux \"$tab\" \"$CMD\")\n+\t\tif echo \"$tab\" | grep \",\\|/\" >/dev/null\n+\t\tthen\n+\t\t\ttest -n \"$CMD\" && CMD=\"$CMD | tabnew\"\n+\t\t\tCMD=$(gen_cmd_aux \"$tab\" \"$CMD\")\n+\t\t\tCMD=\"$CMD | execute 'windo diffthis'\"\n+\t\telse\n+\t\t\tif test -z \"$CMD\"\n+\t\t\tthen\n+\t\t\t\tCMD=\"silent execute 'bufdo diffthis'\"\n+\t\t\telse\n+\t\t\t\tCMD=\"$CMD | tabnew | silent execute 'bufdo diffthis'\"\n+\t\t\tfi\n+\t\t\tCMD=$(gen_cmd_aux \"$tab\" \"$CMD\")\n+\t\tfi\n \tdone\n \tIFS=$oldIFS\n \n@@ -537,22 +549,22 @@ run_unit_tests () {\n \tTEST_CASE_15=\"  ((  (LOCAL , BASE , REMOTE) / MERGED))   +(BASE)   , LOCAL+ BASE , REMOTE+ (((LOCAL / BASE / REMOTE)) ,    MERGED   )  \"\n \tTEST_CASE_16=\"LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL / BASE / REMOTE),MERGED\"\n \n-\tEXPECTED_CMD_01=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_02=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | 1b | wincmd l | 3b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_03=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 4b | wincmd l | 3b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_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 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_02=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 1b | wincmd l | 3b | execute 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_03=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 4b | wincmd l | 3b | execute 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n \tEXPECTED_CMD_04=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | 4b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_05=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_06=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_07=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | 4b | wincmd l | leftabove split | 1b | wincmd j | 3b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_08=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_09=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_10=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_11=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 1b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 3b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_12=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | 4b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_13=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | 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\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_14=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 3b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 1b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_15=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 1b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 3b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b\\\" -c \\\"tabfirst\\\"\"\n-\tEXPECTED_CMD_16=\"-c \\\"set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 1b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | 2b | wincmd l | 3b | tabnew | silent execute 'bufdo diffthis' | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_05=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | execute 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_06=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | execute 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_07=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 4b | wincmd l | leftabove split | 1b | wincmd j | 3b | execute 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_08=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b | execute 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_09=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b | execute 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_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 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_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 | execute 'windo diffthis' | tabnew | leftabove vertical split | 2b | wincmd l | 1b | execute 'windo diffthis' | tabnew | leftabove vertical split | 2b | wincmd l | 3b | execute 'windo diffthis' | tabnew | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | execute 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_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 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_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 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_CMD_14=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 2b | wincmd l | 3b | execute 'windo diffthis' | tabnew | leftabove vertical split | 2b | wincmd l | 1b | execute 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_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 | execute 'windo diffthis' | tabnew | leftabove vertical split | 2b | wincmd l | 1b | execute 'windo diffthis' | tabnew | leftabove vertical split | 2b | wincmd l | 3b | execute 'windo diffthis' | tabnew | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | execute 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n+\tEXPECTED_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 | execute 'windo diffthis' | tabnew | leftabove vertical split | 2b | wincmd l | 1b | execute 'windo diffthis' | tabnew | leftabove vertical split | 2b | wincmd l | 3b | execute 'windo diffthis' | tabnew | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | execute 'windo diffthis'\\\" -c \\\"tabfirst\\\"\"\n \n \tEXPECTED_TARGET_01=\"MERGED\"\n \tEXPECTED_TARGET_02=\"LOCAL\"\n@@ -617,7 +629,7 @@ run_unit_tests () {\n \tcat >expect <<-\\EOF\n \t-f\n \t-c\n-\tset hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | quit | wincmd l | 2b | wincmd j | 3b\n+\tset hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | quit | wincmd l | 2b | wincmd j | 3b | execute 'windo diffthis'\n \t-c\n \ttabfirst\n \tlo cal\n-- \n2.37.1\n\n"},{"id":"460871","messageId":"CAMP44s2RsvXnt8LtDcv+Ai_kCxmtURGWXmwfchO08dhjMxkGhA@mail.gmail.com","threadId":"58281","inReplyTo":"20220809004549.123020-8-felipe.contreras@gmail.com","subject":"Re: [PATCH v3 7/7] mergetools: vimdiff: restore selective diff mode","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2022-08-09T01:08:16Z","receivedAt":"2022-08-09T01:08:32Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"On Mon, Aug 8, 2022 at 7:46 PM Felipe Contreras\n<felipe.contreras@gmail.com> wrote:\n>\n> Apparently some people want the diff mode to show differences only on\n> the visible windows, so turn this on only when the tab has more than one\n> window.\n\n> @@ -323,8 +323,20 @@ gen_cmd () {\n>         IFS=+\n>         for tab in $LAYOUT\n>         do\n> -               test -n \"$CMD\" && CMD=\"$CMD | tabnew | silent execute 'bufdo diffthis'\"\n> -               CMD=$(gen_cmd_aux \"$tab\" \"$CMD\")\n> +               if echo \"$tab\" | grep \",\\|/\" >/dev/null\n> +               then\n> +                       test -n \"$CMD\" && CMD=\"$CMD | tabnew\"\n> +                       CMD=$(gen_cmd_aux \"$tab\" \"$CMD\")\n> +                       CMD=\"$CMD | execute 'windo diffthis'\"\n> +               else\n> +                       if test -z \"$CMD\"\n> +                       then\n> +                               CMD=\"silent execute 'bufdo diffthis'\"\n> +                       else\n> +                               CMD=\"$CMD | tabnew | silent execute 'bufdo diffthis'\"\n> +                       fi\n> +                       CMD=$(gen_cmd_aux \"$tab\" \"$CMD\")\n> +               fi\n>         done\n>         IFS=$oldIFS\n>\n\nNotice that after reorganizing the tab handling my layout becomes really simple:\n\n  set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | 4b\n\nAnd your layout becomes:\n\n  set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 2b\n| wincmd l | 1b | execute 'windo diffthis' | tabnew | leftabove\nvertical split | 2b | wincmd l | 3b | execute 'windo diffthis'\n\nSo this \"works\" too, right?\n\nCheers.\n\n-- \nFelipe Contreras\n"},{"id":"460876","messageId":"YvHv+EcNyHXCNZhK@zacax395.localdomain","threadId":"58281","inReplyTo":"CAMP44s2RsvXnt8LtDcv+Ai_kCxmtURGWXmwfchO08dhjMxkGhA@mail.gmail.com","subject":"Re: [PATCH v3 7/7] mergetools: vimdiff: restore selective diff mode","fromName":"Fernando Ramos","fromEmail":"greenfoo@u92.eu","sentAt":"2022-08-09T05:26:16Z","receivedAt":"2022-08-09T05:26:29Z","isPatch":true,"sender":{"key":"greenfoo@u92.eu","avatar":"https://avatars.githubusercontent.com/u/42691086?v=4"},"body":"On 22/08/08 08:08PM, Felipe Contreras wrote:\n> \n> Notice that after reorganizing the tab handling my layout becomes really simple:\n> \n>   set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | 4b\n>\n\nThanks! I really like this new approach.\n\nI also manually tested your new series (with and without .vimrc) and it works as\nexpected in all listed test cases.\n\nThis last series gets the best of both worlds:\n\n  - Highglihting works in single window tabs even when there is just one tab\n  \n  - Single tab layouts are not treated differently\n\n  - Generates shorter (easier to understand!) vim command strings (nice!)\n\n  - Opens the gate for a future configuration option that lets you enable \"all\n    buffers diff mode\" even if they are not visible in a given tab (maybe this\n    could be a new syntax token, *, that \"marks\" a tab to work in this mode?)\n\nSo, definitely a great work. Thanks for the deeper look at the problem and this\nbrilliant solution :)\n\n"},{"id":"460947","messageId":"CAMP44s2ucc_i0mxOKAdPkKRV0zp7qQOCrSE_vJJHWcXqwGzGgA@mail.gmail.com","threadId":"58281","inReplyTo":"YvHv+EcNyHXCNZhK@zacax395.localdomain","subject":"Re: [PATCH v3 7/7] mergetools: vimdiff: restore selective diff mode","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2022-08-09T20:07:39Z","receivedAt":"2022-08-09T20:08:06Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"On Tue, Aug 9, 2022 at 12:26 AM Fernando Ramos <greenfoo@u92.eu> wrote:\n>\n> On 22/08/08 08:08PM, Felipe Contreras wrote:\n> >\n> > Notice that after reorganizing the tab handling my layout becomes really simple:\n> >\n> >   set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | 4b\n>\n> Thanks! I really like this new approach.\n>\n> I also manually tested your new series (with and without .vimrc) and it works as\n> expected in all listed test cases.\n>\n> This last series gets the best of both worlds:\n>\n>   - Highglihting works in single window tabs even when there is just one tab\n>\n>   - Single tab layouts are not treated differently\n>\n>   - Generates shorter (easier to understand!) vim command strings (nice!)\n>\n>   - Opens the gate for a future configuration option that lets you enable \"all\n>     buffers diff mode\" even if they are not visible in a given tab (maybe this\n>     could be a new syntax token, *, that \"marks\" a tab to work in this mode?)\n>\n> So, definitely a great work. Thanks for the deeper look at the problem and this\n> brilliant solution :)\n\nIt probably can be cleaned up a bit more, but the important thing is\nthe idea: parse tabs especially (which they are anyway).\n\nNow if only the maintainer cared about fixing the regression that\nwould be great.\n\n-- \nFelipe Contreras\n"},{"id":"460965","messageId":"xmqqmtccpjv8.fsf@gitster.g","threadId":"58281","inReplyTo":"YvHv+EcNyHXCNZhK@zacax395.localdomain","subject":"Re: [PATCH v3 7/7] mergetools: vimdiff: restore selective diff mode","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2022-08-10T08:45:31Z","receivedAt":"2022-08-10T08:45:48Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Fernando Ramos <greenfoo@u92.eu> writes:\n\n> On 22/08/08 08:08PM, Felipe Contreras wrote:\n>> \n>> Notice that after reorganizing the tab handling my layout becomes really simple:\n>> \n>>   set hidden diffopt-=hiddenoff | silent execute 'bufdo diffthis' | 4b\n>>\n>\n> Thanks! I really like this new approach.\n>\n> I also manually tested your new series (with and without .vimrc) and it works as\n> expected in all listed test cases.\n>\n> This last series gets the best of both worlds:\n>\n>   - Highglihting works in single window tabs even when there is just one tab\n>   \n>   - Single tab layouts are not treated differently\n>\n>   - Generates shorter (easier to understand!) vim command strings (nice!)\n>\n>   - Opens the gate for a future configuration option that lets you enable \"all\n>     buffers diff mode\" even if they are not visible in a given tab (maybe this\n>     could be a new syntax token, *, that \"marks\" a tab to work in this mode?)\n>\n> So, definitely a great work. Thanks for the deeper look at the problem and this\n> brilliant solution :)\n\nIs that a \"Reviewed-by:\" I should add while queuing these 7 patches?\n\nThanks, both.\n\n"},{"id":"461014","messageId":"xmqq35e4lzou.fsf@gitster.g","threadId":"58281","inReplyTo":"xmqqmtccpjv8.fsf@gitster.g","subject":"Re: [PATCH v3 7/7] mergetools: vimdiff: restore selective diff mode","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2022-08-10T18:29:37Z","receivedAt":"2022-08-10T18:29:43Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n>> So, definitely a great work. Thanks for the deeper look at the problem and this\n>> brilliant solution :)\n>\n> Is that a \"Reviewed-by:\" I should add while queuing these 7 patches?\n\nAh, sorry, scratch that.  There is a newer round, and that is the\none that can use your input.\n\n> Thanks, both.\n\n"}]}