Next: DIY Font configurations for Org and others, Previous: DIY Add padding to the mode line, Up: Advanced customization [Index]
There are cases where we need to change the buffer-local attributes of a
face. This might be because we have our own minor mode that reuses a
face for a particular purpose, such as a line selection tool that
activates hl-line-mode
, but we wish to keep it distinct from other
buffers. This is where face-remap-add-relative
can be applied and may
be combined with modus-themes-with-colors
to deliver consistent results.
Use theme colors in code with modus-themes-with-colors.
In this example we will write a simple interactive function that adjusts
the background color of the region
face. This is the sample code:
(defvar my-rainbow-region-colors (modus-themes-with-colors `((red . ,bg-red-subtle) (green . ,bg-green-subtle) (yellow . ,bg-yellow-subtle) (blue . ,bg-blue-subtle) (magenta . ,bg-magenta-subtle) (cyan . ,bg-cyan-subtle))) "Sample list of color values for `my-rainbow-region'.") (defun my-rainbow-region (color) "Remap buffer-local attribute of `region' using COLOR." (interactive (list (completing-read "Pick a color: " my-rainbow-region-colors))) (face-remap-add-relative 'region `( :background ,(alist-get (intern color) my-rainbow-region-colors) :foreground ,(face-attribute 'default :foreground))))
When my-rainbow-region
is called interactively, it prompts for a color
to use. The list of candidates is drawn from the car of each
association in my-rainbow-region-colors
(so “red”, “green”, etc.).
To extend this principle, we may write wrapper functions that pass a color directly. Those can be useful in tandem with hooks. Consider this example:
(defun my-rainbow-region-magenta () (my-rainbow-region 'magenta)) (add-hook 'diff-mode-hook #'my-rainbow-region-magenta)
Whenever we enter a diff-mode
buffer, we now get a magenta-colored
region.
Perhaps you may wish to generalize those findings in to a set of functions that also accept an arbitrary face. We shall leave the experimentation up to you.
Reload the theme for changes to take effect.
Next: DIY Font configurations for Org and others, Previous: DIY Add padding to the mode line, Up: Advanced customization [Index]