From c0d319c841eb0d1b82260237b2ae18387ac66a2f Mon Sep 17 00:00:00 2001 From: en Date: Tue, 15 Sep 2026 17:32:49 +0200 Subject: [PATCH] Update DESIGN/NOTES/MACROS/PLAN: remove stale 'later' notes, move shipped PLAN.md items, note per-character assist/follow keys --- PLAN.md | 21 +++++++++++++-------- docs/DESIGN.md | 7 +++---- docs/MACROS.md | 4 +++- docs/NOTES.md | 2 +- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/PLAN.md b/PLAN.md index a5fa6e2..02d0f55 100644 --- a/PLAN.md +++ b/PLAN.md @@ -27,16 +27,21 @@ Push: HTTPS `https://gitea.nettsi.de/en/enBoxer` only. - [x] HTTPS remote `en/enBoxer` (camelCase, matches the project name) - [x] Example Video FX **disabled**; layout tiles empty +## Shipped (since the last "Next" snapshot) + +- [x] GUI: confirm before Apply; Session checkbox "Allow moving game windows" (`allow_layout` + `confirm_apply` popup) +- [x] Named profiles (File save as / open) plus the new Teams + Lutris flow +- [x] Type/clipboard broadcast to others (`type_to_others` + new `clipboard` IPC verb) +- [x] Slot-number overlay (click to make main) — wlr-layer-shell client, gated `ENBOXER_ENABLE_OVERLAY=1` +- [x] `hyprland-toplevel-export` for covered Video FX sources — `zwlr_export_dmabuf_unstable_v1`, gated `ENBOXER_ENABLE_TOPLEVEL=1` +- [x] Follow/assist follow **current main** after swap — `Engine::resolve_party_bind` + `Character.assist_key`/`follow_key` +- [x] Borderless via Hyprland window rules — `hypr::apply_borderless_rules` on `run` +- [x] Mirror-mode mouse click broadcast (left + right, no press-and-hold guard yet) +- [x] `round_robin` / `rr` bind target (rotates through ALL slots including the leader, per-map cursor) + ## Next (still GOALS.md) -- [ ] GUI: confirm before Apply; Session checkbox “Allow moving game windows” -- [ ] Named profiles (File save as / open) -- [ ] Type/clipboard broadcast to others -- [ ] Slot-number overlay (click to make main) -- [ ] `hyprland-toplevel-export` for covered Video FX sources -- [ ] Follow/assist follow **current main** after swap -- [ ] Borderless via Hyprland window rules -- [ ] Forever macros when that client exists +- [ ] Forever macros when that client exists (Forever client does not exist yet — future) ## Invoke worker (only after tickets are listed in TASKS.md) diff --git a/docs/DESIGN.md b/docs/DESIGN.md index e8f0c96..0935e86 100644 --- a/docs/DESIGN.md +++ b/docs/DESIGN.md @@ -24,9 +24,8 @@ Delivery is compositor input to a window address. 1. **Session off** (focus is not a captured slot and not an enBoxer overlay): no binds. Normal desktop. 2. **Mode `maps` (default):** only `maps[].hotkey` are intercepted. Everything else, including movement, goes to the focused primary. 3. **`passthrough`:** never intercepted, even if a map lists them. Default `[]`. Put `e s d f` here to keep those letters on the primary. -4. **Mode `repeater`:** also clone `repeater.keys` to other slots (explicit list). -5. **Mode `disabled`:** same as session off, with a hotkey to turn maps back on. -6. **Video FX hover + `pass_through`:** keys and clicks inside the viewer go to the **source slot only**. +4. **`passthrough`:** never intercepted, even if a map lists them. Default `[]`. Put `e s d f` here to keep those letters on the primary. +5. **Video FX hover + `pass_through`:** keys and clicks inside the viewer go to the **source slot only**. A map with `target: others` never delivers to the primary. A map with `target: all` consumes the OS key and re-sends to every slot including primary (no double-tap). @@ -36,7 +35,7 @@ See `docs/MACROS.md`. Stock `loot` map: assist + CTM on + Interact with Target + ## Video FX -Each feed is a source rect (slot + normalized box) plus a viewer rect on the current primary. Overlay class `enboxer-vfx`. Capture is `grim` of visible pixels. Covered windows need `hyprland-toplevel-export` (later). +Each feed is a source rect (slot + normalized box) plus a viewer rect on the current primary. Overlay class `enboxer-vfx`. Capture is `grim` for visible sources, `zwlr_export_dmabuf_unstable_v1` for covered sources (gated behind `ENBOXER_ENABLE_TOPLEVEL=1`). See [docs/VIDEO.md](VIDEO.md). ## Config diff --git a/docs/MACROS.md b/docs/MACROS.md index bb847fc..87a6073 100644 --- a/docs/MACROS.md +++ b/docs/MACROS.md @@ -28,7 +28,9 @@ and `"0"` for off. ## Assist / Follow -Replace `MainName` with the character you play from. When you swap who is primary, update the names (no-addon tradeoff). Later we can emit one follow/assist bind per slot. +Replace `MainName` with the character you play from. When you swap who is primary, update the names (no-addon tradeoff). + +**Per-character bind keys (already wired):** set `assist_key` and `follow_key` on each `Character` in the profile — those are the in-game macros every account should bind to `/assist ThisName` / `/follow ThisName`. A map using `bind: assist` (or `bind: follow`) resolves to the current main's key, so swap-to-slot-N automatically retargets the bind without re-editing YAML. **Assist** — `game_binds.assist` (example Shift+F2): diff --git a/docs/NOTES.md b/docs/NOTES.md index 0b6f917..ca4cbdc 100644 --- a/docs/NOTES.md +++ b/docs/NOTES.md @@ -34,4 +34,4 @@ If a window is **native Wayland** (including `winewayland`), unfocused inject of The Session page lists each window as `XWayland/Wine` or `Wayland`. -Visible-pixel capture: `grim`. Overlay: `mpv --wayland-app-id=enboxer-vfx` plus JSON IPC to reload frames. Covered windows: `hyprland-toplevel-export` (not wired yet). +Visible-pixel capture: `grim` (default). Overlay: `mpv --wayland-app-id=enboxer-vfx` plus JSON IPC to reload frames. Covered sources use `zwlr_export_dmabuf_unstable_v1` (Hyprland implements the wlroots protocol); gated behind `ENBOXER_ENABLE_TOPLEVEL=1`. See [docs/VIDEO.md](VIDEO.md).