git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Felipe Contreras <felipe.contreras@gmail.com>
To: Fernando Ramos <greenfoo@u92.eu>
Cc: git@vger.kernel.org
Subject: Re: [PATCH v3 2/3] mergetools: vimdiff: fix single tab mode, single window mode and colors
Date: Mon, 8 Aug 2022 16:00:44 -0500	[thread overview]
Message-ID: <CAMP44s1E6B4gG8nzNJwqAkYGQRns87i7iJFw=0yRadw2QL3-Ng@mail.gmail.com> (raw)
In-Reply-To: <YvFSgjK0P5kzoOfg@zacax395.localdomain>

On Mon, Aug 8, 2022 at 1:14 PM Fernando Ramos <greenfoo@u92.eu> wrote:
>
> On 22/08/08 01:37AM, Felipe Contreras wrote:
> > On Mon, Aug 8, 2022 at 12:35 AM Fernando Ramos <greenfoo@u92.eu> wrote:
> > >
> > > vimdiff3 was introduced in 7c147b77d3 (mergetools: add vimdiff3 mode,
> > > 2014-04-20) and then partially broken in 0041797449 (vimdiff: new
> > > implementation with layout support, 2022-03-30) in two ways:
> > >
> > >     - It does not show colors unless the user has "set hidden" in his
> > >       .vimrc file
> > >
> > >     - It prompts the user to "Press ENTER" every time it runs.
> >
> > For the record, in my version these two issues are fixed in a much simpler way:
> >
>
> Yes, it was simpler but remember it had two small issues:
>
>   1. In "vimdiff3" mode, if you switch to buffers #2 or #3, highlighting
>      disappears.

No. That only happens in patch 9. In patch 5--which is where those two
bugs are resolved--that problem doesn't exist yet.

Also, I'm pretty sure that's a bug in vim (of which there are many).

>   2. It treats a single tab with a single window as a special case, when in
>      fact it is just a subcase of a layout with many tabs where one of them
>      contains just one window.
>      The new patch series makes no distinction between them by keeping track
>      of the number of windows opened on each tab which, as you noted, adds
>      some extra complexity (but needed complexity nevertheless if we want to
>      have highlighting enabled in all cases)

That's not necessarily true. You are assuming that is the only
solution possible.

Even supposing your solution was the only solution possible, nothing
prevents us from applying your patch on top of mine. In git (and in
many other endeavors) it behooves us to do one thing at a time for
many reasons.

There's no reason to try to do two things at the same time. We can fix
the specific case now (which is urgent and needed), and explore the
generic case later on (which few people would care about anyway).

For the generic case, I took a look at your solution and noticed most
of the complexity comes from trying to guess the number of windows per
tab. There is no need to do that.

I experimented with doing "bufdo diffthis" even in cases with multiple
windows *before* doing anything else, and it works. There's no need to
do "bufdo diffthis" afterwards, and there's no need for "windo
diffthis" either. There's also no need to store the current buffer in
a variable.

It *also* has the added benefit that now multi-window tabs now show
the diff colors for all the buffers, not just the visible ones (which
is what I would have expected anyway).

This solution is not only simpler than your solution, it's actually
simpler than the current code.

