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
для небольшого примера.