Skip to content

Commit b7cc6f7

Browse files
author
dickmao
committed
markdown-update-header-faces needed explicit call on startup
User saves customization of `markdown-header-scaling` and restarts emacs only to find headers do not resize because the `:set` attribute of `defcustom markdown-header-scaling` is not explicitly called. Rationalize the defcustom stuff and test.
1 parent f3c54e3 commit b7cc6f7

File tree

2 files changed

+47
-27
lines changed

2 files changed

+47
-27
lines changed

markdown-mode.el

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2039,7 +2039,7 @@ headers of levels one through six respectively."
20392039
:initialize 'custom-initialize-default
20402040
:set (lambda (symbol value)
20412041
(set-default symbol value)
2042-
(markdown-update-header-faces value))
2042+
(markdown-update-header-faces))
20432043
:group 'markdown-faces
20442044
:package-version '(markdown-mode . "2.2"))
20452045

@@ -2051,44 +2051,38 @@ Used when `markdown-header-scaling' is non-nil."
20512051
:initialize 'custom-initialize-default
20522052
:set (lambda (symbol value)
20532053
(set-default symbol value)
2054-
(markdown-update-header-faces markdown-header-scaling value))
2054+
(markdown-update-header-faces))
20552055
:group 'markdown-faces)
20562056

20572057
(defun markdown-make-header-faces ()
20582058
"Build the faces used for Markdown headers."
2059-
(let ((inherit-faces '(font-lock-function-name-face)))
2060-
(when markdown-header-scaling
2061-
(setq inherit-faces (cons 'variable-pitch inherit-faces)))
2059+
(unless (facep 'markdown-header-face)
20622060
(defface markdown-header-face
2063-
`((t (:inherit ,inherit-faces :weight bold)))
2061+
'((t (:inherit (font-lock-function-name-face) :weight bold)))
20642062
"Base face for headers."
2065-
:group 'markdown-faces))
2066-
(dotimes (num 6)
2067-
(let* ((num1 (1+ num))
2068-
(face-name (intern (format "markdown-header-face-%s" num1)))
2069-
(scale (if markdown-header-scaling
2070-
(float (nth num markdown-header-scaling-values))
2071-
1.0)))
2072-
(eval
2073-
`(defface ,face-name
2074-
'((t (:inherit markdown-header-face :height ,scale)))
2075-
(format "Face for level %s headers.
2063+
:group 'markdown-faces)
2064+
(dotimes (num 6)
2065+
(let* ((num1 (1+ num))
2066+
(face-name (intern (format "markdown-header-face-%s" num1)))
2067+
(scale (float (nth num markdown-header-scaling-values))))
2068+
(eval
2069+
`(defface ,face-name
2070+
'((t (:inherit (variable-pitch markdown-header-face) :height ,scale)))
2071+
(format "Face for level %s headers.
20762072
You probably don't want to customize this face directly. Instead
20772073
you can customize the base face `markdown-header-face' or the
20782074
variable-height variable `markdown-header-scaling'." ,num1)
2079-
:group 'markdown-faces)))))
2075+
:group 'markdown-faces))))))
20802076

2081-
(markdown-make-header-faces)
2082-
2083-
(defun markdown-update-header-faces (&optional scaling scaling-values)
2084-
"Update header faces, depending on if header SCALING is desired.
2085-
If so, use given list of SCALING-VALUES relative to the baseline
2086-
size of `markdown-header-face'."
2077+
(defun markdown-update-header-faces (&optional _scaling _scaling-values)
2078+
"Update header faces using current values of markdown-header-scaling and
2079+
markdown-header-scaling-values. Arguments are ignored but retained to avoid breakage."
2080+
(markdown-make-header-faces)
20872081
(dotimes (num 6)
20882082
(let* ((face-name (intern (format "markdown-header-face-%s" (1+ num))))
2089-
(scale (cond ((not scaling) 1.0)
2090-
(scaling-values (float (nth num scaling-values)))
2091-
(t (float (nth num markdown-header-scaling-values))))))
2083+
(scale (if markdown-header-scaling
2084+
(float (nth num markdown-header-scaling-values))
2085+
1.0)))
20922086
(unless (get face-name 'saved-face) ; Don't update customized faces
20932087
(set-face-attribute face-name nil :height scale)))))
20942088

@@ -9686,6 +9680,7 @@ rows and columns and the column alignment."
96869680
(markdown-live-preview-remove)))
96879681

96889682

9683+
(markdown-update-header-faces)
96899684
(provide 'markdown-mode)
96909685

96919686
;; Local Variables:

tests/markdown-test.el

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,12 @@ This file is not saved."
119119
(dolist (loc (number-sequence begin end))
120120
(message "%d: %s" loc (get-char-property loc prop))))
121121

122+
(defun markdown-test-range-has-face-attribute (begin end plst)
123+
"Verify that range BEGIN to END has face containing PROP=VALUE."
124+
(dolist (loc (number-sequence begin end))
125+
(cl-loop for (k v) on plst by #'cddr
126+
do (should (equal (face-attribute (get-char-property loc 'face) k) v)))))
127+
122128
(defun markdown-test-range-has-property (begin end prop value)
123129
"Verify that range BEGIN to END has PROP equal to or containing VALUE."
124130
(let (vals fail-loc)
@@ -3083,6 +3089,25 @@ takes precedence)."
30833089
(should (markdown-on-heading-p))
30843090
(should-not (markdown-range-property-any 453 484 'face '(markdown-hr-face)))))
30853091

3092+
(ert-deftest test-markdown-font-lock/heading-height ()
3093+
"User customizes scaling, and restarts emacs. Scaling needs to render."
3094+
(let ((restore-scaling markdown-header-scaling)
3095+
(restore-scaling-values markdown-header-scaling-values))
3096+
(markdown-test-string
3097+
"# h1
3098+
"
3099+
(custom-set-variables '(markdown-header-scaling t t))
3100+
(markdown-test-range-has-face-attribute 3 4
3101+
`(:height ,(car markdown-header-scaling-values)))
3102+
(custom-set-variables '(markdown-header-scaling nil t))
3103+
(markdown-test-range-has-face-attribute 3 4 '(:height 1.0))
3104+
(custom-set-variables '(markdown-header-scaling t t)
3105+
'(markdown-header-scaling-values
3106+
`(3.0 ,(cdr markdown-header-scaling-values))))
3107+
(markdown-test-range-has-face-attribute 3 4 '(:height 3.0))
3108+
(custom-set-variables '(markdown-header-scaling restore-scaling t)
3109+
'(markdown-header-scaling-values restore-scaling-values t)))))
3110+
30863111
(ert-deftest test-markdown-font-lock/heading-code-block-no-whitespace ()
30873112
"Headings immediately before code blocks should be identified correctly.
30883113
See GH-234."

0 commit comments

Comments
 (0)