Emacs: добавить имя хоста в строку режима?

Я хотел бы отображать вывод (getenv "HOSTNAME" ) где-то в моей строке режима. Мой режим отображения времени установлен на "t", поэтому я уже показываю время, уровень загрузки и флаг почты в строке режима. Есть ли простой способ получить здесь имя хоста?

Я хотел бы иметь это, потому что я ssh'd на 3 удаленных компьютерах, все запущенные emacs из общего набора файлов инициализации, и мне бы хотелось, чтобы быстрый быстрый ненавязчивый способ узнать, какая машина я работая.

Ответ 1

Я попробовал вышеуказанные ответы и не был особенно успешным (я запускаю emacs 23). После долгих исследований я просто ввел system-name в мой mode-line-format следующим образом:

;; Set the modeline to tell me the filename, hostname, etc..
(setq-default mode-line-format
  (list " "
        ; */% indicators if the file has been modified
        'mode-line-modified
        "--"
        ; the name of the buffer (i.e. filename)
        ; note this gets automatically highlighted
        'mode-line-buffer-identification
        "--"
        ; major and minor modes in effect
        'mode-line-modes
        ; if which-func-mode is in effect, display which
        ; function we are currently in.
        '(which-func-mode ("" which-func-format "--"))
        ; line, column, file %
        'mode-line-position
        "--"
        ; if vc-mode is in effect, display version control
        ; info here
        `(vc-mode vc-mode)
        "--"
        ; hostname
        'system-name
        ; dashes sufficient to fill rest of modeline.
        "-%-"
        )
)

Я подробно описал эту и другие вещи, которые я обнаружил о моделировании emacs в публикации на моем веб-сайте.

Ответ 2

Чтобы построить на Sean Bright answer, вы можете это сделать:

(let ((pos (memq 'mode-line-modes mode-line-format)))
  (setcdr pos (cons (getenv "HOSTNAME") (cdr pos))))

Предполагается, что 'mode-line-modes является частью вашего 'mode-line-format, который он по умолчанию. Поскольку вы изменяете список, на который указывает переменная 'mode-line-format, вам не нужно устанавливать значение по умолчанию. Если вы сами устанавливаете переменную, вам нужно будет сделать что-то вроде:

(setq-default mode-line-format (build-list-that-contains-(getenv "HOSTNAME")))

Ответ 3

Вы также можете добавить мусор к переменной global-mode-string:

(defvar my-hostname (concat " " (system-name)))
(setq global-mode-string (append global-mode-string '(my-hostname)))

Эти две строки, вероятно, достаточны для чего-то статического, такого как ваше имя хоста.

Если у вас есть что-то более динамичное, вы можете настроить таймер с помощью run-at-time, чтобы обновить строку (my-hostname в этом примере). Взгляните на определение display-time-mode для небольшого примера.