The variable in overall control of the mode line is
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-modes (which in turn incorporates the values of the
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 (see Variables Used in the Mode Line), 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
(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 (format-time-string "%F")) 'mode-line-process 'minor-mode-alist "%n" ")%]--"
'(which-function-mode ("" which-func-format "--")) '(line-number-mode "L%l--") '(column-number-mode "C%c--") '(-3 "%p")))
which-function-mode enable particular minor modes; as usual,
these variable names are also the minor mode command names.)