Add build output dependency file for mouse-test application
Add standard menu fore keybinds
This commit is contained in:
174
README.md
174
README.md
@@ -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) |
|
||||
|
||||
Reference in New Issue
Block a user