Rectangle is a window management app based on Spectacle, written in Swift.
Rectangle supports macOS v10.11+.
You can download the latest dmg from https://rectangleapp.com or the Releases page.
Or install with brew cask:
brew install --cask rectangle
The keyboard shortcuts are self explanatory, but the snap areas can use some explanation if you've never used them on Windows or other window management apps.
Drag a window to the edge of the screen. When the mouse cursor reaches the edge of the screen, you'll see a footprint that Rectangle will attempt to resize and move the window to when the click is released.
Snap Area | Resulting Action |
---|---|
Left or right edge | Left or right half |
Top | Maximize |
Corners | Quarter in respective corner |
Left or right edge, just above or below a corner | Top or bottom half |
Bottom left, center, or right third | Respective third |
Bottom left or right third, then drag to bottom center | First or last two thirds, respectively |
- Focus the app that you want to ignore (make a window from that app frontmost).
- Open the Rectangle menu and select "Ignore app"
Terminal Commands for Hidden Preferences
- Rectangle uses MASShortcut for keyboard shortcut recording. Spectacle used its own shortcut recorder.
- Rectangle has additional window actions: move windows to each edge without resizing, maximize only the height of a window, almost maximizing a window.
- Next/prev screen thirds is replaced with explicitly first third, first two thirds, center third, last two thirds, and last third. Screen orientation is taken into account, as in first third will be left third on landscape and top third on portrait.
- You can however emulate Spectacle's third cycling using first and last third actions. So, if you repeatedly execute first third, it will cycle through thirds (first, center, last) and vice-versa with the last third.
- There's an option to have windows traverse across displays on subsequent left or right executions.
- Windows will snap when dragged to edges/corners of the screen. This can be disabled.
Apple never released a public API for Spaces, so any direct interaction with Spaces uses private APIs that are actually a bit shaky. Using the private API adds enough complexity to the app to where I feel it's better off without it. If Apple decides to release a public API for it, I'll add it in.
By default iTerm2 will only resize in increments of character widths. There might be a setting inside iTerm2 to disable this, but you can change it with the following command.
defaults write com.googlecode.iterm2 DisableWindowSizeSnap -integer 1
This appears to affect only a small amount of users. To prevent this from happening, uncheck the box for "Snap windows by dragging". See issue 317.
If windows aren't resizing or moving as you expect, here's some initial steps to get to the bottom of it. Most issues of this type have been caused by other apps.
- Make sure macOS is up to date, if possible.
- Restart your machine.
- Make sure there are no other window manager applications running.
- Make sure that the app whose windows are not behaving properly does not have any conflicting keyboard shortcuts.
- Try using the menu items to execute a window action or changing the keyboard shortcut to something different so we can tell if it's a keyboard shortcut issue or not.
- Enable debug logging, as per the instructions in the following section.
- The logs are pretty straightforward. If your calculated rect and your resulting rect are identical, chances are that there is another application causing issues. Save your logs if needed to attach to an issue if you create one.
- If you suspect there may be another application causing issues, try creating and logging in as a new macOS user.
- Hold down the alt (option) key with the Rectangle menu open.
- Select the "View Logging..." menu item, which is in place of the "About" menu item.
- Logging will appear in the window as you perform Rectangle commands.
The configuration for Rectangle is stored using NSUserDefaults, meaning it is stored in the following location:
~/Library/Preferences/com.knollsoft.Rectangle.plist
Note that shortcuts in v0.41+ are stored in a different format and will not load in prior versions.
That file can be backed up or transferred to other machines.
If you are using Rectangle v0.44+, you can also use the import/export button in the Preferences pane to share to your preferences and keyboard shortcuts across machines using a JSON file.
Rectangle can be uninstalled by moving it to the trash. Prior to moving it to the trash, you might want to uncheck the box for launching on login to unregister the launcher, but this is not necessary. You can remove the Rectangle defaults from your machine with the following terminal command:
defaults delete com.knollsoft.Rectangle
Logic from Rectangle is used in the Multitouch app. The Hookshot app is entirely built on top of Rectangle. If you contribute significant code or localizations that get merged into Rectangle, you get a free license of Multitouch or Hookshot. Contributors to Sparkle, MASShortcut, or Spectacle can also receive free Multitouch or Hookshot licenses (just send me a direct message on Gitter).
If you would like to contribute to localization, all of the translations are held in the Main.strings per language. If you would like to add a localization but one doesn't currently exist and you don't know how to create one, create an issue and a translation file can be initialized.
Pull requests for new localizations or improvements on existing localizations are welcome.
Rectangle uses CocoaPods to install Sparkle and MASShortcut.
- Make sure CocoaPods is installed and up to date on your machine (
sudo gem install cocoapods
). - Execute
pod install
the root directory of the project. - Open the generated xcworkspace file (
open Rectangle.xcworkspace
).