Drag & Drop Tabs to create a Pane #6442

Open
opened 2026-01-31 00:38:50 +00:00 by claunia · 32 comments
Owner

Originally created by @simonferquel on GitHub (Feb 14, 2020).

Description of the new feature/enhancement

The current way of splitting panes using written commands or shortcuts is awesome but difficult to discover.
There is already some drag & drop support for reordering tabs. It would be awesome to be able to drag & drop a tab to split a pane in the previous tab. An exemple of user interaction sequence:

  • Open Windows terminal: it shows a single tab with a single pane with powershell
  • Hit ctrl+shift+3 to open a ubuntu tab
  • drag the ubuntu tab > it shows me the previous tab (powershell)
  • using my mouse I can move the ubuntu tab into sensitive zones an preview the resulting split (a bit like Visual Studio/code UI)
  • I can then drop, and get a nice splitted pane.

Optionally, show a popup saying "Want to automate that ? click here to copy an automation script to your clipboard", which would copy a script that would do the same thing.

Proposed technical implementation details (optional)

Well, I am sure it is possible to do that by writing some code :)

Originally created by @simonferquel on GitHub (Feb 14, 2020). <!-- 🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨 I ACKNOWLEDGE THE FOLLOWING BEFORE PROCEEDING: 1. If I delete this entire template and go my own path, the core team may close my issue without further explanation or engagement. 2. If I list multiple bugs/concerns in this one issue, the core team may close my issue without further explanation or engagement. 3. If I write an issue that has many duplicates, the core team may close my issue without further explanation or engagement (and without necessarily spending time to find the exact duplicate ID number). 4. If I leave the title incomplete when filing the issue, the core team may close my issue without further explanation or engagement. 5. If I file something completely blank in the body, the core team may close my issue without further explanation or engagement. All good? Then proceed! --> # Description of the new feature/enhancement The current way of splitting panes using written commands or shortcuts is awesome but difficult to discover. There is already some drag & drop support for reordering tabs. It would be awesome to be able to drag & drop a tab to split a pane in the previous tab. An exemple of user interaction sequence: - Open Windows terminal: it shows a single tab with a single pane with powershell - Hit ctrl+shift+3 to open a ubuntu tab - drag the ubuntu tab > it shows me the previous tab (powershell) - using my mouse I can move the ubuntu tab into sensitive zones an preview the resulting split (a bit like Visual Studio/code UI) - I can then drop, and get a nice splitted pane. Optionally, show a popup saying "Want to automate that ? click here to copy an automation script to your clipboard", which would copy a script that would do the same thing. # Proposed technical implementation details (optional) Well, I am sure it is possible to do that by writing some code :)
claunia added the Issue-FeatureProduct-TerminalArea-UserInterface labels 2026-01-31 00:38:50 +00:00
Author
Owner

@simonferquel commented on GitHub (Feb 14, 2020):

In this context, hard to discover means also "easy to forget"

@simonferquel commented on GitHub (Feb 14, 2020): In this context, hard to discover means also "easy to forget"
Author
Owner

@zadjii-msft commented on GitHub (Feb 18, 2020):

Thanks for the suggestion! This is actually already being tracked by another issue on our repo - please refer to #992 for more discussion.

/dup #992

@zadjii-msft commented on GitHub (Feb 18, 2020): Thanks for the suggestion! This is actually already being tracked by another issue on our repo - please refer to #992 for more discussion. /dup #992
Author
Owner

@ghost commented on GitHub (Feb 18, 2020):

Hi! We've identified this issue as a duplicate of another one that already exists on this Issue Tracker. This specific instance is being closed in favor of tracking the concern over on the referenced thread. Thanks for your report!

@ghost commented on GitHub (Feb 18, 2020): Hi! We've identified this issue as a duplicate of another one that already exists on this Issue Tracker. This specific instance is being closed in favor of tracking the concern over on the referenced thread. Thanks for your report!
Author
Owner

@simonferquel commented on GitHub (Feb 24, 2020):

@zadjii-msft I don't think it is a duplicate. #992 only talks about resizing the panes, not for merging tabs into a multi-pane view by drag and drop.

