Skip to main content

Overview

Size adjustment actions provide fine-grained control over window dimensions and position. Unlike positioning actions that set absolute sizes, these actions make incremental changes relative to the current window state. Four categories of size adjustments are defined (lines 82-85):
static var sizeAdjustment: [WindowDirection] // General sizing
static var shrink: [WindowDirection]          // Directional shrinking
static var grow: [WindowDirection]            // Directional growing
static var move: [WindowDirection]            // Directional movement

General Size Adjustment

Defined in the static sizeAdjustment array (line 82):
static var sizeAdjustment: [WindowDirection] { 
    [.larger, .smaller, .scaleUp, .scaleDown] 
}

larger

larger
WindowDirection
Increases window size by a fixed increment.Raw Value: "Larger"URL Scheme: loop://LargerBehavior:
  • Expands window uniformly in all directions
  • Maintains window center position
  • Increment size is configurable in Loop settings
  • Stops at screen boundaries
Use Case: Quickly make window bigger while keeping it centered

smaller

smaller
WindowDirection
Decreases window size by a fixed increment.Raw Value: "Smaller"URL Scheme: loop://SmallerBehavior:
  • Shrinks window uniformly in all directions
  • Maintains window center position
  • Increment size is configurable in Loop settings
  • Stops at minimum window size
Use Case: Quickly make window smaller while keeping it centered

scaleUp

scaleUp
WindowDirection
Scales window up proportionally.Raw Value: "ScaleUp"URL Scheme: loop://ScaleUpBehavior:
  • Increases window size by a percentage multiplier
  • Preserves window aspect ratio
  • Maintains window center position
  • More gradual than .larger
Use Case: Fine-tuned proportional size increases

scaleDown

scaleDown
WindowDirection
Scales window down proportionally.Raw Value: "ScaleDown"URL Scheme: loop://ScaleDownBehavior:
  • Decreases window size by a percentage multiplier
  • Preserves window aspect ratio
  • Maintains window center position
  • More gradual than .smaller
Use Case: Fine-tuned proportional size decreases

Computed Property

willAdjustSize
Bool
Returns true for all general size adjustment actions (line 92)
var willAdjustSize: Bool { 
    WindowDirection.sizeAdjustment.contains(self) 
}

Shrink Actions

Defined in the static shrink array (line 83):
static var shrink: [WindowDirection] { 
    [.shrinkTop, .shrinkBottom, .shrinkRight, .shrinkLeft, 
     .shrinkHorizontal, .shrinkVertical] 
}

Directional Shrinking

shrinkTop
WindowDirection
Shrinks window from the top edge downward.Raw Value: "ShrinkTop"URL Scheme: loop://ShrinkTopBehavior:
  • Reduces window height from top edge
  • Bottom edge remains fixed
  • Width unchanged
Visual:
Before:        After:
┌────────┐     ┌────────┐
│        │     ├────────┤ ← Top edge moves down
│        │     │        │
│        │     │        │
└────────┘     └────────┘
shrinkBottom
WindowDirection
Shrinks window from the bottom edge upward.Raw Value: "ShrinkBottom"URL Scheme: loop://ShrinkBottomBehavior:
  • Reduces window height from bottom edge
  • Top edge remains fixed
  • Width unchanged
Visual:
Before:        After:
┌────────┐     ┌────────┐
│        │     │        │
│        │     │        │
│        │     ├────────┤ ← Bottom edge moves up
└────────┘     └────────┘
shrinkLeft
WindowDirection
Shrinks window from the left edge rightward.Raw Value: "ShrinkLeft"URL Scheme: loop://ShrinkLeftBehavior:
  • Reduces window width from left edge
  • Right edge remains fixed
  • Height unchanged
Visual:
Before:        After:
┌────────┐     ┌──────┐
│        │     │      │
│        │  →  │      │
│        │     │      │
└────────┘     └──────┘
shrinkRight
WindowDirection
Shrinks window from the right edge leftward.Raw Value: "ShrinkRight"URL Scheme: loop://ShrinkRightBehavior:
  • Reduces window width from right edge
  • Left edge remains fixed
  • Height unchanged
Visual:
Before:        After:
┌────────┐     ┌──────┐
│        │     │      │
│        │  →  │      │
│        │     │      │
└────────┘     └──────┘

Combined Shrinking

shrinkHorizontal
WindowDirection
Shrinks window width from both left and right edges.Raw Value: "ShrinkHorizontal"URL Scheme: loop://ShrinkHorizontalBehavior:
  • Reduces width equally from both sides
  • Maintains horizontal center position
  • Height unchanged
Visual:
Before:        After:
┌────────┐     ┌─────┐
│        │     │     │
│        │  →  │     │
│        │     │     │
└────────┘     └─────┘
shrinkVertical
WindowDirection
Shrinks window height from both top and bottom edges.Raw Value: "ShrinkVertical"URL Scheme: loop://ShrinkVerticalBehavior:
  • Reduces height equally from both sides
  • Maintains vertical center position
  • Width unchanged
Visual:
Before:        After:
┌────────┐     ┌────────┐
│        │     ├────────┤
│        │  →  │        │
│        │     ├────────┤
└────────┘     └────────┘

Computed Property

willShrink
Bool
Returns true for all shrink actions (line 93)
var willShrink: Bool { 
    WindowDirection.shrink.contains(self) 
}

