Skip to content

Flip 2.0.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Sep 21:06

Flip is configured by one file, config.json, and reads no other. It is
grouped the way the settings window is — general, switcher, shortcuts,
arrange and excluded — so a setting sits under the page whose switch changes
it, and the application keys are the bindings inside shortcuts. An edit made
by hand is picked up while Flip runs, settings included: those used to need a
restart. Nothing carries over from a 1.x install, so this is a major version:
Flip starts from the defaults and you set it up once.

Every arrangement key is in the file too. arrange.keys names all eleven —
"left-half": "left", "maximize": "return", "top-left": "u" — by the same
name flip arrange takes, so the keys can be read and changed where the rest of
the configuration is rather than only being listed in the settings window.
Naming one leaves the other ten alone; a name no arrangement answers to is an
error. Keys are written the way a binding is: a character, or a name for the ones
that type nothing — left, right, up, down, return, f1 to f12.

Filling the screen is called maximizing. flip arrange fill is now
flip arrange maximize, and the settings window says Maximize. The behaviour is
unchanged, toggle and all.

Modifiers are spelled one way throughout the file. Every modifier setting is
an array of keywords — switcher.leader is ["command"], arrange.leader is
["option", "control"], arrange.displayMove is ["option", "shift"] — rather
than a word per setting with a spelling of its own. The words are command,
option, control and shift, and they are read in any order. A combination a
setting does not offer is an error rather than a silent fallback: Flip logs it,
runs on the defaults and leaves the file alone for you to look at.

Moving a window to the next display follows the arrangement. It stepped
through the displays in the order the window server hands them over, which is by
display number: with two screens side by side, ⇧⌥→ was as likely to send the
window left as right, and on three it was anyone's guess. They are now ordered
the way they stand in System Settings — left to right, then top to bottom.

⌘Tab now opens the switcher, and ⌥Tab narrows to the application in front.
The two were the other way round, which meant the first thing anybody had to
learn was that the key they had used for years now did something else. ⌘Tab is
the switcher every Mac user already reaches for; Flip only changes what it lists,
which is windows rather than applications. Narrowing to one application moves to
⌥Tab, where stock macOS uses ⌘` — a key half the keyboards in Europe put
somewhere else. Swap them back in Settings › Switcher if you prefer.

Closing a window with ⌫ works in both grids. It answered to the switcher's
leader alone, so in the other grid — the one held open by the other hotkey — the
key did nothing. It now answers to whichever modifier is holding the grid open,
and the same goes for Return. A window action still wins: ⌃⌥↩ fills the window
behind the grid rather than committing.

flip permissions reports what macOS has granted, and exits nonzero when
something is missing — enough for a setup script to stop and say which, instead of
starting a Flip that quietly does nothing. It asks the running application rather
than answering for itself: a grant belongs to Flip's signature, and the command
has its own. Granting still cannot be scripted, and nothing that claims otherwise
should be trusted with it.


Installing

brew install --cask mxwnk/tap/flip

Or take the disk image below. Flip is signed with its own certificate
rather than notarised, so a copy installed by hand has to be allowed once
under System Settings › Privacy & Security. Homebrew does that for you.

Accessibility is asked for on first run, Screen Recording only if you
want thumbnails. Both survive updates: the signature is pinned to the same
certificate every release, and the pipeline refuses to publish one where
it has drifted.