@simonferquel commented on GitHub (Feb 24, 2020): @zadjii-msft I don't think it is a duplicate. #992 only talks about resizing the panes, not for merging tabs into a multi-pane view by drag and drop.
Author
Owner

@zadjii-msft commented on GitHub (Feb 24, 2020):

D'oh, yea okay reading this more carefully (and with more coffee), I see what you mean. Yea this definitely isn't a dupe. Sorry about that!

@zadjii-msft commented on GitHub (Feb 24, 2020): D'oh, yea okay reading this more carefully (and with more coffee), I see what you mean. Yea this definitely isn't a dupe. Sorry about that!
Author
Owner

@randomascii commented on GitHub (Mar 17, 2020):

I thought about filing a separate issue but decided to comment on this one instead. In the web browser world it is now assumed that users can drag tabs out of windows, back into windows, etc. This tearing off of tabs is an essential and elegant tool. The Windows Terminal should copy this UI paradigm. That is, in addition to being able to drag tabs to rearrange their order, and drag tabs to create panes, users should also be able to drag panes to other terminal windows, or drag them out to create new terminal windows.

@randomascii commented on GitHub (Mar 17, 2020): I thought about filing a separate issue but decided to comment on this one instead. In the web browser world it is now assumed that users can drag tabs out of windows, back into windows, etc. This tearing off of tabs is an essential and elegant tool. The Windows Terminal should copy this UI paradigm. That is, in addition to being able to drag tabs to rearrange their order, and drag tabs to create panes, users should also be able to drag panes to other terminal windows, or drag them out to create new terminal windows.
Author
Owner

@DHowett-MSFT commented on GitHub (Mar 17, 2020):

I actually really like the WPF/Visual Studio tab hover/drag/drop controls. I'd love to see us implement something like that.

@DHowett-MSFT commented on GitHub (Mar 17, 2020): I actually really like the WPF/Visual Studio tab hover/drag/drop controls. I'd love to see us implement something like that.
Author
Owner

@DHowett-MSFT commented on GitHub (Mar 17, 2020):

