> This is the German translation of the siggy README.
> Last updated against English commit: 8b5890e
> The [English version](../README.md) is authoritative. If this translation has drifted, trust the English.
> This translation is maintainer-provided and awaiting native-speaker review. Corrections welcome - see issue #353.
English
|
Dansk
|
Deutsch
|
Español
|
Français
|
Italiano
|
Nederlands
|
Português
|
Suomi
|
Svenska
|
Русский
|
Українська
|
简体中文
|
Eine Übersetzung beitragen
Ein terminalbasierter Signal-Messenger-Client im IRC-Stil. Nutzt [signal-cli](https://github.com/AsamK/signal-cli) via JSON-RPC als Messaging-Backend.

## Installation
### Homebrew (macOS)
```sh
brew tap johnsideserf/siggy
brew install siggy
```
### Vorkompilierte Binärdateien
Lade die neueste Version für deine Plattform von der [Releases-Seite](https://github.com/johnsideserf/siggy/releases) herunter.
**Linux / macOS** (Einzeiler):
```sh
curl -fsSL https://raw.githubusercontent.com/johnsideserf/siggy/master/install.sh | bash
```
**Windows** (PowerShell):
```powershell
irm https://raw.githubusercontent.com/johnsideserf/siggy/master/install.ps1 | iex
```
Beide Skripte laden die neueste Binärdatei herunter und prüfen, ob signal-cli vorhanden ist.
### Über crates.io
Benötigt Rust 1.70+.
```sh
cargo install siggy
```
### Aus dem Quellcode bauen
Alternativ das Repository klonen und lokal kompilieren:
```sh
git clone https://github.com/johnsideserf/siggy.git
cd siggy
cargo build --release
# Die Binärdatei liegt unter target/release/siggy
```
## Voraussetzungen
- [signal-cli](https://github.com/AsamK/signal-cli) ist installiert und über den PATH erreichbar (oder per `signal_cli_path` konfiguriert)
- Ein Signal-Konto, das als Zweitgerät gekoppelt ist (der Einrichtungsassistent übernimmt das)
## Verwendung
```sh
siggy # Starten (verwendet die Konfigurationsdatei)
siggy -a +15551234567 # Konto angeben
siggy -c /path/to/config.toml # Eigener Pfad zur Konfiguration
siggy --setup # Einrichtungsassistenten erneut ausführen
siggy --demo # Mit Beispieldaten starten (kein signal-cli nötig)
siggy --incognito # Keine lokale Nachrichtenspeicherung (nur im Arbeitsspeicher)
```
Beim ersten Start führt dich der Einrichtungsassistent durch das Auffinden von signal-cli, die Eingabe deiner Telefonnummer und die Kopplung deines Geräts per QR-Code.
## Konfiguration
Die Konfiguration wird geladen aus:
- **Linux/macOS:** `~/.config/siggy/config.toml`
- **Windows:** `%APPDATA%\siggy\config.toml`
```toml
account = "+15551234567"
signal_cli_path = "signal-cli"
download_dir = "/home/user/signal-downloads"
notify_direct = true
notify_group = true
desktop_notifications = false
inline_images = true
mouse_enabled = true
send_read_receipts = true
theme = "Default"
proxy = ""
```
Alle Felder sind optional. `signal_cli_path` hat den Standardwert `"signal-cli"` (wird über den PATH gefunden), und `download_dir` zeigt standardmäßig auf `~/signal-downloads/`. Unter Windows gib den vollständigen Pfad zu `signal-cli.bat` an, falls die Datei nicht im PATH liegt.
### Inline-Bilder innerhalb von tmux
Außerhalb von tmux erkennt siggy Kitty / iTerm2 / WezTerm / Ghostty automatisch und rendert Anhänge als native Pixelbilder. Innerhalb von tmux sind zwei Schritte nötig, weil tmux das äußere Terminal vor siggy verbirgt:
1. tmux anweisen, unbekannte Escape-Sequenzen weiterzureichen. Erfordert tmux 3.3+:
```
set -g allow-passthrough on
```
Ältere tmux-Versionen verwenden `set -g allow-passthrough all`.
2. siggy mitteilen, welches Protokoll das äußere Terminal spricht (die automatische Erkennung sieht nur tmux):
```sh
SIGGY_IMAGE_PROTOCOL=kitty siggy # oder iterm2 / sixel / halfblock
```
Ist `SIGGY_IMAGE_PROTOCOL` nicht gesetzt, greift die automatische Erkennung (außerhalb von tmux korrekt, innerhalb fällt sie auf halfblock zurück). Sixel wird ab tmux 3.4+ nativ durchgereicht und benötigt die Umgebungsvariable nicht.
## Funktionen
- **Messaging** -- Senden und Empfangen von Einzel- und Gruppennachrichten
- **Anhänge** -- Bildvorschauen werden inline als Halbblock-Grafik gerendert; andere Anhänge erscheinen als `[attachment: dateiname]`
- **Anklickbare Links** -- URLs und Dateipfade sind OSC 8-Hyperlinks (anklickbar in Terminals wie Windows Terminal, iTerm2 usw.)
- **Schreibanzeigen** -- Zeigt, wer gerade tippt, inklusive Auflösung des Kontaktnamens
- **Nachrichtensynchronisierung** -- Vom Telefon gesendete Nachrichten erscheinen in der TUI
- **Persistenz** -- Nachrichtenspeicherung in SQLite mit WAL-Modus; Unterhaltungen und Lesemarken überstehen Neustarts
- **Ungelesen-Zähler** -- Anzahl ungelesener Nachrichten in der Seitenleiste, mit Trennlinie "neue Nachrichten" im Chat
- **Benachrichtigungen** -- Terminalglocke bei neuen Nachrichten (getrennt einstellbar für Einzel- und Gruppenchats, Stummschaltung pro Unterhaltung) sowie Desktop-Benachrichtigungen auf Betriebssystemebene
- **Kontaktauflösung** -- Namen aus deinem Signal-Adressbuch; Gruppen werden beim Start automatisch geladen
- **Reaktionen** -- Mit `r` im Normal-Modus reagieren; Emoji-Auswahl mit Badge-Anzeige (`👍 2 ❤️ 1`)
- **Antworten / Zitieren** -- Drücke `q` auf einer fokussierten Nachricht, um mit zitiertem Kontext zu antworten
- **Nachrichten bearbeiten** -- Drücke `e`, um eigene gesendete Nachrichten zu bearbeiten
- **Nachrichten löschen** -- Drücke `d`, um lokal oder remote zu löschen (bei eigenen Nachrichten)
- **Unterhaltungen löschen** -- Mit `/delete` die aktuelle Unterhaltung lokal entfernen (lehnt offene Nachrichtenanfragen ab)
- **Nachrichtensuche** -- `/search ` mit `n`/`N`, um zwischen den Treffern zu springen
- **@-Erwähnungen** -- Tippe `@` in Gruppenchats, um Mitglieder mit Autovervollständigung zu erwähnen
- **Nachrichtenauswahl** -- Hervorhebung der fokussierten Nachricht beim Scrollen; `J`/`K`, um zwischen Nachrichten zu springen
- **Lesebestätigungen** -- Statussymbole an ausgehenden Nachrichten (Wird gesendet → Gesendet → Zugestellt → Gelesen → Angesehen)
- **Verschwindende Nachrichten** -- Berücksichtigt die Ablauf-Timer von Signal; pro Unterhaltung einstellbar mit `/disappearing`
- **Gruppenverwaltung** -- Gruppen erstellen, Mitglieder hinzufügen/entfernen, umbenennen, verlassen via `/group`
- **Nachrichtenanfragen** -- Nachrichten unbekannter Absender annehmen oder löschen
- **Blockieren / Freigeben** -- Kontakte oder Gruppen mit `/block` und `/unblock` blockieren bzw. wieder freigeben
- **Mausunterstützung** -- Unterhaltungen in der Seitenleiste anklicken, durch Nachrichten scrollen, Cursor per Klick positionieren
- **Farbschemata** -- Auswählbare Themes über `/theme` oder `/settings`
- **Einrichtungsassistent** -- Geführte Ersteinrichtung mit Gerätekopplung per QR-Code
- **Vim-Tastenbelegung** -- Modales Editieren (Normal/Insert) mit vollständiger Cursorsteuerung
- **Befehls-Autovervollständigung** -- Tab-Vervollständigung als Popup für Slash-Befehle
- **Einstellungs-Overlay** -- Benachrichtigungen, Seitenleiste und Inline-Bilder direkt in der App umschalten
- **Responsives Layout** -- Größenverstellbare Seitenleiste, die sich auf schmalen Terminals (<60 Spalten) automatisch ausblendet
- **Inkognito-Modus** -- `--incognito` speichert nur im Arbeitsspeicher; nach dem Beenden bleibt nichts zurück
- **Proxy-Unterstützung** -- Konfiguriere einen Signal-TLS-Proxy über das Konfigurationsfeld `proxy` für den Einsatz in eingeschränkten Netzwerken
- **Demo-Modus** -- Probiere die Oberfläche ohne signal-cli aus (`--demo`)
## Befehle
| Befehl | Alias | Beschreibung |
|---|---|---|
| `/join ` | `/j` | Zu einer Unterhaltung wechseln, per Kontaktname, Nummer oder Gruppe |
| `/part` | `/p` | Aktuelle Unterhaltung verlassen |
| `/delete` | | Aktuelle Unterhaltung löschen (lehnt offene Nachrichtenanfragen ab) |
| `/attach` | `/a` | Dateibrowser öffnen, um eine Datei anzuhängen |
| `/search ` | `/s` | Nachrichten in der aktuellen (oder allen) Unterhaltungen durchsuchen |
| `/sidebar` | `/sb` | Seitenleiste ein-/ausblenden |
| `/bell [type]` | `/notify` | Benachrichtigungen umschalten (`direct`, `group` oder beide) |
| `/mute [duration]` | | Aktuelle Unterhaltung stummschalten bzw. wieder aktivieren (z. B. `1h`, `8h`, `1d`, `1w`) |
| `/block` | | Aktuellen Kontakt oder aktuelle Gruppe blockieren |
| `/unblock` | | Blockierung des aktuellen Kontakts oder der aktuellen Gruppe aufheben |
| `/disappearing ` | `/dm` | Timer für verschwindende Nachrichten setzen (`off`, `30s`, `5m`, `1h`, `1d`, `1w`) |
| `/group` | `/g` | Menü zur Gruppenverwaltung öffnen |
| `/theme` | `/t` | Theme-Auswahl öffnen |
| `/contacts` | `/c` | Synchronisierte Kontakte durchblättern |
| `/settings` | | Einstellungs-Overlay öffnen |
| `/lock` | | Sitzung sperren |
| `/lock-reset` | | Sperr-Passphrase ändern (aktuelle Passphrase erforderlich) |
| `/help` | `/h` | Hilfe-Overlay anzeigen |
| `/quit` | `/q` | siggy beenden |
Tippe `/`, um das Autovervollständigungs-Popup zu öffnen. Mit `Tab` vervollständigen, mit den Pfeiltasten navigieren.
Um einem neuen Kontakt zu schreiben: `/join +15551234567` (E.164-Format).
**Sperr-Passphrase vergessen?** Beende siggy (oder beende den Prozess) und führe `siggy --reset-lock` aus. Der Befehl löscht den gespeicherten Passphrase-Hash und gibt den entfernten Pfad aus. Das nächste `/lock` legt eine neue Passphrase fest.
## Tastenkürzel
Die App nutzt modales Editieren im Vim-Stil mit zwei Modi: **Insert** (Standard) und **Normal**.
### Global (beide Modi)
| Taste | Aktion |
|---|---|
| `Ctrl+C` | Beenden |
| `Tab` / `Shift+Tab` | Nächste / vorherige Unterhaltung |
| `PgUp` / `PgDn` | Nachrichten scrollen (5 Zeilen) |
| `Ctrl+Left` / `Ctrl+Right` | Seitenleiste in der Größe anpassen |
### Normal-Modus
Drücke `Esc`, um in den Normal-Modus zu wechseln.
| Taste | Aktion |
|---|---|
| `j` / `k` | Eine Zeile nach unten / oben scrollen |
| `J` / `K` | Zur vorherigen / nächsten Nachricht springen |
| `Ctrl+D` / `Ctrl+U` | Eine halbe Seite nach unten / oben scrollen |
| `g` / `G` | Zum Anfang / Ende scrollen |
| `h` / `l` | Cursor nach links / rechts bewegen |
| `w` / `b` | Wortweise vor / zurück |
| `0` / `$` | Zeilenanfang / Zeilenende |
| `x` | Zeichen unter dem Cursor löschen |
| `D` | Vom Cursor bis zum Ende löschen |
| `y` / `Y` | Nachrichtentext / ganze Zeile kopieren |
| `r` | Auf die fokussierte Nachricht reagieren |
| `q` | Fokussierte Nachricht beantworten / zitieren |
| `e` | Eigene gesendete Nachricht bearbeiten |
| `d` | Nachricht löschen (lokal oder remote) |
| `n` / `N` | Zum nächsten / vorherigen Suchtreffer springen |
| `i` | In den Insert-Modus wechseln |
| `a` | In den Insert-Modus wechseln (Cursor eins nach rechts) |
| `I` / `A` | In den Insert-Modus am Zeilenanfang / Zeilenende wechseln |
| `o` | In den Insert-Modus wechseln (Eingabe leeren) |
| `/` | In den Insert-Modus wechseln, `/` ist bereits eingetippt |
### Insert-Modus (Standard)
| Taste | Aktion |
|---|---|
| `Esc` | In den Normal-Modus wechseln |
| `Enter` | Nachricht senden / Befehl ausführen |
| `Shift+Enter` / `Alt+Enter` | Zeilenumbruch einfügen (für mehrzeilige Nachrichten) |
| `Backspace` / `Delete` | Zeichen löschen |
| `Up` / `Down` | Eingabeverlauf abrufen |
| `Left` / `Right` | Cursor bewegen |
| `Home` / `End` | Zum Zeilenanfang / Zeilenende springen |
## Architektur
```
Keyboard --> InputAction --> App state --> SignalClient (mpsc) --> signal-cli (JSON-RPC stdin/stdout)
signal-cli --> JsonRpcResponse --> SignalEvent (mpsc) --> App state --> SQLite + Ratatui render
```
```
+------------+ mpsc channels +----------------+
| TUI | <---------------> | Signal |
| (main | SignalEvent | Backend |
| thread) | UserCommand | (tokio task) |
+------------+ +--------+-------+
|
stdin/stdout
|
+--------v-------+
| signal-cli |
| (child proc) |
+----------------+
```
Gebaut mit [Ratatui](https://ratatui.rs/) + [Crossterm](https://github.com/crossterm-rs/crossterm) auf der asynchronen [Tokio](https://tokio.rs/)-Laufzeitumgebung.
## Lizenz
[GPL-3.0](../LICENSE)