|
| 1 | +## ADDED Requirements |
| 2 | + |
| 3 | +### Requirement: Toggle window between monitors |
| 4 | +The system SHALL bind ALT+O to toggle the active window between monitors. If the window is on monitor 1, it moves to monitor 2. If pressed again, it moves back to monitor 1. |
| 5 | + |
| 6 | +#### Scenario: Toggle from primary to secondary |
| 7 | +- **WHEN** user presses ALT+O with an active window on the primary monitor |
| 8 | +- **THEN** the window moves to the secondary monitor |
| 9 | + |
| 10 | +#### Scenario: Toggle back to primary |
| 11 | +- **WHEN** user presses ALT+O again with the window now on the secondary monitor |
| 12 | +- **THEN** the window moves back to the primary monitor |
| 13 | + |
| 14 | +#### Scenario: Cycle forward with 3+ monitors |
| 15 | +- **WHEN** user presses ALT+O on a system with three or more monitors |
| 16 | +- **THEN** the window moves forward to the next monitor in the list (1→2→3→1) |
| 17 | + |
| 18 | +#### Scenario: No-op on single monitor |
| 19 | +- **WHEN** user presses ALT+O on a system with only one monitor connected |
| 20 | +- **THEN** no change occurs (graceful no-op, no error) |
| 21 | + |
| 22 | +### Requirement: Maximize active window |
| 23 | +The system SHALL bind ALT+M to maximize the active window, filling the workspace area while keeping the bar/panel visible. |
| 24 | + |
| 25 | +#### Scenario: Maximize tiled window |
| 26 | +- **WHEN** user presses ALT+M on a tiled window |
| 27 | +- **THEN** the window expands to fill the workspace (excluding panel/bar area) |
| 28 | + |
| 29 | +#### Scenario: Maximize floating window |
| 30 | +- **WHEN** user presses ALT+M on a floating window |
| 31 | +- **THEN** the window snaps to fill the workspace (excluding panel/bar area) |
| 32 | + |
| 33 | +#### Scenario: Toggle maximize off |
| 34 | +- **WHEN** user presses ALT+M on an already-maximized window |
| 35 | +- **THEN** the window returns to its previous size and position |
| 36 | + |
| 37 | +### Requirement: Key constants |
| 38 | +All modifier keys SHALL be defined as module-level constants at the top of the file, not inlined in bind registration calls. |
| 39 | + |
| 40 | +#### Scenario: Constants precede usage |
| 41 | +- **WHEN** reading the monitor.lua module |
| 42 | +- **THEN** all modifier key strings are defined as local constants before any `hl.bind()` call |
| 43 | + |
| 44 | +### Requirement: Integration with orchestrator |
| 45 | +The module SHALL export a `register(mainMod)` function following the existing sub-module convention, loaded by `configs/binds.lua`. |
| 46 | + |
| 47 | +#### Scenario: Module loaded on startup |
| 48 | +- **WHEN** Hyprland starts with `require("configs.binds").register(mainMod)` in the load chain |
| 49 | +- **THEN** the ALT+O and ALT+M bindings are active |
0 commit comments