From d8c9aaa66aea3636d99f90ff181d2a6c508884ef Mon Sep 17 00:00:00 2001 From: Linus Rath <139418639+rathlinus@users.noreply.github.com> Date: Sun, 16 Aug 2026 21:54:52 +0200 Subject: [PATCH] feat: add setting to render plain-text emails in normal or monospace font #830 --- components/email/email-viewer.tsx | 3 ++- components/email/thread-conversation-view.tsx | 3 ++- components/settings/reading-settings.tsx | 14 ++++++++++++++ components/settings/settings-app.tsx | 3 ++- locales/ar/common.json | 6 ++++++ locales/ca/common.json | 6 ++++++ locales/cs/common.json | 6 ++++++ locales/da/common.json | 6 ++++++ locales/de/common.json | 6 ++++++ locales/en/common.json | 6 ++++++ locales/es/common.json | 6 ++++++ locales/fa/common.json | 6 ++++++ locales/fr/common.json | 6 ++++++ locales/he/common.json | 6 ++++++ locales/hu/common.json | 6 ++++++ locales/it/common.json | 6 ++++++ locales/ja/common.json | 6 ++++++ locales/ko/common.json | 6 ++++++ locales/lv/common.json | 6 ++++++ locales/mn/common.json | 11 ++++++++++- locales/nl/common.json | 6 ++++++ locales/pl/common.json | 6 ++++++ locales/pt/common.json | 6 ++++++ locales/ro/common.json | 6 ++++++ locales/ru/common.json | 6 ++++++ locales/sk/common.json | 6 ++++++ locales/tr/common.json | 6 ++++++ locales/uk/common.json | 6 ++++++ locales/zh/common.json | 6 ++++++ stores/settings-store.ts | 6 ++++++ 30 files changed, 180 insertions(+), 4 deletions(-) diff --git a/components/email/email-viewer.tsx b/components/email/email-viewer.tsx index a72135ac9..9d28f1389 100644 --- a/components/email/email-viewer.tsx +++ b/components/email/email-viewer.tsx @@ -662,6 +662,7 @@ export function EmailViewer({ const tWelcome = useTranslations('welcome'); const externalContentPolicy = useSettingsStore((state) => state.externalContentPolicy); const messageSpacing = useSettingsStore((state) => state.messageSpacing); + const plainTextFont = useSettingsStore((state) => state.plainTextFont); const mailAttachmentAction = useSettingsStore((state) => state.mailAttachmentAction); const attachmentPosition = useSettingsStore((state) => state.attachmentPosition); const addTrustedSender = useSettingsStore((state) => state.addTrustedSender); @@ -5024,7 +5025,7 @@ export function EmailViewer({ className="email-content-text text-foreground" dangerouslySetInnerHTML={{ __html: sanitizePlainTextRenderedHtml(effectiveEmailContent.html) }} style={{ - fontFamily: 'ui-monospace, "SF Mono", Consolas, monospace', + ...(plainTextFont === 'mono' && { fontFamily: 'ui-monospace, "SF Mono", Consolas, monospace' }), fontSize: '14px', lineHeight: '1.6', wordBreak: 'break-word', diff --git a/components/email/thread-conversation-view.tsx b/components/email/thread-conversation-view.tsx index 9b339cdca..26de3e08d 100644 --- a/components/email/thread-conversation-view.tsx +++ b/components/email/thread-conversation-view.tsx @@ -240,6 +240,7 @@ function EmailCard({ const mailAttachmentAction = useSettingsStore((state) => state.mailAttachmentAction); const hideInlineImageAttachments = useSettingsStore((state) => state.hideInlineImageAttachments); const emailAlwaysLightMode = useSettingsStore((state) => state.emailAlwaysLightMode); + const plainTextFont = useSettingsStore((state) => state.plainTextFont); const sender = email.from?.[0]; const isUnread = !email.keywords?.$seen; const isStarred = email.keywords?.$flagged; @@ -616,7 +617,7 @@ function EmailCard({ "[&_table]:border-collapse [&_td]:p-2 [&_th]:p-2", "[&_img]:max-w-full [&_img]:h-auto" )} - style={{ whiteSpace: 'pre-wrap', fontFamily: 'ui-monospace, "SF Mono", Consolas, monospace', fontSize: '13px' }} + style={{ whiteSpace: 'pre-wrap', ...(plainTextFont === 'mono' && { fontFamily: 'ui-monospace, "SF Mono", Consolas, monospace' }), fontSize: '13px' }} dangerouslySetInnerHTML={{ __html: sanitizePlainTextRenderedHtml(emailContent.html) }} /> )} diff --git a/components/settings/reading-settings.tsx b/components/settings/reading-settings.tsx index 8ce27ab5f..0c959e0d1 100644 --- a/components/settings/reading-settings.tsx +++ b/components/settings/reading-settings.tsx @@ -36,6 +36,7 @@ export function ReadingSettings() { hideInlineImageAttachments, attachmentImagePreviewsEnabled, messageSpacing, + plainTextFont, updateSetting, } = useSettingsStore(); @@ -130,6 +131,19 @@ export function ReadingSettings() { )} + {!isSettingHidden('plainTextFont') && ( + +