diff --git a/shr-config.el b/shr-config.el new file mode 100644 index 0000000..a25ed78 --- /dev/null +++ b/shr-config.el @@ -0,0 +1,118 @@ +;;; shr-config.el --- SHR (Simple HTML Renderer) configuration -*- lexical-binding: t; -*- + +;;; Commentary: +;; Global configuration for SHR which is used by mu4e, elfeed, eww, etc. + +;;; Code: + +;; Configure SHR for better readability +(with-eval-after-load 'shr + ;; Basic SHR settings + (setq shr-use-fonts t) ; Use variable fonts + (setq shr-use-colors t) ; Use colors from HTML + (setq shr-max-image-proportion 0.7) ; Limit image size + (setq shr-width nil) ; Use full window width + (setq shr-bullet "• ") ; Nice bullet character + + ;; Increase indentation for better structure + (setq shr-indentation 2) + + ;; Cookie policy + (setq shr-cookie-policy 'same-origin)) + +;; Define a serif face for SHR content +(defface shr-text + '((t :family "Georgia" :height 1.1)) + "Face for SHR body text with serif font." + :group 'shr) + +;; Override SHR faces to use serif fonts +(with-eval-after-load 'shr + ;; Set default SHR text to use serif font + (set-face-attribute 'shr-text nil + :family "Georgia" ; You can change to "Times New Roman", "Palatino", "Baskerville", etc. + :height 1.1) + + ;; Apply serif font to the main text + (defun my-shr-tag-p (dom) + "Custom paragraph handler to apply serif font." + (shr-ensure-paragraph) + (let ((shr-current-font 'shr-text)) + (shr-generic dom)) + (shr-ensure-paragraph)) + + ;; Hook to apply serif font after rendering + (defun my-shr-apply-serif-font () + "Apply serif font to SHR rendered content." + (when (derived-mode-p 'eww-mode 'mu4e-view-mode 'elfeed-show-mode) + (buffer-face-set 'shr-text))) + + (add-hook 'shr-after-render-hook 'my-shr-apply-serif-font)) + +;; Disable line numbers in all modes that use SHR +(defun my-shr-disable-line-numbers () + "Disable line numbers in SHR-rendered buffers." + (display-line-numbers-mode -1) + (setq-local display-line-numbers nil)) + +;; Apply to mu4e view mode +(with-eval-after-load 'mu4e + (add-hook 'mu4e-view-mode-hook 'my-shr-disable-line-numbers)) + +;; Apply to elfeed show mode (already done in elfeed-config, but adding here for completeness) +(with-eval-after-load 'elfeed + (add-hook 'elfeed-show-mode-hook 'my-shr-disable-line-numbers)) + +;; Apply to EWW mode +(with-eval-after-load 'eww + (add-hook 'eww-mode-hook 'my-shr-disable-line-numbers)) + +;; Apply to any buffer after SHR renders content +(with-eval-after-load 'shr + (add-hook 'shr-after-render-hook 'my-shr-disable-line-numbers)) + +;; Function to increase font size in any SHR-rendered buffer +(defun shr-increase-font-size () + "Increase font size in SHR-rendered content." + (interactive) + (text-scale-increase 1)) + +;; Function to decrease font size in any SHR-rendered buffer +(defun shr-decrease-font-size () + "Decrease font size in SHR-rendered content." + (interactive) + (text-scale-decrease 1)) + +;; Function to reset font size +(defun shr-reset-font-size () + "Reset font size to default." + (interactive) + (text-scale-set 0)) + +;; Auto-increase font size in specific modes that use SHR +(defun auto-increase-shr-font-size () + "Automatically increase font size in SHR content." + (text-scale-set 1)) ; Increase by 1 step. Change to 2 or 3 for larger increase + +;; Apply to mu4e +(with-eval-after-load 'mu4e + (add-hook 'mu4e-view-mode-hook 'auto-increase-shr-font-size)) + +;; Apply to elfeed +(with-eval-after-load 'elfeed + (add-hook 'elfeed-show-mode-hook 'auto-increase-shr-font-size)) + +;; Apply to EWW +(with-eval-after-load 'eww + (add-hook 'eww-mode-hook 'auto-increase-shr-font-size)) + +;; Keybindings for manual font size adjustment +(with-eval-after-load 'shr + ;; These will work in any buffer with SHR content + (define-key shr-map (kbd "+") 'shr-increase-font-size) + (define-key shr-map (kbd "=") 'shr-increase-font-size) + (define-key shr-map (kbd "-") 'shr-decrease-font-size) + (define-key shr-map (kbd "0") 'shr-reset-font-size)) + +(provide 'shr-config) +;;; shr-config.el ends here \ No newline at end of file