* [PATCH] vimdiff: make layout engine more robust against user vim settings
@ 2022-07-08 18:10 Fernando Ramos
2022-07-08 18:14 ` Fernando Ramos
2022-07-08 20:15 ` Junio C Hamano
0 siblings, 2 replies; 4+ messages in thread
From: Fernando Ramos @ 2022-07-08 18:10 UTC (permalink / raw)
To: git; +Cc: gitster, mklein994, greenfoo
'vim' has two configuration options ('splitbelow' and 'splitright') that
change the way the 'split' command behaves. When they are set, the
commands that the layout engine generates no longer work as expected.
In order to fix this we can append special keyword 'letfabove' to each
'split' and 'vertical split' subcommand found inside the command string
generated by the layout engine.
This works because whatever comes after 'leftabove' will temporally
ignore settings 'splitbelow' and 'splitright'.
Reported-by: Matthew Klein <mklein994@gmail.com>
Signed-off-by: Fernando Ramos <greenfoo@u92.eu>
---
mergetools/vimdiff | 36 ++++++++++++++++++------------------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/mergetools/vimdiff b/mergetools/vimdiff
index 461a89b6f9..b045b10fd7 100644
--- a/mergetools/vimdiff
+++ b/mergetools/vimdiff
@@ -228,14 +228,14 @@ gen_cmd_aux () {
elif ! test -z "$index_horizontal_split"
then
- before="split"
+ before="leftabove split"
after="wincmd j"
index=$index_horizontal_split
terminate="true"
elif ! test -z "$index_vertical_split"
then
- before="vertical split"
+ before="leftabove vertical split"
after="wincmd l"
index=$index_vertical_split
terminate="true"
@@ -310,7 +310,7 @@ gen_cmd () {
#
# gen_cmd "@LOCAL , REMOTE"
# |
- # `-> FINAL_CMD == "-c \"echo | vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\""
+ # `-> FINAL_CMD == "-c \"echo | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\""
# FINAL_TARGET == "LOCAL"
LAYOUT=$1
@@ -555,22 +555,22 @@ run_unit_tests () {
TEST_CASE_15=" (( (LOCAL , BASE , REMOTE) / MERGED)) +(BASE) , LOCAL+ BASE , REMOTE+ (((LOCAL / BASE / REMOTE)) , MERGED ) "
TEST_CASE_16="LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL / BASE / REMOTE),MERGED"
- EXPECTED_CMD_01="-c \"echo | split | vertical split | 1b | wincmd l | vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\" -c \"tabfirst\""
- EXPECTED_CMD_02="-c \"echo | vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\""
- EXPECTED_CMD_03="-c \"echo | vertical split | 1b | wincmd l | vertical split | 4b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\""
+ 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\""
+ EXPECTED_CMD_02="-c \"echo | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\""
+ EXPECTED_CMD_03="-c \"echo | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 4b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\""
EXPECTED_CMD_04="-c \"echo | 4b | bufdo diffthis\" -c \"tabfirst\""
- EXPECTED_CMD_05="-c \"echo | split | 1b | wincmd j | split | 4b | wincmd j | 3b | tabdo windo diffthis\" -c \"tabfirst\""
- EXPECTED_CMD_06="-c \"echo | vertical split | split | 1b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\""
- EXPECTED_CMD_07="-c \"echo | vertical split | 4b | wincmd l | split | 1b | wincmd j | 3b | tabdo windo diffthis\" -c \"tabfirst\""
- EXPECTED_CMD_08="-c \"echo | split | vertical split | 1b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\" -c \"tabfirst\""
- EXPECTED_CMD_09="-c \"echo | split | 4b | wincmd j | vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\""
- EXPECTED_CMD_10="-c \"echo | vertical split | split | 1b | wincmd j | split | 2b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\""
- EXPECTED_CMD_11="-c \"echo | -tabnew | split | vertical split | 1b | wincmd l | vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | vertical split | 2b | wincmd l | 3b | tabnext | vertical split | split | 1b | wincmd j | split | 2b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\""
- EXPECTED_CMD_12="-c \"echo | vertical split | split | vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\""
- EXPECTED_CMD_13="-c \"echo | vertical split | split | vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | vertical split | split | 1b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\""
- EXPECTED_CMD_14="-c \"echo | -tabnew | vertical split | 2b | wincmd l | 3b | tabnext | vertical split | 2b | wincmd l | 1b | tabdo windo diffthis\" -c \"tabfirst\""
- EXPECTED_CMD_15="-c \"echo | -tabnew | split | vertical split | 1b | wincmd l | vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | vertical split | 2b | wincmd l | 3b | tabnext | vertical split | split | 1b | wincmd j | split | 2b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\""
- EXPECTED_CMD_16="-c \"echo | -tabnew | split | vertical split | 1b | wincmd l | vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | vertical split | 2b | wincmd l | 3b | tabnext | vertical split | split | 1b | wincmd j | split | 2b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\""
+ EXPECTED_CMD_05="-c \"echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | tabdo windo diffthis\" -c \"tabfirst\""
+ EXPECTED_CMD_06="-c \"echo | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\""
+ EXPECTED_CMD_07="-c \"echo | leftabove vertical split | 4b | wincmd l | leftabove split | 1b | wincmd j | 3b | tabdo windo diffthis\" -c \"tabfirst\""
+ EXPECTED_CMD_08="-c \"echo | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\" -c \"tabfirst\""
+ EXPECTED_CMD_09="-c \"echo | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\""
+ 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\""
+ 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\""
+ 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\""
+ 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\""
+ 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\""
+ 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\""
+ 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\""
EXPECTED_TARGET_01="MERGED"
EXPECTED_TARGET_02="LOCAL"
--
2.37.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] vimdiff: make layout engine more robust against user vim settings
2022-07-08 18:10 [PATCH] vimdiff: make layout engine more robust against user vim settings Fernando Ramos
@ 2022-07-08 18:14 ` Fernando Ramos
2022-07-08 20:15 ` Junio C Hamano
1 sibling, 0 replies; 4+ messages in thread
From: Fernando Ramos @ 2022-07-08 18:14 UTC (permalink / raw)
To: git; +Cc: gitster, mklein994
This bug was originally reported by Matthew. I have verified that the patch
above fixes the issue but if anyone else can also test it that would be great.
> Reported-by: Matthew Klein <mklein994@gmail.com>
> Signed-off-by: Fernando Ramos <greenfoo@u92.eu>
Matthew, I have added you to the "Reported-by" field. If you prefer to remain
anonymous, please let me know and I'll create a new patch without your name.
Thanks!
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] vimdiff: make layout engine more robust against user vim settings
2022-07-08 18:10 [PATCH] vimdiff: make layout engine more robust against user vim settings Fernando Ramos
2022-07-08 18:14 ` Fernando Ramos
@ 2022-07-08 20:15 ` Junio C Hamano
2022-07-08 22:37 ` Fernando Ramos
1 sibling, 1 reply; 4+ messages in thread
From: Junio C Hamano @ 2022-07-08 20:15 UTC (permalink / raw)
To: Fernando Ramos; +Cc: git, mklein994
Fernando Ramos <greenfoo@u92.eu> writes:
> 'vim' has two configuration options ('splitbelow' and 'splitright') that
> change the way the 'split' command behaves. When they are set, the
> commands that the layout engine generates no longer work as expected.
Interesting. Does that mean that the end-user setting that was
problematic with the new layout engine would have also broken the
layout before your series?
> In order to fix this we can append special keyword 'letfabove' to each
Presumably "leftabove" was meant here.
> 'split' and 'vertical split' subcommand found inside the command string
> generated by the layout engine.
>
> This works because whatever comes after 'leftabove' will temporally
> ignore settings 'splitbelow' and 'splitright'.
>
> Reported-by: Matthew Klein <mklein994@gmail.com>
> Signed-off-by: Fernando Ramos <greenfoo@u92.eu>
Will queue. Thanks.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] vimdiff: make layout engine more robust against user vim settings
2022-07-08 20:15 ` Junio C Hamano
@ 2022-07-08 22:37 ` Fernando Ramos
0 siblings, 0 replies; 4+ messages in thread
From: Fernando Ramos @ 2022-07-08 22:37 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, mklein994
On 22/07/08 01:15PM, Junio C Hamano wrote:
>
> Interesting. Does that mean that the end-user setting that was
> problematic with the new layout engine would have also broken the
> layout before your series?
Surprisingly enough, no. Turns out the commands used before the new layout
engine was introduced did *not* use 'split' nor 'vertical split' (which are the
commands affected by those two global settings).
Instead, it relayed on the fact that 'vim -d' always opens splits vertically and
then readjusted window positions with 'wincmd [HJKL]'.
The old way was limited in the amount of things that could be achieved and
that's why it was changed... but I completely missed those two global settings
capable of changing the behaviour of the new commands.
> > In order to fix this we can append special keyword 'letfabove' to each
>
> Presumably "leftabove" was meant here.
You are right. Sorry.
> Will queue. Thanks.
Thank you!
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-07-08 22:37 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-08 18:10 [PATCH] vimdiff: make layout engine more robust against user vim settings Fernando Ramos
2022-07-08 18:14 ` Fernando Ramos
2022-07-08 20:15 ` Junio C Hamano
2022-07-08 22:37 ` Fernando Ramos
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).