2009-04-22 4 views
11

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

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

ответ

7

Я попытался выше ответы и не был особенно успешным (я бегу 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 в posting on my website.

9

Чтобы построить на Шона Брайта 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"))) 
1

Вы также можете добавить мусор переменной 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 для приятного примера.

Смежные вопросы