Grow Actions

Defined in the static grow array (line 84):
static var grow: [WindowDirection] { 
    [.growTop, .growBottom, .growRight, .growLeft, 
     .growHorizontal, .growVertical] 
}

Directional Growing

growTop
WindowDirection
Grows window from the top edge upward.Raw Value: "GrowTop"URL Scheme: loop://GrowTopBehavior:
  • Extends window height upward
  • Bottom edge remains fixed
  • Width unchanged
  • Stops at screen top boundary
growBottom
WindowDirection
Grows window from the bottom edge downward.Raw Value: "GrowBottom"URL Scheme: loop://GrowBottomBehavior:
  • Extends window height downward
  • Top edge remains fixed
  • Width unchanged
  • Stops at screen bottom boundary
growLeft
WindowDirection
Grows window from the left edge leftward.Raw Value: "GrowLeft"URL Scheme: loop://GrowLeftBehavior:
  • Extends window width to the left
  • Right edge remains fixed
  • Height unchanged
  • Stops at screen left boundary
growRight
WindowDirection
Grows window from the right edge rightward.Raw Value: "GrowRight"URL Scheme: loop://GrowRightBehavior:
  • Extends window width to the right
  • Left edge remains fixed
  • Height unchanged
  • Stops at screen right boundary

Combined Growing

growHorizontal
WindowDirection
Grows window width in both directions.Raw Value: "GrowHorizontal"URL Scheme: loop://GrowHorizontalBehavior:
  • Extends width equally left and right
  • Maintains horizontal center position
  • Height unchanged
  • Stops at screen boundaries
growVertical
WindowDirection
Grows window height in both directions.Raw Value: "GrowVertical"URL Scheme: loop://GrowVerticalBehavior:
  • Extends height equally up and down
  • Maintains vertical center position
  • Width unchanged
  • Stops at screen boundaries

Computed Property

willGrow
Bool
Returns true for all grow actions (line 94)
var willGrow: Bool { 
    WindowDirection.grow.contains(self) 
}

Move Actions

Defined in the static move array (line 85):
static var move: [WindowDirection] { 
    [.moveUp, .moveDown, .moveRight, .moveLeft] 
}

Directional Movement

moveUp
WindowDirection
Moves window upward by a fixed increment.Raw Value: "MoveUp"URL Scheme: loop://MoveUpBehavior:
  • Shifts entire window upward
  • Size unchanged
  • Stops at screen top boundary
  • Increment configurable in settings
moveDown
WindowDirection
Moves window downward by a fixed increment.Raw Value: "MoveDown"URL Scheme: loop://MoveDownBehavior:
  • Shifts entire window downward
  • Size unchanged
  • Stops at screen bottom boundary
  • Increment configurable in settings
moveLeft
WindowDirection
Moves window left by a fixed increment.Raw Value: "MoveLeft"URL Scheme: loop://MoveLeftBehavior:
  • Shifts entire window to the left
  • Size unchanged
  • Stops at screen left boundary
  • Increment configurable in settings
moveRight
WindowDirection
Moves window right by a fixed increment.Raw Value: "MoveRight"URL Scheme: loop://MoveRightBehavior:
  • Shifts entire window to the right
  • Size unchanged
  • Stops at screen right boundary
  • Increment configurable in settings

Computed Property

willMove
Bool
Returns true for all move actions (line 95)
var willMove: Bool { 
    WindowDirection.move.contains(self) 
}

Usage Examples

Incremental Resizing

# Make window progressively larger
open "loop://Larger"
open "loop://Larger"
open "loop://Larger"

# Make window progressively smaller
open "loop://Smaller"
open "loop://Smaller"

Edge Adjustment

# Adjust only the right edge to fit content
open "loop://GrowRight"    # Expand right edge
open "loop://ShrinkRight"  # Contract right edge

# Adjust only the bottom edge
open "loop://GrowBottom"
open "loop://ShrinkBottom"

Precise Positioning

# Nudge window into perfect position
open "loop://MoveLeft"
open "loop://MoveUp"
open "loop://MoveUp"

Keyboard-Driven Workflow

Bind these to keyboard shortcuts for precise window control:
  • Cmd+Ctrl+Arrow Keys: Move window
  • Cmd+Option+Arrow Keys: Grow edges
  • Cmd+Shift+Arrow Keys: Shrink edges
  • Cmd+Plus/Minus: Larger/Smaller

Radial Menu Behavior

Size adjustment, shrink, grow, and move actions don’t have directional angles in the radial menu (line 102):
var hasRadialMenuAngle: Bool {
    let noAngleActions: [WindowDirection] = [...]
    return !(... || willAdjustSize || willShrink || willGrow || willMove)
}
They appear as menu items rather than directional triggers.

Configuration

Increment sizes for these actions are configurable in Loop’s settings:
  • Size adjustment increment: Amount for .larger and .smaller
  • Scale factor: Multiplier for .scaleUp and .scaleDown
  • Grow/shrink increment: Amount for directional grow/shrink
  • Move increment: Distance for directional moves

Halves & Quarters

Absolute positioning alternatives

General Actions

Maximize and fill actions

Focus Actions

Navigate between windows

WindowDirection Overview

Complete action reference

Build docs developers (and LLMs) love