> This is the Italian 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.

siggy

CI Release License: GPL-3.0 crates.io Docs Ko-fi Follow @siggyapp

English  |  Dansk  |  Deutsch  |  Español  |  Français  |  Italiano  |  Nederlands  |  Português  |  Suomi  |  Svenska  |  Русский  |  Українська  |  简体中文  |  Contribuisci con una traduzione

Un client Signal per il terminale, in stile IRC. Si appoggia a [signal-cli](https://github.com/AsamK/signal-cli) tramite JSON-RPC come backend di messaggistica. ![Schermata di siggy](../screenshot.png) ## Installazione ### Homebrew (macOS) ```sh brew tap johnsideserf/siggy brew install siggy ``` ### Binari precompilati Scarica l'ultima versione per la tua piattaforma dalla pagina [Releases](https://github.com/johnsideserf/siggy/releases). **Linux / macOS** (una sola riga): ```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 ``` Entrambi gli script scaricano il binario dell'ultima release e verificano la presenza di signal-cli. ### Da crates.io Richiede Rust 1.70+. ```sh cargo install siggy ``` ### Compilazione dal sorgente In alternativa, clona il repository e compila in locale: ```sh git clone https://github.com/johnsideserf/siggy.git cd siggy cargo build --release # Il binario si trova in target/release/siggy ``` ## Prerequisiti - [signal-cli](https://github.com/AsamK/signal-cli) installato e raggiungibile nel PATH (oppure configurato tramite `signal_cli_path`) - Un account Signal collegato come dispositivo secondario (la procedura guidata di configurazione se ne occupa) ## Utilizzo ```sh siggy # Avvio (usa il file di configurazione) siggy -a +15551234567 # Specifica l'account siggy -c /path/to/config.toml # Percorso di configurazione personalizzato siggy --setup # Riesegui la configurazione guidata iniziale siggy --demo # Avvio con dati fittizi (signal-cli non necessario) siggy --incognito # Nessun salvataggio locale dei messaggi (solo in memoria) ``` Al primo avvio, la procedura guidata ti accompagna nell'individuare signal-cli, inserire il tuo numero di telefono e collegare il dispositivo tramite codice QR. ## Configurazione La configurazione viene caricata da: - **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 = "" ``` Tutti i campi sono facoltativi. Il valore predefinito di `signal_cli_path` è `"signal-cli"` (cercato nel PATH), mentre quello di `download_dir` è `~/signal-downloads/`. Su Windows, indica il percorso completo di `signal-cli.bat` se non si trova nel PATH. ### Immagini inline dentro tmux Fuori da tmux, siggy rileva automaticamente Kitty / iTerm2 / WezTerm / Ghostty e visualizza gli allegati come immagini native in pixel. Dentro tmux servono due passaggi, perché tmux nasconde a siggy il terminale esterno: 1. Indica a tmux di inoltrare le sequenze di escape sconosciute. Richiede tmux 3.3+: ``` set -g allow-passthrough on ``` Le versioni meno recenti di tmux usano `set -g allow-passthrough all`. 2. Indica a siggy quale protocollo parla il terminale esterno (il rilevamento automatico vede solo tmux): ```sh SIGGY_IMAGE_PROTOCOL=kitty siggy # oppure iterm2 / sixel / halfblock ``` Se `SIGGY_IMAGE_PROTOCOL` non è impostata, entra in gioco il consueto rilevamento automatico (corretto fuori da tmux, ripiega su halfblock al suo interno). Sixel attraversa tmux 3.4+ in modo nativo e non richiede la variabile d'ambiente. ## Funzionalità - **Messaggistica** -- Invio e ricezione di messaggi individuali e di gruppo - **Allegati** -- Anteprime delle immagini visualizzate inline come grafica a semiblocchi; gli allegati non grafici compaiono come `[attachment: nomefile]` - **Link cliccabili** -- URL e percorsi di file sono collegamenti ipertestuali OSC 8 (cliccabili in terminali come Windows Terminal, iTerm2, ecc.) - **Indicatori di digitazione** -- Mostra chi sta scrivendo, con risoluzione del nome del contatto - **Sincronizzazione dei messaggi** -- I messaggi inviati dal telefono compaiono nella TUI - **Persistenza** -- Archiviazione dei messaggi in SQLite con modalità WAL; conversazioni e segnalibri di lettura sopravvivono ai riavvii - **Tracciamento dei non letti** -- Conteggio dei messaggi non letti nella barra laterale, con separatore "nuovi messaggi" nella chat - **Notifiche** -- Campanello del terminale ai nuovi messaggi (configurabile per chat individuali/di gruppo, silenziabile per singola conversazione) e notifiche desktop a livello di sistema operativo - **Risoluzione dei contatti** -- Nomi presi dalla tua rubrica Signal; gruppi popolati automaticamente all'avvio - **Reazioni ai messaggi** -- Reagisci con `r` in modalità Normale; selettore di emoji con visualizzazione a badge (`👍 2 ❤️ 1`) - **Rispondi / cita** -- Premi `q` su un messaggio selezionato per rispondere citandone il contesto - **Modifica dei messaggi** -- Premi `e` per modificare i messaggi che hai inviato - **Eliminazione dei messaggi** -- Premi `d` per eliminare in locale o in remoto (per i tuoi messaggi) - **Eliminazione delle conversazioni** -- Usa `/delete` per rimuovere localmente la conversazione corrente (rifiuta le richieste di messaggio in sospeso) - **Ricerca nei messaggi** -- `/search ` con `n`/`N` per saltare da un risultato all'altro - **@menzioni** -- Digita `@` nelle chat di gruppo per menzionare i membri con autocompletamento - **Selezione dei messaggi** -- Evidenziazione del messaggio selezionato durante lo scorrimento; `J`/`K` per saltare da un messaggio all'altro - **Conferme di lettura** -- Simboli di stato sui messaggi in uscita (In invio → Inviato → Consegnato → Letto → Visualizzato) - **Messaggi a tempo** -- Rispetta i timer dei messaggi a tempo di Signal; impostabili per conversazione con `/disappearing` - **Gestione dei gruppi** -- Crea gruppi, aggiungi/rimuovi membri, rinomina, abbandona tramite `/group` - **Richieste di messaggio** -- Accetta o elimina i messaggi provenienti da mittenti sconosciuti - **Blocca / sblocca** -- Blocca contatti o gruppi con `/block` e `/unblock` - **Supporto del mouse** -- Clicca sulle conversazioni nella barra laterale, scorri i messaggi, clicca per posizionare il cursore - **Temi di colore** -- Temi selezionabili tramite `/theme` o `/settings` - **Configurazione guidata** -- Onboarding al primo avvio con collegamento del dispositivo via codice QR - **Scorciatoie Vim** -- Editing modale (Normal/Insert) con movimento completo del cursore - **Autocompletamento dei comandi** -- Popup di completamento con Tab per i comandi slash - **Overlay delle impostazioni** -- Attiva/disattiva notifiche, barra laterale e immagini inline direttamente dall'app - **Layout adattivo** -- Barra laterale ridimensionabile che si nasconde automaticamente sui terminali stretti (<60 colonne) - **Modalità incognito** -- `--incognito` usa l'archiviazione in memoria; nulla viene conservato dopo l'uscita - **Supporto proxy** -- Configura un proxy TLS di Signal tramite il campo `proxy` della configurazione, per l'uso su reti soggette a restrizioni - **Modalità demo** -- Prova l'interfaccia senza signal-cli (`--demo`) ## Comandi | Comando | Alias | Descrizione | |---|---|---| | `/join ` | `/j` | Passa a una conversazione per nome del contatto, numero o gruppo | | `/part` | `/p` | Abbandona la conversazione corrente | | `/delete` | | Elimina la conversazione corrente (rifiuta le richieste di messaggio in sospeso) | | `/attach` | `/a` | Apri il browser dei file per allegare un file | | `/search ` | `/s` | Cerca messaggi nella conversazione corrente (o in tutte) | | `/sidebar` | `/sb` | Mostra/nascondi la barra laterale | | `/bell [tipo]` | `/notify` | Attiva/disattiva le notifiche (`direct`, `group` o entrambe) | | `/mute [durata]` | | Silenzia/riattiva la conversazione corrente (ad es. `1h`, `8h`, `1d`, `1w`) | | `/block` | | Blocca il contatto o il gruppo corrente | | `/unblock` | | Sblocca il contatto o il gruppo corrente | | `/disappearing ` | `/dm` | Imposta il timer dei messaggi a tempo (`off`, `30s`, `5m`, `1h`, `1d`, `1w`) | | `/group` | `/g` | Apri il menu di gestione del gruppo | | `/theme` | `/t` | Apri il selettore dei temi | | `/contacts` | `/c` | Sfoglia i contatti sincronizzati | | `/settings` | | Apri l'overlay delle impostazioni | | `/lock` | | Blocca la sessione | | `/lock-reset` | | Cambia la passphrase di blocco (richiede quella attuale) | | `/help` | `/h` | Mostra l'overlay di aiuto | | `/quit` | `/q` | Esci da siggy | Digita `/` per aprire il popup di autocompletamento. Usa `Tab` per completare e i tasti freccia per navigare. Per scrivere a un nuovo contatto: `/join +15551234567` (formato E.164). **Hai dimenticato la passphrase di blocco?** Esci da siggy (o termina il processo) ed esegui `siggy --reset-lock`. Il comando elimina l'hash della passphrase memorizzata e stampa il percorso rimosso. Il successivo `/lock` imposterà una nuova passphrase. ## Scorciatoie da tastiera L'app usa un editing modale in stile vim con due modalità: **Inserimento** (predefinita) e **Normale**. ### Globali (entrambe le modalità) | Tasto | Azione | |---|---| | `Ctrl+C` | Esci | | `Tab` / `Shift+Tab` | Conversazione successiva / precedente | | `PgUp` / `PgDn` | Scorri i messaggi (5 righe) | | `Ctrl+Left` / `Ctrl+Right` | Ridimensiona la barra laterale | ### Modalità Normale Premi `Esc` per entrare in modalità Normale. | Tasto | Azione | |---|---| | `j` / `k` | Scorri giù / su di 1 riga | | `J` / `K` | Salta al messaggio precedente / successivo | | `Ctrl+D` / `Ctrl+U` | Scorri giù / su di mezza pagina | | `g` / `G` | Scorri all'inizio / alla fine | | `h` / `l` | Sposta il cursore a sinistra / a destra | | `w` / `b` | Avanza / arretra di una parola | | `0` / `$` | Inizio / fine riga | | `x` | Elimina il carattere sotto il cursore | | `D` | Elimina dal cursore fino alla fine | | `y` / `Y` | Copia il corpo del messaggio / la riga intera | | `r` | Reagisci al messaggio selezionato | | `q` | Rispondi / cita il messaggio selezionato | | `e` | Modifica un proprio messaggio inviato | | `d` | Elimina il messaggio (in locale o in remoto) | | `n` / `N` | Salta al risultato di ricerca successivo / precedente | | `i` | Entra in modalità Inserimento | | `a` | Entra in modalità Inserimento (cursore a destra di 1) | | `I` / `A` | Entra in modalità Inserimento a inizio / fine riga | | `o` | Entra in modalità Inserimento (svuota il buffer) | | `/` | Entra in modalità Inserimento con `/` già digitato | ### Modalità Inserimento (predefinita) | Tasto | Azione | |---|---| | `Esc` | Passa alla modalità Normale | | `Enter` | Invia il messaggio / esegui il comando | | `Shift+Enter` / `Alt+Enter` | Inserisci un a capo (per messaggi su più righe) | | `Backspace` / `Delete` | Elimina caratteri | | `Up` / `Down` | Richiama la cronologia di input | | `Left` / `Right` | Sposta il cursore | | `Home` / `End` | Vai all'inizio / alla fine della riga | ## Architettura ``` 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) | +----------------+ ``` Sviluppato con [Ratatui](https://ratatui.rs/) + [Crossterm](https://github.com/crossterm-rs/crossterm) sul runtime asincrono [Tokio](https://tokio.rs/). ## Licenza [GPL-3.0](../LICENSE)