From c5fca165bdb80c67f5b4c6d24db339b6c75e4122 Mon Sep 17 00:00:00 2001 From: "marcus.hinz" Date: Sun, 5 Jul 2026 17:02:19 +0200 Subject: [PATCH] Terminal-Header: Projekt-Icon vor dem Titel, Pool-Chip zeigt Anzeigenamen statt Pool-ID (neues Command pool_label); project_icon/pool_label im Command-Satz des Terminal-Prozesses registriert --- src-tauri/src/lib.rs | 13 +++++++++++-- src/terminal.ts | 18 +++++++++++++++++- terminal.html | 9 +++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index bd266d9..5e09721 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1626,6 +1626,12 @@ fn remove_work_dir(project: String, dir: String) -> Result<(), String> { remove_work_dir_in(&Paths::real(), &project, &dir) } +/// Anzeigename eines Pools (pool.json) — die ID ist der Ordnername. +#[tauri::command] +fn pool_label(pool: String) -> Result { + Ok(read_pool(&Paths::real(), &pool)?.name) +} + #[tauri::command] fn todo_state(project: String) -> Result { todo_state_in(&Paths::real(), &project) @@ -1990,6 +1996,7 @@ fn main_builder() -> tauri::Builder { unassign_pool, set_terminal_config, project_icon, + pool_label, todo_state, set_todo, usage_stats, @@ -2026,8 +2033,10 @@ fn terminal_builder(project: String) -> tauri::Builder { terminal::term_log, terminal::term_write, terminal::term_resize, - // Pool-Chip im Terminal-Header braucht die Projektliste auch hier. - list_projects + // Header im Terminal-Prozess: Projektliste, Icon und Pool-Name. + list_projects, + project_icon, + pool_label ]) } diff --git a/src/terminal.ts b/src/terminal.ts index cb71523..bfda1fe 100644 --- a/src/terminal.ts +++ b/src/terminal.ts @@ -396,10 +396,26 @@ interface Project { } const projects = await invoke("list_projects"); const cfg = projects.find((p) => p.name === project); -if (cfg?.pool) document.getElementById("pool")!.textContent = cfg.pool; +if (cfg?.pool) { + // Anzeigename statt Pool-ID (Ordnername). + document.getElementById("pool")!.textContent = await invoke( + "pool_label", + { pool: cfg.pool }, + ); +} document.getElementById("project-name")!.textContent = cfg?.terminal.title ?? project; +// Projekt-Icon vor den Titel — dieselbe data-URL wie in der Projektliste. +if (cfg?.terminal.icon) { + const data = await invoke("project_icon", { project }); + if (data) { + const img = document.getElementById("project-icon") as HTMLImageElement; + img.src = data; + img.hidden = false; + } +} + const picked = THEMES[cfg?.terminal.theme ?? "mocha"]; const theme = picked.xterm; diff --git a/terminal.html b/terminal.html index 92850c6..1e41ba6 100644 --- a/terminal.html +++ b/terminal.html @@ -34,6 +34,14 @@ -webkit-user-select: none; cursor: default; } + #project-icon { + width: 18px; + height: 18px; + border-radius: 4px; + } + #project-icon[hidden] { + display: none; + } #pool { margin-left: auto; background: #313244; @@ -64,6 +72,7 @@
+