Skip to content
Go to file

Latest commit

Previously a space was used as the text underlying an image, which
meant that it was located inside of a span of multiple spaces. That
was perfectly okay until Emacs 28 added `mode-line-compact', which
substitutes just one space for any span of spaces.

To prevent that mechanism from removing our images, we now we use
"|" as the text underlying an image.  That text is never displayed,
so we can use whatever we want; i.e. something other than a space.

We could remove the inner whitespace padding around the images but
that would look really bad, so we don't.  We have no control over
the outer padding if any.

Closes #28.

Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Tabs and ribbons for the mode line

This package provides utilities for displaying elements of the mode line as tabs and ribbons. It also provides replacements for a few built-in elements.


  • Make sure that the face mode-line does not set :box and that :underline and :overline are the same color or are both undefined. If defined, then the line color should be different from the :background colors of both mode-line and default. The same rules apply to mode-line-inactive. The line colors of mode-line and mode-line-inactive do not necessarily have to be identical. For example:

    (use-package solarized-theme
      (load-theme 'solarized-light t)
      (let ((line (face-attribute 'mode-line :underline)))
        (set-face-attribute 'mode-line          nil :overline   line)
        (set-face-attribute 'mode-line-inactive nil :overline   line)
        (set-face-attribute 'mode-line-inactive nil :underline  line)
        (set-face-attribute 'mode-line          nil :box        nil)
        (set-face-attribute 'mode-line-inactive nil :box        nil)
        (set-face-attribute 'mode-line-inactive nil :background "#f9f2d9")))
  • Add something like this to your init file:

    (use-package moody
      (setq x-underline-at-descent-line t)
  • Such replacement functions are defined as commands, making it quicker to try them out without having to add anything to your init file.

  • To undo the call to a moody-replace-* function, call the same function with t as the value of the optional REVERSE argument. You can accomplish the same by interactively calling such a function with a prefix argument to do so.