(I thought they were obnoxious at first, but now that I'm older and either more or less opinionated, I find them "usable" 😁)

@DHowett-MSFT commented on GitHub (Mar 17, 2020): (I thought they were obnoxious at first, but now that I'm older and either more or less opinionated, I find them "usable" :grin:)
Author
Owner

@DHowett commented on GitHub (May 19, 2020):

@randomascii I realized I never saw your comment. We've got an issue tracking tab tearoff/window merging, and we're evaluating it for the post-v1 timeframe. That's over in #1256!

@DHowett commented on GitHub (May 19, 2020): @randomascii I realized I never saw your comment. We've got an issue tracking tab tearoff/window merging, and we're evaluating it for the post-v1 timeframe. That's over in #1256!
Author
Owner

@davkean commented on GitHub (May 20, 2020):

Just to add my +1, I could have sworn that I saw that you could split tabs - I spent a long time trying to figure out how to do it and gave up. Only figured out how to do this when I read the settings file and saw there was a shortcut for it. I also like VS approach and was my first attempt at splitting panels (note: I work on VS, I am biased).

@davkean commented on GitHub (May 20, 2020): Just to add my +1, I could have sworn that I saw that you could split tabs - I spent a long time trying to figure out how to do it and gave up. Only figured out how to do this when I read the settings file and saw there was a shortcut for it. I also like VS approach and was my first attempt at splitting panels (note: I work on VS, I am biased).
Author
Owner

@zadjii-msft commented on GitHub (Jun 2, 2020):

From @schuelermine in #6291:

Currently, dragging a tab allows you to rearrange the tab order.

I suggest that it should also be possible to adjust panes this way. Please see the attached image.

Dragging a tab onto a seam between to panes or near the edge of a tab should create a new pane there and place the tab in there. It should also be possible to swap a tab and a pane by dragging onto the center.

The upper-right example is dubious, as it requires the addition of a draggable icon to every pane. It has been greyed out to clarify this.

pane-rearrangement-illustration-wt-3 edited

@zadjii-msft commented on GitHub (Jun 2, 2020): From @schuelermine in #6291: > > Currently, dragging a tab allows you to rearrange the tab order. > > I suggest that it should also be possible to adjust panes this way. Please see the attached image. > > Dragging a tab onto a seam between to panes or near the edge of a tab should create a new pane there and place the tab in there. It should also be possible to swap a tab and a pane by dragging onto the center. > > The upper-right example is dubious, as it requires the addition of a draggable icon to every pane. It has been greyed out to clarify this. > > ![pane-rearrangement-illustration-wt-3 edited](https://user-images.githubusercontent.com/48802534/83412555-91c60480-a41a-11ea-9853-a4106cd67ae4.png)
Author
Owner

@Andrei-Paul commented on GitHub (Jun 3, 2020):

I would very much prefer if panes also had a tab indicator, maybe grouping panes in consecutive tabs marked with the same color to mark a pane group, or a single "fatter" tab with some markings from each contained pane. Clicking on the "sub-tab" could directly bring that pane to focus.

But I can work with just drag-drop-able tabs / panes. 😁

@Andrei-Paul commented on GitHub (Jun 3, 2020): I would very much prefer if panes also had a tab indicator, maybe grouping panes in consecutive tabs marked with the same color to mark a pane group, or a single "fatter" tab with some markings from each contained pane. Clicking on the "sub-tab" could directly bring that pane to focus. But I can work with just drag-drop-able tabs / panes. 😁
Author
Owner

@schuelermine commented on GitHub (Jun 11, 2020):

@zadjii-msft I've made a slightly better version of that mockup, you might want to replace that image with this one: https://drive.google.com/file/d/1h6YLEPTmdB0woqNMep-npFMqTEJGY3HX/view?usp=sharing

@schuelermine commented on GitHub (Jun 11, 2020): @zadjii-msft I've made a slightly better version of that mockup, you might want to replace that image with this one: https://drive.google.com/file/d/1h6YLEPTmdB0woqNMep-npFMqTEJGY3HX/view?usp=sharing
Author
Owner

@zadjii-msft commented on GitHub (Jun 11, 2020):

image

Meh, I'll just upload the new version here, that's easier 😉

@zadjii-msft commented on GitHub (Jun 11, 2020): ![image](https://user-images.githubusercontent.com/18356694/84406051-9d5dbc00-abce-11ea-8372-609ef266f0fe.png) Meh, I'll just upload the new version here, that's easier 😉
Author
Owner

@lucianotres commented on GitHub (Aug 8, 2020):

Please don't forget the drag out to create new window, like browser tabs do. It's very quickly and easy when you have more than one screen.

@lucianotres commented on GitHub (Aug 8, 2020): Please don't forget the drag out to create new window, like browser tabs do. It's very quickly and easy when you have more than one screen.
Author
Owner

@luzhkovvv commented on GitHub (Aug 9, 2020):

I'd like to vote this feature up by describing important use-case.
That feature is more than only cosmetics or "mouse-friendly" way to split tab vs keyboard-only. The main point of that feature for me is moving existing tab (session) with all context into split view.
Every now and then I find myself working in several tabs with several servers, multiple sessions to one server, different virtual environments, opening different files and applications, and then thinking "this is it! I have to view that session side-by-side with that one". And it takes time to recreate the session again in a new empty split pane. Sometimes it may take so much time that I keep working in different tabs constantly switching (like, logging to some server, optionally through an intermediate server, executing some actions, waiting for results, etc).
To be honest, I almost never know I will need split-tab before I have some active sessions I'd like to split. It may (should) be problems with me planning the work, but so it is, and I think that problem is pretty common. 😉
Also, the need for the split view is sometimes dynamic, when at one point you need session1 + session2, than session1 + session3, than session2 and session3 and so on, so you can't work this around by planning layout in advance or sacrificing screen space to split view everything you may need.

@luzhkovvv commented on GitHub (Aug 9, 2020): I'd like to vote this feature up by describing important use-case. That feature is more than only cosmetics or "mouse-friendly" way to split tab vs keyboard-only. The main point of that feature for me is **moving existing tab (session) with all context into split view**. Every now and then I find myself working in several tabs with several servers, multiple sessions to one server, different virtual environments, opening different files and applications, and then thinking "this is it! I have to view that session side-by-side with that one". And **it takes time to recreate the session again in a new empty split pane**. Sometimes it may take so much time that I keep working in different tabs constantly switching (like, logging to some server, optionally through an intermediate server, executing some actions, waiting for results, etc). To be honest, I almost never know I will need split-tab before I have some active sessions I'd like to split. It may (should) be problems with me planning the work, but so it is, and I think that problem is pretty common. 😉 Also, the **need for the split view is sometimes dynamic**, when at one point you need session1 + session2, than session1 + session3, than session2 and session3 and so on, **so you can't work this around by planning layout in advance** or sacrificing screen space to split view everything you may need.
Author
Owner

@jonathanmarston commented on GitHub (Jun 18, 2021):

I would like to echo @luzhkovvv's comment. This would be very useful as I frequently find myself starting multiple tabs initially to get stuff kicked off, and then moving more into a "monitoring" mode, where I'd like to move the existing sessions into panes so I can see them all at once.

I'd be willing to contribute some coding time to make this happen if it is approved and up for grabs.

@jonathanmarston commented on GitHub (Jun 18, 2021): I would like to echo @luzhkovvv's comment. This would be very useful as I frequently find myself starting multiple tabs initially to get stuff kicked off, and then moving more into a "monitoring" mode, where I'd like to move the existing sessions into panes so I can see them all at once. I'd be willing to contribute some coding time to make this happen if it is approved and up for grabs.
Author
Owner

@piradata commented on GitHub (Jul 5, 2022):

Also one use case for this would be to reorganize the position of existing tabs for time when you badly positioned then and there is too much info on one pane horizontally like a running a "docker ps" or a "kubectl get pods -o wide"

image

And we get

image

If I am not mistaken, the Terminator terminal already permit this, could be useful looking at their code for reference.

https://terminator-gtk3.readthedocs.io/en/latest/gettingstarted.html

image

@piradata commented on GitHub (Jul 5, 2022): Also one use case for this would be to reorganize the position of existing tabs for time when you badly positioned then and there is too much info on one pane horizontally like a running a "docker ps" or a "kubectl get pods -o wide" ![image](https://user-images.githubusercontent.com/16529503/177256027-91909973-f5d8-48b7-998b-7a77fd355dc4.png) And we get ![image](https://user-images.githubusercontent.com/16529503/177256095-63e6d71a-ebd3-48ff-946f-2e2ce2882bc6.png) If I am not mistaken, the Terminator terminal already permit this, could be useful looking at their code for reference. https://terminator-gtk3.readthedocs.io/en/latest/gettingstarted.html ![image](https://user-images.githubusercontent.com/16529503/177256596-e5a63a36-670f-4e3d-94ff-8e45c74d89d3.png)
Author
Owner

@dhirschfeld commented on GitHub (Aug 12, 2022):

If you're looking for some prior-art to guide the implementation I think the JupyterLab experience is an excellent (and battle-tested) UI/UX.

The tab drag & drop functionality is provided by the lumino DockPanel widget - e.g.

https://lumino.readthedocs.io/en/latest/examples/dockpanel/index.html

@dhirschfeld commented on GitHub (Aug 12, 2022): If you're looking for some prior-art to guide the implementation I think the JupyterLab experience is an excellent (and battle-tested) UI/UX. The tab drag & drop functionality is provided by the [`lumino`](https://github.com/jupyterlab/lumino) `DockPanel` widget - e.g. https://lumino.readthedocs.io/en/latest/examples/dockpanel/index.html
Author
Owner

@SinanAkkoyun commented on GitHub (Mar 10, 2023):

Any updates on this? Also, please add it that when tabs are pulled outside the window, a new winterm should spawn (and vice versa, like in google chrome)

@SinanAkkoyun commented on GitHub (Mar 10, 2023): Any updates on this? Also, please add it that when tabs are pulled outside the window, a new winterm should spawn (and vice versa, like in google chrome)
Author
Owner

@zadjii-msft commented on GitHub (Mar 10, 2023):

Nope. We'll make sure to update this thread when there is. In the meantime, might I recommend the Subscribe button?
image
That way you'll be notified of any updates to this thread, without needlessly pinging everyone on this thread ☺️

Also, tab tear-out is tracked in #1256 and implemented in the series of PRs terminating in #14935

@zadjii-msft commented on GitHub (Mar 10, 2023): Nope. We'll make sure to update this thread when there is. In the meantime, might I recommend the Subscribe button? ![image](https://user-images.githubusercontent.com/18356694/91237459-5cbb0c80-e700-11ea-9347-b9b1ec2813b1.png) That way you'll be notified of any updates to this thread, without needlessly pinging everyone on this thread ☺️ Also, tab tear-out is tracked in #1256 and implemented in the series of PRs terminating in #14935
Author
Owner

@bar0n36 commented on GitHub (Aug 22, 2023):

The lack of this functionality is incredibly frustrating when you are setting up something in one tab, pop a new one to do something else and want to be able to watch them side-by-side. The non-intuitive, non-standard 'well right click and split tabs first' would be wonderful except nothing else does this. This is my biggest issue and makes me want to use a different terminal emulator every time I encounter it.

@bar0n36 commented on GitHub (Aug 22, 2023): The lack of this functionality is incredibly frustrating when you are setting up something in one tab, pop a new one to do something else and want to be able to watch them side-by-side. The non-intuitive, non-standard 'well right click and split tabs first' would be wonderful except nothing else does this. This is my biggest issue and makes me want to use a different terminal emulator every time I encounter it.
Author
Owner

@piradata commented on GitHub (Aug 23, 2023):

by the way, if this were to be implemented, where would be the "drag region"? like, we don't have currently anything in the terminal that is draggable or is a panel indicator in each panel, as they have a clean design and I think they should remain that way.

Any suggestions?

@piradata commented on GitHub (Aug 23, 2023): by the way, if this were to be implemented, where would be the "drag region"? like, we don't have currently anything in the terminal that is draggable or is a panel indicator in each panel, as they have a clean design and I think they should remain that way. Any suggestions?
Author
Owner

@zadjii-msft commented on GitHub (Aug 23, 2023):

Dragging and dropping a tab to create a pane is pretty straightforward - we could have some sort of overlay like VS or VSCode.

Dragging a Pane to somewhere else would probably require #4717 first, so that there's something attached to the pane to drag.

@zadjii-msft commented on GitHub (Aug 23, 2023): Dragging and dropping a tab to create a pane is pretty straightforward - we could have some sort of overlay like VS or VSCode. Dragging a Pane to somewhere else would probably require #4717 first, so that there's something attached to the pane to drag.
Author
Owner

@SinanAkkoyun commented on GitHub (Aug 24, 2023):

I tested it, it already works. Sometimes not, but most of the time with the preview app.

@SinanAkkoyun commented on GitHub (Aug 24, 2023): I tested it, it already works. Sometimes not, but most of the time with the preview app.
Author
Owner

@zadjii-msft commented on GitHub (Aug 24, 2023):

@SinanAkkoyun Sounds like you're talking about tab tear-out, which was added in 1.18 and was tracked originally in #1256.

@zadjii-msft commented on GitHub (Aug 24, 2023): @SinanAkkoyun Sounds like you're talking about tab tear-out, which was added in 1.18 and was tracked originally in #1256.
Author
Owner

@piradata commented on GitHub (Aug 30, 2023):

yea, dragging a tab is ok, my point was the pane part. personally i think it is a little ugly the idea of pane title because i like how the windows terminal is "clean" compared to others like terminator, but we also need something draggable

@piradata commented on GitHub (Aug 30, 2023): yea, dragging a tab is ok, my point was the pane part. personally i think it is a little ugly the idea of pane title because i like how the windows terminal is "clean" compared to others like terminator, but we also need something draggable
Author
Owner

@klkvsk commented on GitHub (Nov 13, 2023):

Here's an idea I want to share, what can be done instead of permanently visible drag handles:

So, by default we have alt-shift-arrow hotkeys to resize pane, alt-shift-plus/minus to create a pane. It is mnemonical that all pane modifications are done with alt-shift.

I suggest a alt-shift-control combo, that while pressed would enable an overlay mode called Pane Control Mode.

windows-terminal_pane-control-mode_mockup

While alt-shift-control is down, we get

  • Pane index hints, because we have "Move pane, index: X" actions, but as of now, how does the user know the correct index? Also, "Focus/Close pane, index: X" actions can be added later.
    This is also a visible marker to know that you're in pane control mode.
  • Borders of panes become resizable with a mouse.
  • Panes become draggable. Dragging one pane to another switches their positions. Dragging pane to tab bar ejects in to a new tab. Dragging out of window ejects to new window.
  • (debatable) hovering over edges of an active pane shows "+" button to add a pane from that side.
@klkvsk commented on GitHub (Nov 13, 2023): Here's an idea I want to share, what can be done instead of permanently visible drag handles: So, by default we have `alt-shift-arrow` hotkeys to resize pane, `alt-shift-plus/minus` to create a pane. It is mnemonical that all pane modifications are done with alt-shift. I suggest a `alt-shift-control` combo, that while pressed would enable an overlay mode called **Pane Control Mode**. ![windows-terminal_pane-control-mode_mockup](https://github.com/microsoft/terminal/assets/1466771/49a3afb9-85e6-4f58-bfe3-0490b6530e7b) While alt-shift-control is down, we get - Pane index hints, because we have "Move pane, index: X" actions, but as of now, how does the user know the correct index? Also, "Focus/Close pane, index: X" actions can be added later. This is also a visible marker to know that you're in pane control mode. - Borders of panes become resizable with a mouse. - Panes become draggable. Dragging one pane to another switches their positions. Dragging pane to tab bar ejects in to a new tab. Dragging out of window ejects to new window. - (debatable) hovering over edges of an active pane shows "+" button to add a pane from that side.
Author
Owner

@piradata commented on GitHub (Nov 16, 2023):

I suggest a alt-shift-control combo, that while pressed would enable an overlay mode called Pane Control Mode.

I like this idea @klkvsk , and if we combine this with the lumino demo that @dhirschfeld mentioned would be perfect.

https://lumino.readthedocs.io/en/latest/examples/dockpanel/index.html

@piradata commented on GitHub (Nov 16, 2023): > I suggest a `alt-shift-control` combo, that while pressed would enable an overlay mode called **Pane Control Mode**. I like this idea @klkvsk , and if we combine this with the lumino demo that @dhirschfeld mentioned would be perfect. https://lumino.readthedocs.io/en/latest/examples/dockpanel/index.html
Author
Owner

@giammin commented on GitHub (Dec 11, 2024):

any update on this new feature?
I hate having all my pane and then when i start a new debug session with VS it opens the application console on a new tab

@giammin commented on GitHub (Dec 11, 2024): any update on this new feature? I hate having all my pane and then when i start a new debug session with VS it opens the application console on a new tab
Author
Owner

@zadjii-msft commented on GitHub (Dec 11, 2024):

Nope, nothing to update here.

Though, if this is really bothering you, you could probably use move-pane -t 0 from the commandline mode of the Command Palette to move a pane (a tab) into another tab:

Image

(Open the command palette, then backspace to get rid of the >)

@zadjii-msft commented on GitHub (Dec 11, 2024): Nope, nothing to update here. Though, if this is really bothering you, you could probably use `move-pane -t 0` from the commandline mode of the Command Palette to move a pane (a tab) into another tab: ![Image](https://github.com/user-attachments/assets/dea95c17-5084-4ed9-8a2b-ed17f91ad236) (Open the command palette, then backspace to get rid of the `>`)
Author
Owner

@giammin commented on GitHub (Dec 11, 2024):

Nope, nothing to update here.

Though, if this is really bothering you, you could probably use move-pane -t 0 from the commandline mode of the Command Palette to move a pane (a tab) into another tab:

Image

(Open the command palette, then backspace to get rid of the >)

awesome! this is what I was loking for! thanks

@giammin commented on GitHub (Dec 11, 2024): > Nope, nothing to update here. > > Though, if this is really bothering you, you could probably use `move-pane -t 0` from the commandline mode of the Command Palette to move a pane (a tab) into another tab: > > ![Image](https://github.com/user-attachments/assets/dea95c17-5084-4ed9-8a2b-ed17f91ad236) > > (Open the command palette, then backspace to get rid of the `>`) awesome! this is what I was loking for! thanks
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#6442