From 520e41dbfceff60faa62347e1c364be673572bd5 Mon Sep 17 00:00:00 2001 From: Torben Buck Date: Tue, 13 Oct 2026 00:59:49 +0200 Subject: [PATCH 1/2] feat: add print option for the displayed message Adds a print button to the message header and a Ctrl/Cmd+P shortcut. Print styles reduce the page to the message itself and always print light, keeping the sender's original colors. Grants the Tauri webview print permission needed on macOS. Closes #107 Co-Authored-By: Claude Opus 5.5 --- src-tauri/capabilities/default.json | 1 + src-tauri/gen/schemas/capabilities.json | 2 +- src/js/KeyboardManager.js | 1 + src/js/KeyboardShortcuts.js | 7 ++ src/js/ui/MessageContentRenderer.js | 15 ++-- src/js/ui/UIManager.js | 43 +++++++++++ src/styles.css | 99 +++++++++++++++++++++++++ tests/KeyboardManager.test.js | 14 ++++ tests/UIManager.test.js | 85 +++++++++++++++++++++ 9 files changed, 260 insertions(+), 7 deletions(-) diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index c141aade..9563dd6a 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -7,6 +7,7 @@ "core:default", "core:webview:allow-webview-position", "core:webview:allow-set-webview-focus", + "core:webview:allow-print", "core:window:default", "fs:default", "fs:allow-read-text-file", diff --git a/src-tauri/gen/schemas/capabilities.json b/src-tauri/gen/schemas/capabilities.json index 0b0660e4..204a2e33 100644 --- a/src-tauri/gen/schemas/capabilities.json +++ b/src-tauri/gen/schemas/capabilities.json @@ -1 +1 @@ -{"default":{"identifier":"default","description":"Default permissions for msgReader","local":true,"windows":["main"],"permissions":["core:default","core:webview:allow-webview-position","core:webview:allow-set-webview-focus","core:window:default","fs:default","fs:allow-read-text-file","fs:allow-read-file","updater:default","dialog:default","process:default"]}} \ No newline at end of file +{"default":{"identifier":"default","description":"Default permissions for msgReader","local":true,"windows":["main"],"permissions":["core:default","core:webview:allow-webview-position","core:webview:allow-set-webview-focus","core:webview:allow-print","core:window:default","fs:default","fs:allow-read-text-file","fs:allow-read-file","updater:default","dialog:default","process:default"]}} \ No newline at end of file diff --git a/src/js/KeyboardManager.js b/src/js/KeyboardManager.js index 681b29e8..283c9266 100644 --- a/src/js/KeyboardManager.js +++ b/src/js/KeyboardManager.js @@ -68,6 +68,7 @@ class KeyboardManager { ['togglePin', () => this.toggleCurrentPin()], ['deleteMessage', () => this.deleteCurrentMessage()], ['openFilePicker', () => this.openFilePicker()], + ['printMessage', () => this.app.uiManager.printMessage()], ['focusSearch', () => this.focusSearch()], ['clearSearch', () => this.clearSearch()], ['closeModal', () => this.closeCurrentModal()], diff --git a/src/js/KeyboardShortcuts.js b/src/js/KeyboardShortcuts.js index a5f5134b..8e464a37 100644 --- a/src/js/KeyboardShortcuts.js +++ b/src/js/KeyboardShortcuts.js @@ -84,6 +84,12 @@ export const SHORTCUTS = { contexts: [KEYBOARD_CONTEXTS.MAIN], description: 'Open file picker' }, + { + keys: ['Ctrl+p', 'Meta+p'], + action: 'printMessage', + contexts: [KEYBOARD_CONTEXTS.MAIN], + description: 'Print message' + }, { keys: ['/'], action: 'focusSearch', @@ -156,6 +162,7 @@ export const HELP_MODAL_SECTIONS = [ { keys: ['s'], description: 'Pin/unpin message' }, { keys: ['Delete'], description: 'Delete message' }, { keys: ['Ctrl/\u2318+O'], description: 'Open file picker' }, + { keys: ['Ctrl/\u2318+P'], description: 'Print message' }, { keys: ['/'], description: 'Focus search' }, { keys: ['t'], description: 'Toggle theme' } ] diff --git a/src/js/ui/MessageContentRenderer.js b/src/js/ui/MessageContentRenderer.js index 6e7a5b8a..55265b8c 100644 --- a/src/js/ui/MessageContentRenderer.js +++ b/src/js/ui/MessageContentRenderer.js @@ -63,6 +63,11 @@ export class MessageContentRenderer { ${canDownloadOriginal ? `` : ''} +