Update DESIGN/NOTES/MACROS/PLAN: remove stale 'later' notes, move shipped PLAN.md items, note per-character assist/follow keys

This commit is contained in:
en 2026-09-15 17:32:49 +02:00
parent a7acce2a6a
commit c0d319c841
4 changed files with 20 additions and 14 deletions

21
PLAN.md
View File

@ -27,16 +27,21 @@ Push: HTTPS `https://gitea.nettsi.de/en/enBoxer` only.
- [x] HTTPS remote `en/enBoxer` (camelCase, matches the project name) - [x] HTTPS remote `en/enBoxer` (camelCase, matches the project name)
- [x] Example Video FX **disabled**; layout tiles empty - [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) ## Next (still GOALS.md)
- [ ] GUI: confirm before Apply; Session checkbox “Allow moving game windows” - [ ] Forever macros when that client exists (Forever client does not exist yet — future)
- [ ] 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
## Invoke worker (only after tickets are listed in TASKS.md) ## Invoke worker (only after tickets are listed in TASKS.md)

View File

@ -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. 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. 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. 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). 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. **Mode `disabled`:** same as session off, with a hotkey to turn maps back on. 5. **Video FX hover + `pass_through`:** keys and clicks inside the viewer go to the **source slot only**.
6. **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). 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 ## 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 ## Config

View File

@ -28,7 +28,9 @@ and `"0"` for off.
## Assist / Follow ## 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): **Assist** — `game_binds.assist` (example Shift+F2):

View File

@ -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`. 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).