Add build output dependency file for mouse-test application

Add standard menu fore keybinds
This commit is contained in:
2026-03-28 03:18:41 +01:00
parent 4440ad79bd
commit 3a9e292088
203 changed files with 3797 additions and 29 deletions

174
README.md
View File

@@ -2,14 +2,16 @@
En terminal-baserad fönsterhanterare med flytande fönster, full mussuport och SSH-kompatibilitet — inspirerad av tmux men med ett modernt UX.
## Funktioner (planerade)
## Funktioner
- Flytande terminaler med fri positionering och storleksändring
- Full mussuport: vänster/höger klick, scroll, markering
- Topanel och/eller bottenpanel
- Full mussuport: vänster/höger/mitten-klick, scroll, drag, ANSI-muse-protokoll vidarebefordras till appar
- Panel (topp/botten) med klickbara knappar och dynamiska status-widgets
- Dropdown-menyer med undermenyer
- Körbar kommandodialog (`ctrl+space`)
- Dynamisk omrendering vid terminalstorlek-ändringar
- SSH-kompatibel (fungerar via vanliga ANSI escape-koder)
- Kompilerar till fristående binärer för Windows och Linux
- Kompilerar till fristående binärer för Linux och Windows
## Teknikstack
@@ -18,6 +20,8 @@ En terminal-baserad fönsterhanterare med flytande fönster, full mussuport och
| Terminal I/O, mus, resize | `crossterm` |
| TUI-rendering, buffersystem | `ratatui` |
| Pseudoterminal (PTY/ConPTY) | `portable-pty` |
| VT100-emulering | `vt100` |
| Konfiguration | `toml` + `serde` |
| Språk | Rust |
## Bygga projektet
@@ -54,9 +58,165 @@ Använd `Terminal > Run Task` och välj:
```
TUI-WM/
├── src/
── main.rs
── main.rs — Startpunkt, event-loop
│ ├── app.rs — All logik: fönsterhantering, mus, event-routing
│ ├── config.rs — TOML-konfiguration och dess datatyper
│ ├── pty.rs — PTY-instans (startar och kommunicerar med shell/app)
│ └── render.rs — Ratatui-rendering av paneler och fönster
├── config.toml — Huvud-konfigfil (panels, keybinds)
├── panels/
│ └── topbar.toml — Panel-definition (knappar, status-widgets)
├── .vscode/
│ └── tasks.json
── Cargo.toml
└── README.md
── Cargo.toml
```
---
## Konfiguration
Konfigurationen delas upp i två nivåer:
1. **`config.toml`** — huvud-konfigfil, definierar paneler och keybinds
2. **`panels/<fil>.toml`** — extern panel-fil, definierar knapparna och status-widgets för en specifik panel
---
### Paneler
En panel är en topbar eller bottombar med knappar och status-widgets.
```toml
# config.toml
[[panel]]
position = "top" # "top" | "bottom"
file = "panels/topbar.toml" # länk till extern panel-definition (valfri)
```
Eller inline utan extern fil:
```toml
[[panel]]
position = "bottom"
[[panel.item]]
label = "Terminal"
action = { type = "spawn_terminal" }
```
---
### Knappar (items)
Varje knapp i en panel kopplas till en `action`:
```toml
# panels/topbar.toml
[[item]]
label = "Terminal"
action = { type = "spawn_terminal" }
[[item]]
label = "Exit"
action = { type = "exit" }
```
#### Tillgängliga actions
| Action | Beskrivning |
|---|---|
| `{ type = "exit" }` | Avslutar TUI-WM |
| `{ type = "spawn_terminal" }` | Startar nytt terminalfönster med systemets standard-shell |
| `{ type = "spawn_terminal", shell = "/bin/bash" }` | Startar terminal med specifikt shell/program |
| `{ type = "spawn_run_dialog" }` | Öppnar körbar kommandodialog |
| `{ type = "run_program", command = "htop" }` | Kör ett program i terminalfönster |
| `{ type = "run_script", path = "/path/to/script.sh" }` | Kör ett skript i terminalfönster |
| `{ type = "submenu", item = [...] }` | Öppnar en dropdown-undermeny |
#### Dropdown-undermeny
```toml
[[item]]
label = "Apps"
action = { type = "submenu", item = [
{ label = "htop", action = { type = "run_program", command = "htop" } },
{ label = "vim", action = { type = "run_program", command = "vim" } },
] }
```
---
### Status-widgets
Status-widgets är dynamiska textblock i panelen som kör ett kommando periodiskt.
```toml
# panels/topbar.toml
[[status]]
command = "date '+%H:%M:%S'" # shell-kommando vars stdout visas
interval = 1 # uppdateringsintervall i sekunder (default: 10)
width = 10 # teckenbredd i panelen
align = "right" # "right" (default) | "left"
```
Flera status-widgets kan definieras. Höger-dockade renderas från höger kant inåt.
---
### Keybinds
Keybinds definieras i `config.toml` och kopplas till samme `action`-typ som knappar.
```toml
[[keybind]]
key = "ctrl+space"
scope = "global" # "global" | "wm" (default)
action = { type = "spawn_run_dialog" }
[[keybind]]
key = "alt+enter"
scope = "global"
action = { type = "spawn_terminal" }
[[keybind]]
key = "ctrl+q"
scope = "wm"
action = { type = "exit" }
```
#### Scope
| Scope | Beskrivning |
|---|---|
| `global` | Aktiveras alltid, även när ett terminalfönster har fokus |
| `wm` | Aktiveras bara när inget terminalfönster är fokuserat (default) |
#### Tangenter
Format: `"modifier+modifier+key"`. Tillgängliga modifiers: `ctrl`, `alt`, `shift`.
Exempelnycklar: `a``z`, `0``9`, `space`, `enter`, `esc`, `tab`, `backspace`, `delete`, `up`, `down`, `left`, `right`, `home`, `end`, `pageup`, `pagedown`, `f1``f12`.
---
## Mushantering
| Åtgärd | Effekt |
|---|---|
| Vänsterklick på titel-rad | Fokuserar och börjar flytta fönstret |
| Vänsterklick på `[x]` | Stänger fönstret |
| Vänsterklick på kant/hörn | Börjar storleksändra fönstret |
| Klick i innehållsyta | Fokuserar fönstret och skickar musklick till appen i terminalen |
| Scroll inuti terminal | Skickar scroll-event till appen (med ANSI mus-protokoll) eller pilar som fallback |
| Höger/mitten-klick i terminal | Vidarebefordras direkt till appen |
Möss-tracking fungerar automatiskt — om appen i terminalen aktiverar ANSI mus-protokoll (t.ex. vim, htop, ncurses-appar) vidarebefordras alla mus-events korrekt med rätt encoding (SGR, UTF-8 eller default X10).
---
## Standardtangenter
| Tangent | Funktion |
|---|---|
| `ctrl+space` | Öppna körbar kommandodialog |
| `alt+enter` | Nytt terminalfönster |
| `ctrl+q` | Avsluta (bara när inget terminalfönster fokuseras) |