diff options
| author | Danilo M. <danix@danix.xyz> | 2026-09-14 12:30:04 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-09-14 12:30:04 +0200 |
| commit | fff182819f8a543d3a52f80baf7a6e03e82ae2b3 (patch) | |
| tree | f89594adb0c7bd5300d1d2c8bcb55ddcbff4b000 | |
| parent | 5f51d30e76fa20f8bd1212684ae0b2e1e773a7f3 (diff) | |
| download | qtmaildir-fff182819f8a543d3a52f80baf7a6e03e82ae2b3.tar.gz qtmaildir-fff182819f8a543d3a52f80baf7a6e03e82ae2b3.zip | |
docs(i18n): translate the spam strings
| -rw-r--r-- | AGENTS.md | 18 | ||||
| -rw-r--r-- | CHANGELOG.md | 53 | ||||
| -rw-r--r-- | README.md | 14 | ||||
| -rw-r--r-- | translations/qtmaildir_it_IT.ts | 28 |
4 files changed, 103 insertions, 10 deletions
@@ -328,13 +328,17 @@ user's real mail. Treat any code that composes a folder name as reaching the server, because it does. **A message records where it came from in a tag, because nothing else can.** -`deleted-from:<folder>` is written when Delete moves the file, and read back by -Restore. The file has moved, so neither the path nor anything in notmuch still -knows the original folder. A notmuch tag MAY contain a space, so tags crossing -the thread boundary are joined by a TAB rather than a space; joining on a space -truncated every folder name containing one. A message trashed by another client -carries no such tag at all, which is why the trash view is path-based and why -Restore falls back to the account's inbox rather than refusing. +`moved-from:<folder>` is written by any move, Delete into the trash and Mark +spam into the spam folder alike, and read back by Restore. The file has moved, +so neither the path nor anything in notmuch still knows the original folder. A +message carries exactly ONE origin: a later move strips the tag it finds and +writes the folder it is leaving now, so a message that travelled inbox -> spam +-> trash names the spam folder and nothing older. A notmuch tag MAY contain a +space, so tags crossing the thread boundary are joined by a TAB rather than a +space; joining on a space truncated every folder name containing one. A message +trashed by another client carries no such tag at all, which is why the trash +view is path-based and why Restore falls back to the account's inbox rather +than refusing. **Restore reads the DATABASE, never the model.** The model's tags come from the query, so a row whose delete has not been re-queried still carries its pre-delete diff --git a/CHANGELOG.md b/CHANGELOG.md index 32c1a34..bb7eb49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,28 @@ point at which they are stable. outcome from a line in the log. Set `status` under `[sync]` to move the file; the default matches what the script writes and no config change is needed. +- **A Spam view, and Mark spam now moves the file.** Every account may name a + `spam` folder beside its `trash`, and a built-in Spam filter lists that folder + as a threaded view the way the trash filter does. Mark spam moves the message + into that folder and records the one it came from in a `moved-from:` tag, so + Restore and Undo put it back where it was. Before this the action only added + the tag and left the file in place, so a message marked spam on one machine + did not appear in the folder on another. + +- **Empty Spam.** Moves every message in the account's spam folder to its trash + in one act, scoped to the account selector like Empty trash, and asks nothing + first: it is a move with an undo behind it, and a mutation that can be undone + gets undo rather than a dialog. + +- **Find stranded spam.** Mail carrying the `spam` tag while sitting in no spam + folder, usually because another client or an older version tagged it and left + the file where it was, is listed by a menu entry so it can be selected and + moved. It is the spam counterpart to Find stranded deleted mail. + +- **A spam button on the message pane's bar**, beside Star and Archive. It is + drawn with a bug rather than the theme's junk glyph, and falls back to + `mail-mark-junk` on a theme that ships no bug. + ### Changed - **Delete and Archive moved from the main toolbar to the message pane's @@ -48,6 +70,11 @@ point at which they are stable. narrower view cannot leave a change stranded. The status line now names what a run covers instead of saying only "Syncing...", so a narrowed run is visible as one. +- **The origin tag is `moved-from:` rather than `deleted-from:`.** The tag + records where a message was moved from, and now that Mark spam moves a file + too, "deleted" was no longer true of every message carrying one. A message + holds exactly one origin, overwritten on each move, so a message that + travelled inbox to spam to trash names the spam folder and nothing older. ### Fixed @@ -94,6 +121,32 @@ point at which they are stable. because another sync already holds the lock, it carried nothing, and the pending count stays where it was. +### Upgrading + +**Every account needs a `spam` key beside `trash`.** Mark spam now moves the +file into the account's `spam` folder, named relative to `maildir`, and an +account without one cannot be marked spam at all. The config loader reports it +at startup and the action names the cause rather than writing a file that has +nowhere to go. Add the key under every `[account.*]` section, e.g. `spam = +Spam`. + +**The origin tag is renamed, and the code does not rewrite the old one.** Mail +moved by an earlier version carries `deleted-from:<folder>`; this version reads +and writes `moved-from:<folder>` and nothing else. Until the old tags are +renamed, Restore cannot find them, so such a message falls back to the +account's inbox rather than the folder it came from, and Undo of an old delete +no longer knows the origin. Rename it once, per distinct folder, before you +rely on either: + +```bash +notmuch tag +moved-from:'<folder>' -deleted-from:'<folder>' \ + -- tag:'deleted-from:<folder>' +``` + +There is no compatibility branch on purpose: a reader accepting both prefixes +would answer "first match wins" on a message holding one of each, which is the +silent mis-restore the single tag exists to prevent. + ## [0.28.0] - 2026-08-29 A row in the thread list is now either a conversation or a message, and it @@ -150,7 +150,8 @@ identity. ; message_zoom = 1.0 ; Optional. Which query to open at startup, by name. Defaults to Unread. ; Matches your own saved queries first, then the built-in filters (Unread, -; Inbox, Important, Sent), so either can be named here. Falls back to the +; Inbox, Important, Sent, Drafts, Trash, Spam), so either can be named here. +; Falls back to the ; Unread filter if no query by this name exists, and warns if you named one ; explicitly. ; startup_query = Unread @@ -242,6 +243,9 @@ maildir = work-mail ; relative to notmuch's mail root trash = Trash ; Delete moves the file here. Not optional in ; practice: without it the application reports a ; config problem and Delete does not work. +spam = Spam ; Mark spam moves the file here. The same warning + ; applies: without it the application reports a + ; config problem and Mark spam does not work. drafts = Drafts ; optional; enables the Drafts button, and where ; the composer autosaves sent = Sent ; optional; enables the Sent button, and where a @@ -263,6 +267,7 @@ name = Your Name address = you@example.net maildir = personal trash = Trash +spam = Spam drafts = Drafts ; Optional, and global rather than per-account. Every key below shows its @@ -755,7 +760,7 @@ Defaults, all rebindable through `[keys]`: | `Return` | `open_thread` | Focus the thread list | | `Ctrl+E` | `archive` | Remove `inbox` from every selected thread | | `Ctrl+D` | `delete` | Add `deleted` | -| `Ctrl+Shift+S` | `spam` | Add `spam`, remove `inbox` | +| `Ctrl+Shift+S` | `spam` | Move the file to the spam folder and record where it came from | | `Ctrl+U` | `toggle_unread` | Toggle `unread` | | `Ctrl+Shift+U` | `mark_all_read` | Remove `unread` from every thread in the view | | `Ctrl+I` | `flag` | Mark important (adds `flagged`) | @@ -770,7 +775,10 @@ Defaults, all rebindable through `[keys]`: | `Ctrl+G` | `sync` | Run the configured sync command | | `Ctrl+Q` | `quit` | Quit | -Every action now carries a default binding, and every one appears in a menu. +Every action in this table carries a default binding, and every one appears in +a menu. Some actions carry no default, because a chord for them would be +arbitrary (Empty trash, Empty spam, Delete permanently); they are reachable +from the menus and the shortcut reference prints them as unbound. **Help > Keyboard shortcuts** lists the current bindings, generated from the actions themselves, so it shows your overrides rather than these defaults. diff --git a/translations/qtmaildir_it_IT.ts b/translations/qtmaildir_it_IT.ts index cb9b34e..0a251e4 100644 --- a/translations/qtmaildir_it_IT.ts +++ b/translations/qtmaildir_it_IT.ts @@ -611,6 +611,10 @@ Il messaggio È stato inviato. Non inviarlo di nuovo.</translation> <translation>Non connesso all'indice della posta</translation> </message> <message> + <source>No spam folder is configured</source> + <translation>Nessuna cartella spam configurata</translation> + </message> + <message> <source>Nothing selected to delete</source> <translation>Nessun messaggio selezionato da eliminare</translation> </message> @@ -653,6 +657,10 @@ Il messaggio È stato inviato. Non inviarlo di nuovo.</translation> <translation>Posta etichettata come eliminata ma non in un cestino. Seleziona cosa deve essere rimosso e premi Elimina.</translation> </message> <message> + <source>Mail tagged spam but not in a spam folder. Select what should go and press Mark spam.</source> + <translation>Posta etichettata come spam ma non in una cartella spam. Seleziona cosa deve essere rimosso e premi Segna come spam.</translation> + </message> + <message> <source>Undelete</source> <translation>Ripristina</translation> </message> @@ -758,6 +766,10 @@ Il messaggio È stato inviato. Non inviarlo di nuovo.</translation> </translation> </message> <message> + <source>Empty spam</source> + <translation>Svuota spam</translation> + </message> + <message> <source>Undelete thread</source> <translation>Ripristina conversazione</translation> </message> @@ -884,6 +896,14 @@ Il messaggio È stato inviato. Non inviarlo di nuovo.</translation> <translation>&Regole di etichettatura...</translation> </message> <message> + <source>&Check for stranded spam</source> + <translation>&Cerca spam non spostato</translation> + </message> + <message> + <source>Show mail tagged spam that is not in a spam folder</source> + <translation>Mostra la posta etichettata come spam che non si trova in una cartella spam</translation> + </message> + <message> <source>Delete per&manently...</source> <translation>Elimina definitiva&mente...</translation> </message> @@ -892,6 +912,14 @@ Il messaggio È stato inviato. Non inviarlo di nuovo.</translation> <translation>Elimina definitivamente i messaggi selezionati</translation> </message> <message> + <source>Empty spam f&older...</source> + <translation>S&vuota cartella spam...</translation> + </message> + <message> + <source>Move every message in the spam folder to the trash</source> + <translation>Sposta nel cestino ogni messaggio della cartella spam</translation> + </message> + <message> <source>Move the selected messages to the spam folder</source> <translation>Sposta nella cartella spam i messaggi selezionati</translation> </message> |
