fix(ligatures): activate prettify-symbols-mode conditionally
With +extra enabled, this module would activate `prettify-symbols-mode` in any buffer where `prettify-symbols-alist` is non-nil, whether or not `+ligatures-extra-alist` has an entry for the current major mode (or a parent thereof). This behavior is poor UX, since the user may be expecting that a empty entry for some `X-mode` in `+ligatures-extra-alist` should mean *no` prettify-symbols-mode` at all in `X-mode`. With this, `+ligatures-extra-alist` is now the authority. An empty entry for `X-mode` will result in `prettify-symbols-mode` *not* being activated there. If that entry *isn't* empty, it will be combined only with the global default value of `prettify-symbols-alist`, not any pre-existing buffer-local value, to make the end result deterministic, because some modes have their own defaults for it (like `lisp-prettify-symbols-alist`, `js--prettify-symbols-alist`, and `rust-prettify-symbols-alist`). Fix: #7440
This commit is contained in:
parent
59de0ec15e
commit
c07f359d64
2 changed files with 18 additions and 21 deletions
|
@ -42,9 +42,6 @@
|
||||||
|
|
||||||
(setq rustic-indent-method-chain t)
|
(setq rustic-indent-method-chain t)
|
||||||
|
|
||||||
;; Conflicts with (and is redundant with) :ui ligatures
|
|
||||||
(setq rust-prettify-symbols-alist nil)
|
|
||||||
|
|
||||||
;; Leave automatic reformatting to the :editor format module.
|
;; Leave automatic reformatting to the :editor format module.
|
||||||
(setq rustic-babel-format-src-block nil
|
(setq rustic-babel-format-src-block nil
|
||||||
rustic-format-trigger nil)
|
rustic-format-trigger nil)
|
||||||
|
|
|
@ -99,19 +99,24 @@ efficient to remove the `+extra' flag from the :ui ligatures module instead).")
|
||||||
(defun +ligatures-init-extra-symbols-h ()
|
(defun +ligatures-init-extra-symbols-h ()
|
||||||
"Set up `prettify-symbols-mode' for the current buffer.
|
"Set up `prettify-symbols-mode' for the current buffer.
|
||||||
|
|
||||||
Extra ligatures are mode-specific substituions, defined in
|
Overwrites `prettify-symbols-alist' and activates `prettify-symbols-mode' if
|
||||||
`+ligatures-extra-symbols', assigned with `set-ligatures!', and made possible
|
(and only if) there is an associated entry for the current major mode (or a
|
||||||
with `prettify-symbols-mode'. This variable controls where these are enabled.
|
parent mode) in `+ligatures-extra-alist' AND the current mode (or a parent mode)
|
||||||
See `+ligatures-extras-in-modes' to control what major modes this function can
|
isn't disabled in `+ligatures-extras-in-modes'."
|
||||||
and cannot run in."
|
(when after-init-time
|
||||||
(when (and after-init-time (+ligatures--enable-p +ligatures-extras-in-modes))
|
(when-let*
|
||||||
(prependq! prettify-symbols-alist
|
(((+ligatures--enable-p +ligatures-extras-in-modes))
|
||||||
(or (alist-get major-mode +ligatures-extra-alist)
|
(symbols
|
||||||
|
(if-let ((symbols (assq major-mode +ligatures-extra-alist)))
|
||||||
|
symbols
|
||||||
(cl-loop for (mode . symbols) in +ligatures-extra-alist
|
(cl-loop for (mode . symbols) in +ligatures-extra-alist
|
||||||
if (derived-mode-p mode)
|
if (derived-mode-p mode)
|
||||||
return symbols)))
|
return symbols))))
|
||||||
(when prettify-symbols-alist
|
(setq prettify-symbols-alist
|
||||||
(when prettify-symbols-mode
|
(append symbols
|
||||||
|
;; Don't overwrite global defaults
|
||||||
|
(default-value 'prettify-symbols-alist)))
|
||||||
|
(when (bound-and-true-p prettify-symbols-mode)
|
||||||
(prettify-symbols-mode -1))
|
(prettify-symbols-mode -1))
|
||||||
(prettify-symbols-mode +1))))
|
(prettify-symbols-mode +1))))
|
||||||
|
|
||||||
|
@ -124,11 +129,6 @@ and cannot run in."
|
||||||
(setq prettify-symbols-unprettify-at-point 'right-edge)
|
(setq prettify-symbols-unprettify-at-point 'right-edge)
|
||||||
|
|
||||||
(when (modulep! +extra)
|
(when (modulep! +extra)
|
||||||
;; Lisp modes offer their own defaults for `prettify-symbols-mode' (just a
|
|
||||||
;; lambda symbol substitution), but this might be unexpected if the user
|
|
||||||
;; enables +extra but has unset `+ligatures-extra-symbols'.
|
|
||||||
(setq lisp-prettify-symbols-alist nil)
|
|
||||||
|
|
||||||
(add-hook 'after-change-major-mode-hook #'+ligatures-init-extra-symbols-h))
|
(add-hook 'after-change-major-mode-hook #'+ligatures-init-extra-symbols-h))
|
||||||
|
|
||||||
(cond
|
(cond
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue