From 1fade1ab4d954a9f08c7f65c93eaa4ea91b51838 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Fri, 16 Apr 2021 12:37:11 +0100 Subject: [PATCH] feat(lang): ensure markdown formatting respects local fill-column width Previously prettier would always format markdown files to 80 character long lines. Now it reads the character width from the fill-column variable in such a way that fill-column can be set with dir-local variables. --- modules/languages/siren-markdown.el | 15 +++++++++++---- modules/major-modes/siren-prog-mode.el | 7 +++++-- modules/major-modes/siren-text-mode.el | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/modules/languages/siren-markdown.el b/modules/languages/siren-markdown.el index 2604a3e..f583913 100644 --- a/modules/languages/siren-markdown.el +++ b/modules/languages/siren-markdown.el @@ -40,10 +40,12 @@ :init (defun siren-markdown-mode-setup () + ;; Configure prettier after local vars are processed, allowing local + ;; override of fill-column and have prettier respect it. + (add-hook 'hack-local-variables-hook + 'siren-markdown-mode-setup-prettier nil t) + (setq-local markdown-asymmetric-header t - prettier-js-args '("--parser" "markdown" - "--print-width" "80" - "--prose-wrap" "always") whitespace-action nil) (siren-display-fill-column) @@ -52,7 +54,12 @@ (prettier-js-mode) (flyspell-mode) (smartparens-mode +1) - (subword-mode))) + (subword-mode)) + + (defun siren-markdown-mode-setup-prettier () + (setq-local prettier-js-args `("--parser" "markdown" + "--print-width" ,(number-to-string fill-column) + "--prose-wrap" "always")))) ;; Required by markdown-edit-code-block. (use-package edit-indirect diff --git a/modules/major-modes/siren-prog-mode.el b/modules/major-modes/siren-prog-mode.el index 8b2abbb..facb85a 100644 --- a/modules/major-modes/siren-prog-mode.el +++ b/modules/major-modes/siren-prog-mode.el @@ -14,10 +14,13 @@ (prog-mode . siren-prog-mode-setup) :init + (add-to-list 'safe-local-variable-values + '(fill-column . 120)) + (defun siren-prog-mode-setup () "Default coding hook, useful with any programming language." - (setq fill-column 80 - whitespace-action '(auto-cleanup)) + (setq-local fill-column 80 + whitespace-action '(auto-cleanup)) (siren-display-indentation 1) (hl-line-mode t) diff --git a/modules/major-modes/siren-text-mode.el b/modules/major-modes/siren-text-mode.el index 60cebcb..3337d2f 100644 --- a/modules/major-modes/siren-text-mode.el +++ b/modules/major-modes/siren-text-mode.el @@ -12,7 +12,7 @@ :hook (text-mode . siren-text-mode-setup) :init (defun siren-text-mode-setup () - (setq fill-column 80) + (setq-local fill-column 80) (hl-line-mode t) (visual-line-mode t)))