Skip to content

Feature/workspaces#4

Open
BartInTheField wants to merge 3 commits intoceIia:mainfrom
BartInTheField:feature/workspaces
Open

Feature/workspaces#4
BartInTheField wants to merge 3 commits intoceIia:mainfrom
BartInTheField:feature/workspaces

Conversation

@BartInTheField
Copy link
Copy Markdown

Introduction

First of all thank you for setting this up I'm in love with this concept and really enjoy the experience. One key feature I was missing was the ability to have multiple workspaces for example for different projects.

Summary

  • Adds workspaces — independent groups of terminals, each with its own canvas layout and zoom level. All workspaces remain live in memory for instant switching.
  • New Workspace and WorkspaceManager classes handle workspace lifecycle (create, delete, rename, switch). Ghostty runtime callbacks are routed to the correct workspace's node manager via surface lookup.
  • Sidebar updated with a workspace section (click to switch, right-click to rename/delete). Canvas state persistence migrated to a multi-workspace format with backward-compatible loading of the legacy single-workspace format.

Keyboard shortcuts

Action Shortcut
New Workspace Cmd+Shift+N
Next / Previous Workspace Cmd+Shift+] / Cmd+Shift+[
Switch to Workspace 1–9 Cmd+1Cmd+9

Key changes

  • New files: Workspace.swift, WorkspaceManager.swift
  • AppDelegate: Replaced direct TerminalNodeManager usage with WorkspaceManager; all terminal actions route through activeNodeManager
  • CanvasView: Added detachAllNodes() / attachNodes(_:) for swapping workspace node sets
  • CanvasState: New WorkspaceState nested type with automatic migration from the old flat format
  • SidebarView: Workspace list with active indicator, terminal count badge, rename/delete context menu
  • Menu bar: Added workspace menu items under the Terminal menu

@ceIia
Copy link
Copy Markdown
Owner

ceIia commented Apr 2, 2026

thanks for this @BartInTheField

haven't tried it yet but, but i don't know how i feel about the concept of workspaces. wouldn't having a bunch of terminals in an area and another bunch in another area of the main canvas be enough?

i've come to find that simple spatial separation/grouping was more than enough for context separation, without adding too much friction when switching between them

@BartInTheField
Copy link
Copy Markdown
Author

thanks for this @BartInTheField

haven't tried it yet but, but i don't know how i feel about the concept of workspaces. wouldn't having a bunch of terminals in an area and another bunch in another area of the main canvas be enough?

i've come to find that simple spatial separation/grouping was more than enough for context separation, without adding too much friction when switching between them

I did feel the same way before, but found the urge to separate work and personal projects for example. The nice thing is that people could still use just one workspace if they desire.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants