TL;DR Could you imagine a 0.5s fade-in animation every time you ran cd in the terminal? That's what window switching in macOS feels like, but with Ghostty I got back one of my favorite tiling window manager features.

i3

A few years ago I ran Manjaro w/ i3 as my daily driver. After the initial learning curve, the sheer speed a tiling window manager provides is second to none.

One of my favorite features was the scratchpad. Scratchpad allowed you to maintain the tiling nature of the workspace but still have toggleable overlay(s) available.

I most frequently used this to create a scratchpad terminal (I used urxvt at the time because of font support and speed).

# move the currently focused window to the scratchpad
bindsym $mod+Shift+minus move scratchpad

# Show the next scratchpad window or hide the focused scratchpad window.
# If there are multiple scratchpad windows, this command cycles through them.
bindsym $mod+minus scratchpad show

macOS window management sucks

macOS Tahoe window pinning sucks. period. It sucks even more in a multi monitor setup when trying to find the magic two pixels in order to pin a window when the edge is between two monitors.

If I had a choice I would either work off my Framework 13 running Bluefin or my Debian dev server.

Needless to say, the window management situation in macOS leads me to have a bunch of overlapping 3/4 screen windows and using CTRL+ and CTRL+ to switch around. I'm not even going to go into the monstrosity that is Stage Manager.

Honestly I probably should dive into a tiling manager like Rectangle or AeroSpace, but for now I'll suffer. While writing this article I found out about holding Option to avoid needing to snap via edge proximity, which definitely helps.

Ghostty

Enter Ghostty, "a fast, feature-rich, and cross-platform terminal emulator".

Ghostty feels snappier and lighter than iTerm2, so I've been using it for pretty much all command line work (aside from some ssh sessions that cannot handle Ghostty's terminal profile).

While exploring its configuration options one day I came across the quick terminal feature.

I quickly realized it had the potential to completely fix my window management as it relates to the terminal.

My work is mostly spent switching between the terminal and one or two other applications. Usually some combination of a web browser and an IDE.

Even with keyboard shortcuts and reducing motion, there is no circumventing the animation.

With the quick terminal I can instantaneously swap between my terminal and any other window via a globally available overlay:

Here's how it works via the Ghostty config:

quick-terminal-position = center
quick-terminal-animation-duration = 0
keybind = global:super+`=toggle_quick_terminal
quick-terminal-size = 70%,70%

In layman's terms: globally bind +` to toggle a Ghostty quick terminal over the active screen that has zero animation, is centered and takes up 70% of the screen.

The result

The quick terminal allows me to freely move between a task and my terminal at breakneck speed. I'm not waiting for macOS animations, I'm not trying to remember which workspace I put my terminal, I'm not wasting time.

Now combine w/ tmux, neovim and k9s I also get:

  • my global TODO list / task tracker (~/TODO.md). I've tried other task management systems, but nothing beats text.
    • and with this list always being a two keystroke combination away, I actually use it more consistently
  • a consistent view of my k8s clusters and connections, useful for toggling between CI / deployment systems and the target cluster(s)
  • a few persistent Claude Code / Codex sessions I use for interrogating local repositories / docs searching
  • and any other terminal sessions for debugging, quick edits, opening codebases in VS Code, etc...

Limitations

Most of the limitations I had got fixed in the 1.3.0 update as I was writing this piece.

  • sometimes Ghostty doesn't respect the quick-terminal-size config option
  • sometimes first open takes 3x keypress
  • resizing when monitor / screen layout changes can result in broken tmux layout (need to investigate if still occurring, since I mostly stopped using the quick-terminal on secondary screens to avoid this)
  • want to customize prompt if in the quick-terminal (fixed via addition of GHOSTTY_QUICK_TERMINAL)