Go to the previous, next section.
The mode line contents are controlled by a data structure of lists,
strings, symbols and numbers kept in the buffer-local variable
mode-line-format. The data structure is called a mode line
construct, and it is built in recursive fashion out of simpler mode line
constructs.
The value of this variable is a mode line construct with overall responsibility for the mode line format. The value of this variable controls which other variables are used to form the mode line text, and where they appear.
A mode line construct may be as simple as a fixed string of text, but it usually specifies how to use other variables to construct the text. Many of these variables are themselves defined to have mode line constructs as their values.
The default value of mode-line-format incorporates the values
of variables such as mode-name and minor-mode-alist.
Because of this, very few modes need to alter mode-line-format.
For most purposes, it is sufficient to alter the variables referenced by
mode-line-format.
A mode line construct may be a list, cons cell, symbol, or string. If the value is a list, each element may be a list, a cons cell, a symbol, or a string.
string
%-constructs. Decimal digits after the %
specify the field width for space filling on the right (i.e., the data
is left justified). See section %-Constructs in the Mode Line.
symbol
t or nil, or is void, in which case symbol is
ignored.
There is one exception: if the value of symbol is a string, it is
processed verbatim in that the %-constructs are not recognized.
(string rest...) or (list rest...)
(symbol then else)
nil,
the second element of the list (then) is processed recursively as
a mode line element. But if the value of symbol is nil,
the third element of the list (if there is one) is processed
recursively.
(width rest...)
For example, the usual way to show what percentage of a buffer is above
the top of the window is to use a list like this: (-3 . "%p").
If you do alter mode-line-format itself, the new value should
use all the same variables that are used by the default value, rather
than duplicating their contents or displaying the information in another
fashion. This permits customizations made by the user, by libraries
(such as display-time) or by major modes via changes to those
variables remain effective.
Here is an example of a mode-line-format that might be
useful for shell-mode since it contains the hostname and default
directory.
(setq mode-line-format
(list ""
'mode-line-modified
"%b--"
(getenv "HOST") ; One element is not constant.
":"
'default-directory
" "
'global-mode-string
" %[(" 'mode-name
'minor-mode-alist
"%n"
'mode-line-process
")%]----"
'(-3 . "%p")
"-%-"))
Go to the previous, next section.