terminal: Version 1.5.3142.0: Unexpected behaviour in tab switcher with "inOrder" mode and custom nextTab/prevTab binding

Environment

Windows build number: Microsoft Windows [Version 10.0.19042.630]
Windows Terminal version (if applicable): Windows Terminal Preview Version: 1.5.3142.0

Any other software? None that should affect this

Steps to reproduce

Set

{
    "$schema": "https://aka.ms/terminal-profiles-schema",
    "tabSwitcherMode": "inOrder",

and custom keybindings for nextTab and prevTab, e.g.

    "actions":
    [
        { "command": "nextTab", "keys": "shift+a" },
        { "command": "prevTab", "keys": "shift+b" }
    ]

Open two tabs or more. Fiddle with the custom keybinds, keep modifier down and press e.g. a key multiple times. Compare to standard ctrl-tab or control-shift-tab bindings.

Expected behavior

Behaviour of nextTab and prevTab is the same with custom bindings as default bindings

Actual behavior

Tabs get changed seemingly randomly. E.g. with four tabs, nextTab second press (modifier kept down) gets stuck to first tab, prevTab to third tab.

Notes

This is not very important, I can personally get the behavior I want by setting tabswitcher to “disabled”. Still, this is something that clearly is unexpected, or rather, wrong behavior.

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Reactions: 2
  • Comments: 20 (10 by maintainers)

Commits related to this issue

Most upvoted comments

Hey everyone,

Thanks for bearing with us while we make our mistakes. I’m going to release a quick servicing update to both 1.4 and 1.5 that flips the default back to the way it’s been for the past year and a half. MRU will be opt-in, and when #1564 lands it’ll be easier to find than “just go your JSON settings and type in whatever magic string we tell you to.” I accept that we allowed a vocal subset of our users to dictate what our default settings should be, to the detriment of the folks who’ve been using Terminal the longest.

If all goes to plan, these updates will go out as 1.4.3241 and 1.5.3242.

/cc @WilliamKyle @davidchisnall @zachjweiner from #8233

d

Hey don’t throw shade at @Don-Vito, he’s just a contributor who’s fixed a bunch of bugs. You can throw shade at me, or anyone else in the Microsoft org, but not other external contributors

Hey don’t throw shade at @Don-Vito, he’s just a contributor who’s fixed a bunch of bugs. You can throw shade at me, or anyone else in the Microsoft org, but not other external contributors

@zadjii-msft - few things:

  1. I am not “just a contributor” - I am your favorite one 😆
  2. By your definition, Tira can throw a shade on me as well, since I am also in Microsoft org (though work on the Terminal at nights / while eating my lunch)

@Don-Vito Why do you break the tool that always worked? Just switch the tab forward - this is a hemorrhoid for 10 seconds, turn it back, another hemorrhoid for 10 seconds. We made a new function, so let people put it and enable it, leave the working version by default. How do I get it back? your “useTabSwitcher” : false , not “tabSwitcherMode” : “inOrder” do not work, as tabs switch randomly, and continue. 1.4.3141.0. With all the nerves burned.

@Tira007

  1. I mentioned "tabSwitcherMode" in this post since in the original reporter used version 1.5 and mentioned this flag explicitly. I could not assume that you will try to apply techniques from 1.5 to 1.4.
  2. There were several threads from yesterday and today talking about how to revert to the original behavior in all versions. You can find some more explanation (by me) here: https://github.com/microsoft/terminal/issues/973#issuecomment-726665238
  3. I can feel your frustration when working functionality breaks, I agree that it is probably not a good idea to change the default behavior when the feature is just released, but please remember - that behind the code there are people who work really hard to deliver what community asks, and not some flawless robots with perfect decision making.

Don-Vito:

  1. Don’t change the default to an alternative that wasn’t tested in production for one minor at least (usually one month)

Indeed. In my opinion this change in tab behavior to mru by default was a not a good thing. Tabs changing is such a basic thing with tabbed terminals, changes to tab behavior should not be done without careful consideration. Anyway, I consider the tabbed interface model to copy from to be browsers - especially new Edge - so the default behavior should be the same as there, i.e. “disabled” (or in 1.4 “useTabSwitcher”: false). But I guess it’s way too late for this discussion, that ship already sailed.

@Tira007 - we are good, I absolutely get your frustration and I totally agree that changing default behavior should be treated very carefully. I am not on the team, but I would suggest (for major use-cases at least):

  1. Don’t change the default to an alternative that wasn’t tested in production for one minor at least (usually one month)
  2. Upon changing defaults provide clear way to opt out (if possible - in UI)
  3. Engage with the end-users / community more: make decision making more transparent, provide heads up for upcoming changes

BTW, not sure if it was applicable in your scenario, for critical scenarios I simply pin the version, e.g., with chocolatey:

choco install microsoft-windows-terminal --version=1.3.2651.0

In any case, there is a bunch of other good terminals, that will hopefully meet your needs. Hope that one day you try this one again, as the team and the community is learning and improving.

@Don-Vito Why do you break the tool that always worked? Just switch the tab forward - this is a hemorrhoid for 10 seconds, turn it back, another hemorrhoid for 10 seconds. We made a new function, so let people put it and enable it, leave the working version by default. How do I get it back? your “useTabSwitcher” : false , not “tabSwitcherMode” : “inOrder” do not work, as tabs switch randomly, and continue. 1.4.3141.0. With all the nerves burned.

About to go to sleep, I’ll take another look at this tomorrow, or over the weekend, cheers

@zadjii-msft - it looks that there are two code paths for Ctrl+Tab and for everything else:

Ctrl + Tab is working perfectly

  • On the first tab navigation TerminalPage::_SelectNextTab resets the tab commands, and since palette is not visible selects the relevant tab index
  • On the second navigation Ctrl+Tab is intercepted by CommandPalette::_previewKeyDownHandler and everything works fine

But with custom binding things are screwed:

  • On the first tab navigation TerminalPage::_SelectNextTab resets the tab commands, and since palette is not visible selects the relevant tab index
  • On the second navigation keys are not intercepted and thus TerminalPage::_SelectNextTab is called again. It resets the commands, but now since the palette is visible we simply invoke CommandPalette::SelectNextItem. Which in turn misbehaves because no item is selected.

I am working on some fix, let’s continue the discussion in the PR once it is open.