Open Angelk90 opened 2 years ago
@austincondiff : What program is that in the video?
Opening would be better like this:
@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.?
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.
Please note the following behaviors:
(updated in issue description)
I would like to work on this issue. Can you please assign this to me
I'd like to work on this, can you please assign it to me? @austincondiff
@ahmdyasser Assigned. Let me know if you have any questions.
@ahmdyasser I just wanted to check if you were still working on this or if you needed any help with anything?
HI @austincondiff, I got a bit busy, you can re-assign it if anyone is up to it.
@austincondiff assign me this please!
@bombardier200 You have been assigned, might want to clone @ahmdyasser 's branch so you have some boilerplate.
Can you assign me this issue. I will work on this @austincondiff
@gokul1099 done, if you have questions feel free to ping me,
@bombardier200 I am working on the Drag to group functionality. Currently I implemented onDrag and onDrop on the terminal list view and wrote the DropDelagate. Dragging is working, while dropping I can access the terminal being dragged. But I could not access the terminal or group on which dragged terminal is dropped. Do you have any idea on how to get that? here is my link to file where I have added the DropDelegate https://github.com/gokul1099/CodeEdit/blob/terminal-tabs-split-view/CodeEdit/Features/DebugArea/Views/DebugAreaTerminalView.swift
@gokul1099 can you include a video? It will help me see what exactly you are talking about
https://github.com/CodeEditApp/CodeEdit/assets/42144106/d1125933-7c33-4394-a2f6-e4e913be7fd2
In the above video, while dragging I could access the terminal being dragged (third terminal). I want to access the second terminal also(as the dragged terminal is dropped on this), So that I can group both of them.
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.
CEContentUnavailableView("Multiple Selection")
Here's an alternative, which is what I was expecting until I saw your design which contradicted with it:
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
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.
Okay so I think this is how we should represent groups (I've also updated the issue description with this)...
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.
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!
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 */
}
}
Describe the solution you'd like
Being able to have more than one shell in a project would be great.
Please note the following behaviors:
Describe alternatives you've considered
Here are some examples of how it handles Webstorm:
https://user-images.githubusercontent.com/806104/161374050-7e8cc0b5-e731-49a3-a7de-6fd41328adea.mp4
Additional context
Depends on
350