--- a/mergetools/vimdiff
+++ b/mergetools/vimdiff
@@ -68,7 +68,7 @@ gen_cmd_aux () {

        if test -z "$CMD"
        then
-               CMD="echo" # vim "nop" operator
+               CMD="silent execute 'bufdo diffthis'"
        fi

        start=0
@@ -221,7 +221,7 @@ gen_cmd_aux () {

        if ! test -z "$index_new_tab"
        then
-               before="-tabnew"
+               before="-tabnew | silent execute 'bufdo diffthis'"
                after="tabnext"
                index=$index_new_tab
                terminate="true"
@@ -336,17 +336,6 @@ gen_cmd () {
        CMD=$(gen_cmd_aux "$LAYOUT")


-       # Adjust the just obtained script depending on whether more than one
-       # windows are visible or not
-
-       if echo "$LAYOUT" | grep ",\|/" >/dev/null
-       then
-               CMD="$CMD | tabdo windo diffthis"
-       else
-               CMD="$CMD | bufdo diffthis"
-       fi
-
-
        # Add an extra "-c" option to move to the first tab (notice that we
        # can't simply append the command to the previous "-c" string as
        # explained here: https://github.com/vim/vim/issues/9076


> > >         # Add an extra "-c" option to move to the first tab (notice that we
> > >         # can't simply append the command to the previous "-c" string as
> > >         # explained here: https://github.com/vim/vim/issues/9076
> > >
> > > -       FINAL_CMD="-c \"$CMD\" -c \"tabfirst\""
> > > +       FINAL_CMD="-c \"set hidden diffopt-=hiddenoff diffopt-=closeoff\" -c \"$CMD\" -c \"tabfirst\""
> > >  }
> >
> > These diffopt settings look awfully familiar.
>
> I would go as far as saying they are the same :)

That's actually my point. You copied one of my fixes without
mentioning it. Not only is it not nice to copy code without
attribution, it's not a good practice to sneak in unrelated changes.
If later on it turns out the diffopt stuff introduce a regression,
people will have a harder time figuring out what in this patch
triggered the issue especially since it's not mentioned.

The diffopt fix is completely separate from what you are trying to do
in this patch. It's good practice to do those kinds of fixes in a
separate patch. My patch [1] does only one thing, and it explains why
in the commit message.

> As you explained, it is better to keep these options explicitly set so that
> buffer diff'ing works in all cases.
>
> Notice that in this new patch series, however, these options apply to all
> layouts (and not just to "vimdiff3"), as we want highlighting to also be
> enabled in multi-tab single window layouts.

Yes, but still: it should be done in a separate patch and explained why.

Cheers.

[1] https://lore.kernel.org/git/20220807024941.222018-7-felipe.contreras@gmail.com/

-- 
Felipe Contreras

  reply	other threads:[~2022-08-08 21:01 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-07  2:49 [PATCH v2 0/9] mergetools: vimdiff: regression fix and reorg Felipe Contreras
2022-08-07  2:49 ` [PATCH v2 1/9] mergetools: vimdiff: fix comment Felipe Contreras
2022-08-07  2:49 ` [PATCH v2 2/9] mergetools: vimdiff: shuffle single window case Felipe Contreras
2022-08-07 14:46   ` Fernando Ramos
2022-08-07 15:44     ` Felipe Contreras
2022-08-07  2:49 ` [PATCH v2 3/9] mergetools: vimdiff: add get_buf() helper Felipe Contreras
2022-08-07  2:49 ` [PATCH v2 4/9] mergetools: vimdiff: make vimdiff3 actually work Felipe Contreras
2022-08-07  2:49 ` [PATCH v2 5/9] mergetools: vimdiff: silence annoying messages Felipe Contreras
2022-08-07  2:49 ` [PATCH v2 6/9] mergetools: vimdiff: fix for diffopt Felipe Contreras
2022-08-07  2:49 ` [PATCH v2 7/9] mergetools: vimdiff: cleanup cruft Felipe Contreras
2022-08-07  2:49 ` [PATCH v2 8/9] mergetools: vimdiff: fix single window mode Felipe Contreras
2022-08-07  2:49 ` [PATCH v2 9/9] mergetools: vimdiff: use vimdiff for vimdiff3 Felipe Contreras
2022-08-07 14:46   ` Fernando Ramos
2022-08-07  7:54 ` [PATCH v2 0/9] mergetools: vimdiff: regression fix and reorg Fernando Ramos
2022-08-07 15:39   ` Felipe Contreras
2022-08-07 18:39     ` Fernando Ramos
2022-08-07 18:43       ` [PATCH 1/2] vimdiff: fix single tab mode, single window mode and colors Fernando Ramos
2022-08-07 18:43         ` [PATCH 2/2] vimdiff: update unit tests Fernando Ramos
2022-08-07 22:27       ` [PATCH v2 0/9] mergetools: vimdiff: regression fix and reorg Felipe Contreras
2022-08-08  5:34 ` [PATCH v3 0/3] mergetools: vimdiff: regression fix (vimdiff3 mode) Fernando Ramos
2022-08-08  5:34   ` [PATCH v3 1/3] mergetools: vimdiff: fix comment Fernando Ramos
2022-08-08  5:34   ` [PATCH v3 2/3] mergetools: vimdiff: fix single tab mode, single window mode and colors Fernando Ramos
2022-08-08  6:37     ` Felipe Contreras
2022-08-08 18:14       ` Fernando Ramos
2022-08-08 21:00         ` Felipe Contreras [this message]
2022-08-08 21:51           ` Fernando Ramos
2022-08-09  0:59             ` Felipe Contreras
2022-08-08  5:34   ` [PATCH v3 3/3] mergetools: vimdiff: update unit tests Fernando Ramos

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAMP44s1E6B4gG8nzNJwqAkYGQRns87i7iJFw=0yRadw2QL3-Ng@mail.gmail.com' \
    --to=felipe.contreras@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=greenfoo@u92.eu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).