2009-04-22 11 views
11

Me gustaría mostrar la salida de (getenv "HOSTNAME") en algún lugar de mi línea de modo. Mi modo de tiempo de visualización está configurado en 't', por lo que ya estoy mostrando la hora, el nivel de carga y un indicador de correo en la línea de modo. ¿Hay una manera fácil de obtener el nombre de host allí también?Emacs: agregar nombre de host a la línea de modo?

Me gustaría tener esto porque estoy ssh'd en 3 máquinas remotas, todas corriendo emacs desde un conjunto común de archivos init, y me gustaría alguna forma rápida, sencilla y discreta para saber qué máquina ' estoy trabajando en.

Respuesta

7

probé las respuestas anteriores y no fue particularmente exitoso (estoy corriendo emacs 23). Después de mucha investigación, acabé poniendo en mi system-namemode-line-format de la siguiente manera:

;; 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. 
     "-%-" 
     ) 
) 

he detallado esto y otras cosas que descubrí acerca de la modeline emacs en un posting on my website.

9

Para construir sobre Sean brillante de answer, específicamente se puede hacer esto:

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

Esto supone que 'mode-line-modes es una parte de su 'mode-line-format, que es por defecto. Debido a que está modificando la lista apuntada por la variable 'mode-line-format, no tiene que establecer el valor predeterminado. Si estaba configurando la propia variable, que tendría que hacer algo como:

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

También puede anexar basura a la variable global-mode-string:

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

Esas dos líneas son probablemente suficientes para algo estático, como su nombre de host.

Si tiene algo más dinámico puede configurar un temporizador con run-at-time para actualizar la cadena (my-hostname en este ejemplo). Eche un vistazo a la definición de display-time-mode para un buen pequeño ejemplo.