elisp: Mode Line Top
22.4.3 The Top Level of Mode Line Control
-----------------------------------------
The variable in overall control of the mode line is ‘mode-line-format’.
-- User Option: mode-line-format
The value of this variable is a mode line construct that controls
the contents of the mode-line. It is always buffer-local in all
buffers.
If you set this variable to ‘nil’ in a buffer, that buffer does not
have a mode line. (A window that is just one line tall also does
not display a mode line.)
The default value of ‘mode-line-format’ is designed to use the values
of other variables such as ‘mode-line-position’ and ‘mode-line-modes’
(which in turn incorporates the values of the variables ‘mode-name’ and
‘minor-mode-alist’). Very few modes need to alter ‘mode-line-format’
itself. For most purposes, it is sufficient to alter some of the
variables that ‘mode-line-format’ either directly or indirectly refers
to.
If you do alter ‘mode-line-format’ itself, the new value should use
the same variables that appear in the default value (
Mode Line
Variables), rather than duplicating their contents or displaying the
information in another fashion. This way, customizations made by the
user or by Lisp programs (such as ‘display-time’ and major modes) via
changes to those variables remain effective.
Here is a hypothetical example of a ‘mode-line-format’ that might be
useful for Shell mode (in reality, Shell mode does not set
‘mode-line-format’):
(setq mode-line-format
(list "-"
'mode-line-mule-info
'mode-line-modified
'mode-line-frame-identification
"%b--"
;; Note that this is evaluated while making the list.
;; It makes a mode line construct which is just a string.
(getenv "HOST")
":"
'default-directory
" "
'global-mode-string
" %[("
'(:eval (mode-line-mode-name))
'mode-line-process
'minor-mode-alist
"%n"
")%]--"
'(which-func-mode ("" which-func-format "--"))
'(line-number-mode "L%l--")
'(column-number-mode "C%c--")
'(-3 "%p")))
(The variables ‘line-number-mode’, ‘column-number-mode’ and
‘which-func-mode’ enable particular minor modes; as usual, these
variable names are also the minor mode command names.)