Video yükleniyor...
Video Yüklenemedi
Work-in-progress: a new split layout framework for nearly all Apple platforms (macOS, iOS, etc.). A mix of SwiftUI and raw CoreAnimation. The goal is "every frame perfect" animation. Still very wip, but getting there! Goal is to bring it back to Ghostty eventually.
341,610 görüntüleme • 3 ay önce •via X (Twitter)
57 Yorum

all of this because macos doesnt let you do window management

have you checked out BonSplit?

Al worked on this with me :) @almonk

@almonk To be clear, BonSplit is awesome. This lib serves a slight diff need, simpler in some ways (no tabs) and more complex in others (multi platform).

Looks very nice. Really smooth. But when you said "tmux" experiment, I was hoping for a "keep terminal running" feature. Not the panes part 😬

Haha fear not

@morew4rd Unless on Linux? Or will Linux get some love too

@morew4rd Web client for Linux initially or plop down into a TUI in ghostty or wherever. Not as feature rich

@morew4rd Ok, how come not as feature rich? Is Linux a pita to develop these things on? I genuinely don't know

@morew4rd Terminals just support the features I want

Oh no, not factorial spiral again. Instead of trying to be hyprland, I believe trying to be niri makes more sense in window management. Niri + the native overview is way more productive than the factorial spiral window management in my day to day experience.

Well first this is macOS

My point is this: creating a new window using a split layout sacrifices the wrong thing. I always find that a half-split weakens the content in the old window in some way: creating a bottom window makes the existing one jump, sometimes pushing content out of the viewport. Creating a right window causes the text in the left window to wrap awkwardly. When the user creates a new window, the existing window’s size shouldn’t change at all. Don’t make the user wonder whether the view of the existing window will be compressed. It simply shouldn’t. IMO, this is where Niri makes a much better design choice: none of the existing windows are squeezed/resized, so my content stays exactly the same.

is this your tmux experiment?

This is just a library, but it will be used for the native app for my multiplexer yes.

🙌

New variant of 2048 dropped

Can we save these so they can be restored?

That's a library user concern. The actual split layout is a caller-provided immutable data structure they can choose to make Codable (the Apple encoding protocol) if they want.

That is actually a better answer than I was hoping for. I use this to manage my tmux sessions and I think I can swap tmux out for your codable protocol.

I NEED THIS. Actually, I need this in my terminal, but I also need this as a proper window manager on MacOS. The Hyprland vibe is perfect.

Tree data structure?

Tree data structure but rasterized down to a 2D absolute layout so the view hierarchy is actually flat.

Love it.

Really cool! It's getting more interesting when you add multiple windows and the ability to drag things out and in
We built demos _exactly_ like this for/in Delphi in something like 2007 if not before that. I find it funny how often software repeats itself. The IDE and VCL had docking that worked just like this.

The concept is ancient. I’ve been shopping production split layouts for years myself. The new part here is the focus on every frame perfect animations.

I’ve been using a Mac app that does this called Divvy for like 10+ years. It’s one of the first things in install on any new Mac.

Yeah divvy is great. This isn’t a window manager. This is a reusable embedded lib for apps. Also not a new concept (I’ve shipped a diff one for 3 years to millions of daily users. This is the 6th I’ve built across platforms.). The newness is the every frame perfect animation goal

very cool

At that point just use @maestriapp

Can the panes only run processes that this application launched? I see how this would be useful in Ghostty but I want to put all my macOS windows in there and have some tiling window manager experience.

We had responsive GUIs in the 2000s. Now, 25 years later, this became a lost technology, living only as artisanal hobby projects.

This is almost identical as how panes work in

You know you'll never use it but this is cool as hell

🔥

Add tabs in panes and you've got me.

Every-frame-perfect animation on Apple platforms is painful. SwiftUI still has rough edges with scroll performance.

Ironically pretty darn easy with plain CA though

Is this going to come down to libghostty?

No that’s not UI

macOS 4 life 💪

🥀for tmux (am so pump to have a better solution)

well, this is also the split framework my multiplexer is going to use... (it works in TUI too, but there is a native app, and web app, and mobile app...)

This is so dope

Okay, this is awesome. I love that you're making the things you create into proper frameworks. Allows all of us to reuse and potentially also feed back improvements ofc.

Will this be just for ghostty or can we build other apps on top of it? I was looking for something like this a while ago and ended up having to do something custom

Generic framework

any chance we'll get background sessions bascially asking for gmux

Wow, would love to collab or use this with c11, our agent optimized terminal multiplexer

I got inspired and made a JS version

Nice! We need a better cmux

Looks nice

the every-frame-perfect goal is exactly why you drop out of swiftui for the transitions. its layout pass can re-measure mid-animation and you get a hitch you can't chase down. driving CA directly is the only way to own the timeline.

nice! suggestion: would be good to include a reduce motion or no animation setting

thats a macOS setting. if you set reduce motion on macOS it doesn't animate at all, we respect it.

perfect!
