summaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-08-04 10:39:47 +0200
committerDanilo M. <danix@danix.xyz>2026-08-04 12:54:41 +0200
commitf762e4ca0051a7a34123b5a526696f2feb5c6e03 (patch)
treeaf4f3932946ae8937dd8f81ddaf95686e37105ca /README.md
parent1a8fdb48140cb40243bd46bff94d39f610d70ef3 (diff)
downloadqtmaildir-f762e4ca0051a7a34123b5a526696f2feb5c6e03.tar.gz
qtmaildir-f762e4ca0051a7a34123b5a526696f2feb5c6e03.zip
feat(message): show From/To/Cc and add a details dialog
MimeParser has filled To and Cc all along and HtmlBuilder simply never interpolated them, so both were parsed on every message and then discarded. The header strip showed the subject and a message count and nothing else, which is item 2 of the usability backlog. The header now adapts to what it can say honestly. A thread holding one message shows From, To and Cc under the subject, where every field is unambiguous. A thread holding several keeps showing the subject and the count alone: the recipient differs message to message, and once the user has replied there is no single address the thread is addressed to, so naming one would be a guess presented as a fact. Per-message detail is what the dialog is for. That dialog lists Subject, From, To, Cc, Date and Message-Id for every message, numbered when there is more than one, in a read-only plain-text widget. Plain text is the security decision, not a stylistic one: these values come from strangers and the dialog exists to show them verbatim, so the format that cannot interpret markup is the right one. The header label is RichText and every value interpolated into it is escaped, since an unescaped From injects into the application's own chrome rather than into the sandboxed page. Reached by a Details... button beside the subject and by Ctrl+Shift+D. Both, because a shortcut alone restates the complaint this backlog opened with. The binding is shifted because Ctrl+D is delete, and the destructive action keeps the key it already had rather than being moved to make room. An empty Cc omits its row instead of printing a label with nothing after it. Both header shapes were rendered to PNG and inspected, not only asserted. The new button also exposed a latent flaw in an older test: attachmentButtonLabels() identified attachment buttons by excluding the one other button's label, so it counted the details button as an attachment as soon as one existed. It now finds the bar by object name and reads only its children. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'README.md')
-rw-r--r--README.md13
1 files changed, 13 insertions, 0 deletions
diff --git a/README.md b/README.md
index 46992fe..8858682 100644
--- a/README.md
+++ b/README.md
@@ -237,6 +237,18 @@ an attachment, so it is visible without opening the thread. It comes from the
`attachment` tag notmuch applies while indexing, not from parsing the message,
and costs no extra query.
+## Message details
+
+The strip above the message pane says what it can say without guessing. A
+thread holding **one message** shows its From, To and Cc under the subject.
+A thread holding **several** shows the subject and the message count only:
+From, To and Cc differ from message to message, and once you have replied there
+is no single recipient the thread is addressed to, so naming one would be a
+guess dressed as a fact.
+
+The **Details...** button beside the subject, or `Ctrl+Shift+D`, opens the full
+headers of every message in the thread, numbered, as read-only plain text.
+
Under the message pane, one **Attachments (N)** button opens a list of the
thread's attachments: which message each came from, its filename and its size,
with a **Save** for each. With more than one, **Save all** writes them into a
@@ -272,6 +284,7 @@ Defaults, all rebindable through `[keys]`:
| `Ctrl+Space` | `complete_query` | Focus the query bar and offer completions |
| `Ctrl+H` | `toggle_html` | Switch the thread between HTML and plain text |
| `Ctrl+M` | `load_remote` | Load remote images for the current thread |
+| `Ctrl+Shift+D` | `message_details` | Show the full headers of every message in the thread |
| `Ctrl+Z` | `undo` | Undo the last tag change |
| `Ctrl+G` | `sync` | Run the configured sync command |
| `Ctrl+Q` | `quit` | Quit |