镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

✨ Terminal Utility: Tabs & Split View #379

Description

@Angelk90

Describe the solution you'd like

Being able to have more than one shell in a project would be great.

image

Please note the following behaviors:

  • The plus icon adds a new terminal tab (not in a group).
  • The minus button closes the selected tab.
  • Press the delete key while terminal tab sidebar is in focus to close the selected tab.
  • Drag an ungrouped terminal tab on top of another ungrouped terminal tab to create a group.
  • Drag an ungrouped terminal tab into an existing group to add it to that group.
  • Drag a terminal tab within a group to reorder it.
  • Drag a grouped terminal tab to another group to move it to another group.

Describe alternatives you've considered

Here are some examples of how it handles Webstorm:

Schermata 2022-04-02 alle 09 40 31

Schermata 2022-04-02 alle 09 41 17

Schermata 2022-04-02 alle 09 42 11

Screen.Recording.2022-03-24.at.5.21.16.PM.mp4

Additional context

Schermata 2022-04-02 alle 09 37 02

Depends on

Activity

  1. changed the title [-]✨ Multi shell[/-] [+]✨ Multiple Terminals[/+] on Apr 2, 2022
  2. Angelk90 commented on Apr 2, 2022

    @Angelk90
    ContributorAuthor

    @austincondiff : What program is that in the video?

    Opening would be better like this:

    Registrazione.schermo.2022-04-02.alle.12.58.58.mov
  3. austincondiff commented on Apr 3, 2022

    @austincondiff
    Collaborator

    @Angelk90 I agree that it should open as a drawer like in your video. That video is from VSCode, and demonstrates how it handles terminal tabs and split terminal views. The question we need to answer for this is how are we going to do multiple terminals in this drawer? Will we use tabs? How will we handle split terminals? Will terminals be the only thing that exists in this drawer or will there be other kinds of things like output, issues, debug, console, etc.?

  4. austincondiff commented on Apr 12, 2022

    @austincondiff
    Collaborator

    This is the design that we will use for multiple terminals. We need this tab system in place in the status bar and the git controls moved up to the toolbar first, then in the terminal tab build the multiple terminal tabs UI, this is how this would look.

    01-macOS-code-edit-alternate-ui-drawer-tabs-terminal

    Please note the following behaviors:

    • The plus icon adds a new terminal tab (not in a group).
    • The minus button closes the selected tab.
    • Press the delete key while terminal tab sidebar is in focus to close the selected tab.
    • Drag an ungrouped terminal tab on top of another ungrouped terminal tab to create a group.
    • Drag an ungrouped terminal tab into an existing group to add it to that group.
    • Drag a terminal tab within a group to reorder it.
    • Drag a grouped terminal tab to another group to move it to another group.

    (updated in issue description)

  5. added
    wontfixThis will not be worked on
    and removed
    wontfixThis will not be worked on
    on Jun 11, 2022
  6. deleted a comment from stale on Jun 13, 2022
  7. amit-srt commented on Sep 2, 2022

    @amit-srt

    I would like to work on this issue. Can you please assign this to me

  8. changed the title [-]✨ Multiple Terminals[/-] [+]✨ Terminal Tabs & Split View[/+] on Sep 29, 2022
  9. ahmdyasser commented on Oct 4, 2022

    @ahmdyasser
    Contributor

    I'd like to work on this, can you please assign it to me? @austincondiff

  10. 18 remaining items

  11. Lancelotbronner commented on Dec 23, 2023

    @Lancelotbronner

    Hi @austincondiff, I'd like to tackle this!

    Here are a few assumptions I'm going with, based on what I've read here so far or what I think. Please correct me if any of them are wrong.

    • Groups cannot be nested
    • If there's multiple terminals/groups selected, show CEContentUnavailableView("Multiple Selection")
    • Selecting a group focuses the first terminal in that group
    • Selecting a terminal focuses that terminal, unless its in a different group, in which case it switches to that group

    Here's an alternative, which is what I was expecting until I saw your design which contradicted with it:

    • Selecting a group displays all of its terminals on the right-hand side, the first terminal starts focused
    • Selecting a terminal displays only that terminal on the right-hand side
  12. Lancelotbronner commented on Dec 23, 2023

    @Lancelotbronner

    Since names are getting quite long in this area, I have a little rename suggestion.
    It would also make sense with the way the folders are laid out.

    Here's what I mean:

    • UtilityAreaTerminalView -> TerminalUtilityView
    • UtilityAreaTerminalTab -> TerminalUtilityTab
    • UtilityAreaDebugView -> DebugUtilityView
    • UtilityAreaOutputView -> OutputUtilityView

    That way things which relate to the utility area as a whole are prefixed with UtilityArea while individual utilities have shorter names.

    I'm suggesting this because I'm getting names like

    • UtilityAreaTerminalSelection -> TerminalUtilitySelection
    • UtilityAreaTerminalGroup -> TerminalUtilityGroup
    • UtilityAreaTerminalTerminalView -> TerminalUtilityTerminalView
  13. austincondiff commented on Dec 23, 2023

    @austincondiff
    Collaborator

    I am in favor of those name changes. We still need to figure out a good way to represent the groups. Since the creation of this issue, our utility area has changed quite a bit. If you are able to join our weekly meetup at 3 PM UTC on Discord (15 minutes after the time of posting) we can discuss this as a group.

  14. austincondiff commented on Dec 23, 2023

    @austincondiff
    Collaborator

    Okay so I think this is how we should represent groups (I've also updated the issue description with this)...

    image

    As you can see, when a tab is split, both are under a group. By default the name of the group reflects how many terminals are in the split. The user can later however rename the group to whatever they want.

  15. Lancelotbronner commented on Dec 23, 2023

    @Lancelotbronner

    Ah sorry I hadn't seen your message earlier I would've liked to be at that meeting!

    Great for the naming changes, I'll make a separate PR for that later.

    The rest seems good, I got terminals side-by-side and grouping with a few small issues left.

    I should be able to finish this tomorrow!

  16. Lancelotbronner commented on Dec 24, 2023

    @Lancelotbronner

    Forgot about Christmas and somehow this counts the contents of the disclosure group as separate indices in the onMove function. This may take longer than expected.

    List(selection: $model.selectedTerminals) {
      ForEach(model.terminalGroups) { group
        UtilityAreaTerminalTab(group)
      }
    }
    
    // UtilityAreaTerminalTab
    if group.children.count == 1 {
        /* Terminal cell */
            .id(group.children[0])
    } else {
        DisclosureGroup {
            ForEach(group.children) { terminal in
                /* Terminal cell */ 
            }
        } label: {
            /* Terminal group title cell */
        }
    }
  17. changed the title [-]✨ Terminal Tabs & Split View[/-] [+]✨ Terminal Utility: Tabs & Split View[/+] on Dec 26, 2023
  18. moved this from 🚧 Blocked to 📋 Todo in CodeEdit Projecton Apr 19, 2025
  19. SoreGus commented on Jun 28, 2025

    @SoreGus

    Hi @austincondiff, I'm a iOS developer and really like this project and want to help.

    I already fork and clone the project and now I'm analyzing the UtililyAreaTerminalSidebar, put the preview to work, leaned how project is working like the ViewModel of the UtilityArea Feature.

    I read the documentation and I think I can start helping.

    Could you assign this issue to me?

    I already enter the discord server, but not send any message yet. I lost the weekly meeting cuz I'm from Brazil and made a mistake with the time.

    Thanks

  20. moved this from 📋 Todo to 🏃‍♂️ In Progress in CodeEdit Projecton Jun 28, 2025
  21. austincondiff commented on Jun 28, 2025

    @austincondiff
    Collaborator

    @SoreGus Assigned it to you. Thank you for your help. You didn't miss our meetup. If you'd like, you can still join in 8.5 hours from the time of posting (3:00 PM UTC).

    If you can think of a better way to represent these split groups feel free to do whatever feels best and most intuitive.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions