Info-Menü im Tray ergaenzen, Sprunganker im Benutzerhandbuch beheben

Tray-Menü bekommt einen "Info"-Untermenüpunkt (Benutzerhandbuch/
Disclaimer/Lizenz), analog zum Menü in der Titelleiste. Markdown-
Überschriften erhalten jetzt stabile id-Attribute (marked vergibt seit
Version 5 keine eigenen mehr), damit das neue Inhaltsverzeichnis im
Benutzerhandbuch als Sprunganker funktioniert. Reine Sprunganker im
Info-Fenster navigieren nicht mehr wie externe Links. Nach jedem
Abschnitt verlinkt "[nach oben]" zurück zum Inhaltsverzeichnis.

Claude-Session: https://claude.ai/code/session_01VeqoaAZDVSCU4QBtiYDC5C
This commit is contained in:
Winkler, Stefan
2026-09-01 12:17:02 +02:00
parent f8a286f219
commit fff2f288cb
2 changed files with 85 additions and 3 deletions
+38 -2
View File
@@ -4,6 +4,22 @@ Dieses Handbuch richtet sich an Anwender, die Claude Live Dashboard installieren
und nutzen möchten. Wer die Anwendung selbst bauen oder am Quellcode arbeiten und nutzen möchten. Wer die Anwendung selbst bauen oder am Quellcode arbeiten
möchte, findet die technische Dokumentation in der `README.md`. möchte, findet die technische Dokumentation in der `README.md`.
## Inhalt
- [Was die Anwendung tut](#was-die-anwendung-tut)
- [Voraussetzungen](#voraussetzungen)
- [Installation](#installation)
- [Windows](#windows)
- [Linux (Ubuntu und verwandte Distributionen)](#linux-ubuntu-und-verwandte-distributionen)
- [Erster Start](#erster-start)
- [Die Oberfläche](#die-oberfläche)
- [Endpunkt-Status und Fehler-/Ereignis-Log](#endpunkt-status-und-fehler-ereignis-log)
- [Einstellungen](#einstellungen)
- [Tray-Menü](#tray-menü)
- [Datenschutz und Sicherheit](#datenschutz-und-sicherheit)
- [Deinstallation](#deinstallation)
- [Häufige Fragen](#häufige-fragen)
## Was die Anwendung tut ## Was die Anwendung tut
Claude Live Dashboard ist ein kleines, immer sichtbares Fenster, das anzeigt, Claude Live Dashboard ist ein kleines, immer sichtbares Fenster, das anzeigt,
@@ -18,12 +34,16 @@ zusätzlich denselben Server-Endpunkt ab, den auch der Befehl `/usage` in
Claude Code nutzt, um exakte statt geschätzter Werte anzuzeigen — dazu weiter Claude Code nutzt, um exakte statt geschätzter Werte anzuzeigen — dazu weiter
unten mehr unter „Datenschutz und Sicherheit“. unten mehr unter „Datenschutz und Sicherheit“.
[nach oben](#inhalt)
## Voraussetzungen ## Voraussetzungen
- Windows 10/11 oder Ubuntu (bzw. eine vergleichbare Linux-Distribution) - Windows 10/11 oder Ubuntu (bzw. eine vergleichbare Linux-Distribution)
- Claude Code muss installiert sein und mindestens einmal benutzt worden sein - Claude Code muss installiert sein und mindestens einmal benutzt worden sein
— ohne vorhandene Protokolldateien hat das Dashboard nichts anzuzeigen — ohne vorhandene Protokolldateien hat das Dashboard nichts anzuzeigen
[nach oben](#inhalt)
## Installation ## Installation
### Windows ### Windows
@@ -56,6 +76,8 @@ Unter GNOME braucht das Tray-Symbol die Erweiterung **AppIndicator** — bei
Standard-Ubuntu ist sie bereits vorinstalliert. Fehlt sie, läuft die Anwendung Standard-Ubuntu ist sie bereits vorinstalliert. Fehlt sie, läuft die Anwendung
trotzdem, nur ohne sichtbares Symbol in der oberen Leiste. trotzdem, nur ohne sichtbares Symbol in der oberen Leiste.
[nach oben](#inhalt)
## Erster Start ## Erster Start
Nach dem Start erscheint das Fenster rechts oben auf dem Bildschirm und bleibt Nach dem Start erscheint das Fenster rechts oben auf dem Bildschirm und bleibt
@@ -66,6 +88,8 @@ Unter Windows liegt das Symbol zunächst häufig im Überlaufbereich hinter dem
Pfeil `^` — per Drag & Drop lässt es sich dauerhaft sichtbar an die Taskleiste Pfeil `^` — per Drag & Drop lässt es sich dauerhaft sichtbar an die Taskleiste
heften. heften.
[nach oben](#inhalt)
## Die Oberfläche ## Die Oberfläche
**Kopfzeile** — per Ziehen lässt sich das Fenster frei positionieren, die **Kopfzeile** — per Ziehen lässt sich das Fenster frei positionieren, die
@@ -110,6 +134,8 @@ einen Neustart hinweg erhalten und lässt sich über den Knopf **Log löschen**
jederzeit zurücksetzen. Bei einer Fehlermeldung im Programm ist ein Blick in jederzeit zurücksetzen. Bei einer Fehlermeldung im Programm ist ein Blick in
dieses Log meist der schnellste Weg herauszufinden, was los ist. dieses Log meist der schnellste Weg herauszufinden, was los ist.
[nach oben](#inhalt)
## Einstellungen ## Einstellungen
Das Zahnrad öffnet den Einstellungsdialog: Das Zahnrad öffnet den Einstellungsdialog:
@@ -137,12 +163,16 @@ Das Zahnrad öffnet den Einstellungsdialog:
Updates suchen", siehe oben). `Strg`+`S` speichert, `Esc` schließt den Updates suchen", siehe oben). `Strg`+`S` speichert, `Esc` schließt den
Dialog ohne zu speichern. Dialog ohne zu speichern.
[nach oben](#inhalt)
## Tray-Menü ## Tray-Menü
Ein Rechtsklick (Linux) bzw. Klick (Windows) auf das Symbol im Ein Rechtsklick (Linux) bzw. Klick (Windows) auf das Symbol im
Infobereich/der Systemleiste öffnet ein Menü mit: Dashboard anzeigen/ausblenden, Infobereich/der Systemleiste öffnet ein Menü mit: Dashboard anzeigen/ausblenden,
Deckkraft, Klick-Durchlässigkeit, Autostart, Einstellungen, Datenordner öffnen Deckkraft, Klick-Durchlässigkeit, Autostart, Einstellungen, Info
und Beenden. (Benutzerhandbuch/Disclaimer/Lizenz), Datenordner öffnen und Beenden.
[nach oben](#inhalt)
## Datenschutz und Sicherheit ## Datenschutz und Sicherheit
@@ -169,6 +199,8 @@ und Beenden.
Zugriffstoken und ohne weitere Daten. Abschaltbar in den Einstellungen. Zugriffstoken und ohne weitere Daten. Abschaltbar in den Einstellungen.
- Es findet keine Übertragung an Dritte statt. - Es findet keine Übertragung an Dritte statt.
[nach oben](#inhalt)
## Deinstallation ## Deinstallation
**Windows:** über *Einstellungen ▸ Apps* bzw. den mitinstallierten **Windows:** über *Einstellungen ▸ Apps* bzw. den mitinstallierten
@@ -179,6 +211,8 @@ erneut installieren.
**Linux:** `.deb`-Installation mit `sudo apt remove claude-live-dashboard`; **Linux:** `.deb`-Installation mit `sudo apt remove claude-live-dashboard`;
ein AppImage genügt zu löschen. ein AppImage genügt zu löschen.
[nach oben](#inhalt)
## Häufige Fragen ## Häufige Fragen
**Das Fenster zeigt keine Zahlen an.** Vermutlich wurde Claude Code auf diesem **Das Fenster zeigt keine Zahlen an.** Vermutlich wurde Claude Code auf diesem
@@ -210,3 +244,5 @@ oder Symbol öffnet die Release-Seite im Browser — heruntergeladen oder
installiert wird nichts automatisch. Das Symbol bleibt sichtbar, bis eine installiert wird nichts automatisch. Das Symbol bleibt sichtbar, bis eine
neuere Version installiert wurde. Abschaltbar über die Einstellung „Nach neuere Version installiert wurde. Abschaltbar über die Einstellung „Nach
Updates suchen". Updates suchen".
[nach oben](#inhalt)
+47 -1
View File
@@ -272,6 +272,14 @@ function buildTrayMenu() {
}, },
{ type: 'separator' }, { type: 'separator' },
{ label: 'Einstellungen …', click: openSettings }, { label: 'Einstellungen …', click: openSettings },
{
label: 'Info',
submenu: [
{ label: 'Benutzerhandbuch', click: () => openInfoDoc('manual') },
{ label: 'Disclaimer', click: () => openInfoDoc('disclaimer') },
{ label: 'Lizenz', click: () => openInfoDoc('license') },
],
},
{ label: 'Datenordner öffnen', click: () => shell.openPath(USER_DATA_DIR) }, { label: 'Datenordner öffnen', click: () => shell.openPath(USER_DATA_DIR) },
{ type: 'separator' }, { type: 'separator' },
{ label: 'Beenden', click: () => app.quit() }, { label: 'Beenden', click: () => app.quit() },
@@ -396,6 +404,39 @@ function escapeHtml(text) {
.replace(/>/g, '>'); .replace(/>/g, '>');
} }
/** GitHub-ähnlicher Anker-Slug — reicht für die deutschen Überschriften hier
* (Umlaute bleiben erhalten, nur Satzzeichen fallen weg). */
function slugify(text) {
return text
.toLowerCase()
.trim()
.replace(/[^\p{L}\p{N}\s-]/gu, '')
.replace(/\s+/g, '-')
.replace(/-+/g, '-');
}
/**
* Markdown→HTML mit `id`-Attributen auf jeder Überschrift, damit
* Sprunganker (z. B. aus einem Inhaltsverzeichnis) funktionieren — marked
* vergibt seit Version 5 selbst keine Heading-IDs mehr (früher `headerIds`,
* jetzt eine separate Erweiterung, die wir nicht zusätzlich einbinden).
* Ein frischer Renderer pro Aufruf hält die Dopplungs-Zählung dokumentweise
* sauber getrennt.
*/
function renderMarkdown(raw) {
const renderer = new marked.Renderer();
const seen = new Map();
renderer.heading = function ({ tokens, depth, text }) {
const inline = this.parser.parseInline(tokens);
let slug = slugify(text) || 'abschnitt';
const count = seen.get(slug) || 0;
seen.set(slug, count + 1);
if (count > 0) slug = `${slug}-${count}`;
return `<h${depth} id="${slug}">${inline}</h${depth}>\n`;
};
return marked.parse(raw, { renderer });
}
/** /**
* Behandelt einen Link-Klick im Info-Dialog. Ohne dieses Abfangen navigiert * Behandelt einen Link-Klick im Info-Dialog. Ohne dieses Abfangen navigiert
* Electron das Fenster selbst zum verlinkten Ziel — bei einem relativen Link * Electron das Fenster selbst zum verlinkten Ziel — bei einem relativen Link
@@ -434,7 +475,7 @@ function openInfoDoc(kind) {
let html; let html;
try { try {
const raw = fs.readFileSync(doc.file, 'utf8'); const raw = fs.readFileSync(doc.file, 'utf8');
html = marked.parse(raw); html = renderMarkdown(raw);
} catch (err) { } catch (err) {
html = `<p>Datei konnte nicht gelesen werden: ${escapeHtml(err.message)}</p>`; html = `<p>Datei konnte nicht gelesen werden: ${escapeHtml(err.message)}</p>`;
} }
@@ -480,6 +521,11 @@ function openInfoDoc(kind) {
// lassen (siehe handleInfoLink()) — sonst bleibt ein leeres, unschließbares // lassen (siehe handleInfoLink()) — sonst bleibt ein leeres, unschließbares
// Fenster zurück. // Fenster zurück.
infoWin.webContents.on('will-navigate', (event, url) => { infoWin.webContents.on('will-navigate', (event, url) => {
// Reiner Sprunganker innerhalb desselben Dokuments (z. B. aus dem
// Inhaltsverzeichnis) — Standardverhalten (Scrollen zum Anker) zulassen,
// statt es wie eine echte Navigation zu behandeln.
const currentBase = infoWin.webContents.getURL().split('#')[0];
if (url.split('#')[0] === currentBase) return;
event.preventDefault(); event.preventDefault();
handleInfoLink(url); handleInfoLink(url);
}); });