Skip to main content

Overview

Halves and quarters provide the most common split-screen window positioning patterns. These actions position windows in exact fractions of the available screen space.

Halves

Defined in the static halves array (line 76):
static var halves: [WindowDirection] { 
    [.topHalf, .verticalCenterHalf, .bottomHalf, 
     .leftHalf, .horizontalCenterHalf, .rightHalf] 
}

Edge Halves

leftHalf
WindowDirection
Positions window on the left half of the screen.Raw Value: "LeftHalf"URL Scheme: loop://LeftHalfFrame Values: CGRect(x: 0, y: 0, width: 0.5, height: 1.0) (line 118)Visual:
┌─────────┬─────────┐
│         │         │
│  Window │         │
│   50%   │         │
│         │         │
└─────────┴─────────┘
rightHalf
WindowDirection
Positions window on the right half of the screen.Raw Value: "RightHalf"URL Scheme: loop://RightHalfFrame Values: CGRect(x: 0.5, y: 0, width: 0.5, height: 1.0) (line 116)Visual:
┌─────────┬─────────┐
│         │         │
│         │  Window │
│         │   50%   │
│         │         │
└─────────┴─────────┘
topHalf
WindowDirection
Positions window on the top half of the screen.Raw Value: "TopHalf"URL Scheme: loop://TopHalfFrame Values: CGRect(x: 0, y: 0, width: 1.0, height: 0.5) (line 115)Visual:
┌───────────────────┐
│   Window  50%     │
├───────────────────┤
│                   │
└───────────────────┘
bottomHalf
WindowDirection
Positions window on the bottom half of the screen.Raw Value: "BottomHalf"URL Scheme: loop://BottomHalfFrame Values: CGRect(x: 0, y: 0.5, width: 1.0, height: 0.5) (line 117)Visual:
┌───────────────────┐
│                   │
├───────────────────┤
│   Window  50%     │
└───────────────────┘

Center Halves

horizontalCenterHalf
WindowDirection
Positions window in the horizontal center, 50% width.Raw Value: "HorizontalCenterHalf"URL Scheme: loop://HorizontalCenterHalfFrame Values: CGRect(x: 0.25, y: 0, width: 0.5, height: 1.0) (line 119)Visual:
┌────┬──────────┬────┐
│    │          │    │
│25% │  Window  │25% │
│    │   50%    │    │
│    │          │    │
└────┴──────────┴────┘
Behavior:
  • 25% margin on left and right
  • Full height
  • Perfectly centered horizontally
Note: Identified by willCenter property (line 97)
verticalCenterHalf
WindowDirection
Positions window in the vertical center, 50% height.Raw Value: "VerticalCenterHalf"URL Scheme: loop://VerticalCenterHalfFrame Values: CGRect(x: 0, y: 0.25, width: 1.0, height: 0.5) (line 120)Visual:
┌───────────────────┐
│       25%         │
├───────────────────┤
│   Window  50%     │
├───────────────────┤
│       25%         │
└───────────────────┘
Behavior:
  • 25% margin on top and bottom
  • Full width
  • Perfectly centered vertically
Note: Identified by willCenter property (line 97)

Quarters

Defined in the static quarters array (line 77):
static var quarters: [WindowDirection] { 
    [.topLeftQuarter, .topRightQuarter, 
     .bottomLeftQuarter, .bottomRightQuarter] 
}
Each quarter occupies exactly 25% of the screen space (50% width × 50% height).

topLeftQuarter

topLeftQuarter
WindowDirection
Positions window in the top-left quarter of the screen.Raw Value: "TopLeftQuarter"URL Scheme: loop://TopLeftQuarterFrame Values: CGRect(x: 0, y: 0, width: 0.5, height: 0.5) (line 122)Visual:
┌─────────┬─────────┐
│ Window  │         │
│  25%    │         │
├─────────┼─────────┤
│         │         │
└─────────┴─────────┘

topRightQuarter

topRightQuarter
WindowDirection
Positions window in the top-right quarter of the screen.Raw Value: "TopRightQuarter"URL Scheme: loop://TopRightQuarterFrame Values: CGRect(x: 0.5, y: 0, width: 0.5, height: 0.5) (line 123)Visual:
┌─────────┬─────────┐
│         │ Window  │
│         │  25%    │
├─────────┼─────────┤
│         │         │
└─────────┴─────────┘

bottomLeftQuarter

bottomLeftQuarter
WindowDirection
Positions window in the bottom-left quarter of the screen.Raw Value: "BottomLeftQuarter"URL Scheme: loop://BottomLeftQuarterFrame Values: CGRect(x: 0, y: 0.5, width: 0.5, height: 0.5) (line 125)Visual:
┌─────────┬─────────┐
│         │         │
├─────────┼─────────┤
│ Window  │         │
│  25%    │         │
└─────────┴─────────┘

bottomRightQuarter

bottomRightQuarter
WindowDirection
Positions window in the bottom-right quarter of the screen.Raw Value: "BottomRightQuarter"URL Scheme: loop://BottomRightQuarterFrame Values: CGRect(x: 0.5, y: 0.5, width: 0.5, height: 0.5) (line 124)Visual:
┌─────────┬─────────┐
│         │         │
├─────────┼─────────┤
│         │ Window  │
│         │  25%    │
└─────────┴─────────┘

Complete Layout Visualization

All Halves

        Top Half              Vertical Center Half
┌───────────────────┐       ┌───────────────────┐
│    Top Half       │       │                   │
├─────────┬─────────┤       ├───────────────────┤
│  Left   │  Right  │       │ Vertical Center   │
│  Half   │  Half   │       ├───────────────────┤
├─────────┴─────────┤       │                   │
│   Bottom Half     │       └───────────────────┘
└───────────────────┘

  Horizontal Center Half
┌────┬──────────┬────┐
│    │          │    │
│    │Horiz Ctr │    │
│    │          │    │
└────┴──────────┴────┘

All Quarters

┌─────────┬─────────┐
│   Top   │   Top   │
│  Left   │  Right  │
├─────────┼─────────┤
│ Bottom  │ Bottom  │
│  Left   │  Right  │
└─────────┴─────────┘

Usage Examples

Split Screen Workflow

# Position two windows side-by-side
open "loop://LeftHalf"   # First window
open "loop://RightHalf"  # Second window

# Stack two windows vertically
open "loop://TopHalf"    # First window
open "loop://BottomHalf" # Second window

Quad Layout

# Create a 4-window grid layout
open "loop://TopLeftQuarter"     # Window 1
open "loop://TopRightQuarter"    # Window 2
open "loop://BottomLeftQuarter"  # Window 3
open "loop://BottomRightQuarter" # Window 4

Centered Presentation

# Center content with margins
open "loop://HorizontalCenterHalf" # Centered with side margins
open "loop://VerticalCenterHalf"   # Centered with top/bottom margins

Radial Menu Behavior

All halves and quarters have radial menu angles, appearing as directional options in the radial interface:
  • Left/Right/Top/Bottom Halves: Appear at cardinal directions
  • Quarters: Appear at diagonal angles
  • Center Halves: Appear at cardinal directions with centering indicator

Thirds & Fourths

More precise positioning options

General Actions

Maximize and centering actions

Size Adjustment

Fine-tune window sizes

WindowDirection Overview

Complete action reference

Build docs developers (and LLMs) love