正在加载视频...

视频加载失败

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 次观看 • 3 个月前 •via X (Twitter)

57 条评论

maria 的头像
maria3 个月前

all of this because macos doesnt let you do window management

Jake 🎉 的头像
Jake 🎉3 个月前

have you checked out BonSplit?

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

Al worked on this with me :) @almonk

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

@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).

moreward (moreboxed.com) 的头像
moreward (moreboxed.com)3 个月前

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

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

Haha fear not

Mark 的头像
Mark3 个月前

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

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

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

Mark 的头像
Mark3 个月前

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

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

@morew4rd Terminals just support the features I want

Junsong Li 的头像
Junsong Li3 个月前

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.

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

Well first this is macOS

Junsong Li 的头像
Junsong Li3 个月前

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.

Reza Karegaran 的头像
Reza Karegaran3 个月前

is this your tmux experiment?

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

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

Reza Karegaran 的头像
Reza Karegaran3 个月前

🙌

Jakub Kozłowski 的头像
Jakub Kozłowski3 个月前

New variant of 2048 dropped

Josh 的头像
Josh3 个月前

Can we save these so they can be restored?

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

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.

Josh 的头像
Josh3 个月前

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.

Sebastien-console_buche 🪵 的头像
Sebastien-console_buche 🪵3 个月前

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.

Moody 的头像
Moody3 个月前

Tree data structure?

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

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

Ajey Gore 的头像
Ajey Gore3 个月前

Love it.

Dominik Roszkowski 的头像
Dominik Roszkowski3 个月前

Really cool! It's getting more interesting when you add multiple windows and the ability to drag things out and in

Steve Trefethen 的头像
Steve Trefethen3 个月前

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.

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

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.

Andy Matthews 的头像
Andy Matthews3 个月前

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.

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

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

Adam 的头像
Adam3 个月前

very cool

Evert Junior 的头像
Evert Junior3 个月前

At that point just use @maestriapp

Matthew Sanabria 的头像
Matthew Sanabria3 个月前

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.

Maciej Gajewski 的头像
Maciej Gajewski3 个月前

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

Christian Alares 的头像
Christian Alares3 个月前

This is almost identical as how panes work in

Hieu 🚀 的头像
Hieu 🚀3 个月前

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

Raffi 的头像
Raffi3 个月前

🔥

Kevin 的头像
Kevin3 个月前

Add tabs in panes and you've got me.

Vito Botta 的头像
Vito Botta3 个月前

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

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

Ironically pretty darn easy with plain CA though

vish 的头像
vish3 个月前

Is this going to come down to libghostty?

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

No that’s not UI

linkarzu 的头像
linkarzu3 个月前

macOS 4 life 💪

Blacktop 的头像
Blacktop3 个月前

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

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

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...)

Landon 的头像
Landon3 个月前

This is so dope

Toby 🇪🇺🇺🇦 的头像
Toby 🇪🇺🇺🇦3 个月前

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.

Sam Kerr 的头像
Sam Kerr3 个月前

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

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

Generic framework

spacy 的头像
spacy3 个月前

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

PhaseOne(Atin) 的头像
PhaseOne(Atin)3 个月前

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

Schappi 的头像
Schappi3 个月前

I got inspired and made a JS version

Jihoon 的头像
Jihoon3 个月前

Nice! We need a better cmux

Seanghay 的头像
Seanghay3 个月前

Looks nice

rusa 的头像
rusa1 个月前

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.

asd 的头像
asd3 个月前

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

Mitchell Hashimoto 的头像
Mitchell Hashimoto3 个月前

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

asd 的头像
asd3 个月前

perfect!

相关视频