24.4.3 Высший уровень управления строкой состояния

Переменной, которая в целом управляет строкой состояния, является mode-line-format.

Пользовательская опция: mode-line-format

Значение этой переменной представляет собой конструктор строки состояния, который контролирует содержимое строки состояния. Она всегда локальна для буфера во всех буферах.

Если вы устанавливаете эту переменную в nil в буфере, то в этом буфере нет строки состояния. (Окно высотой всего в одну строку также не отображает строку состояния.)

Значение по умолчанию для mode-line-format разработано таким образом, чтобы использовать значения других переменных, таких как mode-line-position и mode-line-modes (которые, в свою очередь, включают значения переменных mode-name и minor-mode-alist). Очень мало режимов нуждаются в изменении самой mode-line-format. В большинстве случаев достаточно изменить некоторые из переменных, на которые mode-line-format напрямую или косвенно ссылается.

Если вы все же изменяете саму mode-line-format, новое значение должно использовать те же переменные, которые присутствуют в значении по умолчанию (см. Переменные, используемые в строке состояния), а не дублировать их содержимое или отображать информацию иным образом. Таким образом, настройки, сделанные пользователем или Lisp-программами (например, display-time и основные режимы) посредством изменения этих переменных, остаются в силе.

Вот гипотетический пример mode-line-format, который может быть полезен для Shell-режима (на самом деле, Shell-режим не устанавливает mode-line-format):

(setq mode-line-format
  (list "-"
   'mode-line-mule-info
   'mode-line-modified
   'mode-line-frame-identification
   "%b--"
   ;; Обратите внимание, что это вычисляется при создании списка.
   ;; Это создает конструктор строки состояния, который является просто строкой.
   (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")))

(Переменные line-number-mode, column-number-mode и which-function-mode включают определенные второстепенные режимы; как обычно, эти имена переменных также являются именами команд второстепенных режимов.)