2009-04-22 14 views
11

Mi piacerebbe visualizzare l'output di (getenv "HOSTNAME") da qualche parte nella mia linea di modo. La modalità display-time è impostata su "t", quindi sto già visualizzando il tempo, il livello di carico e un flag di posta nella riga della modalità. C'è un modo semplice per ottenere l'hostname anche lì?Emacs: aggiungi il nome host alla riga della modalità?

Mi piacerebbe avere questo perché sono ssh'd in 3 macchine remote, tutti in esecuzione emacs da un set comune di file di init, e mi piacerebbe un modo veloce facile e discreto per sapere quale macchina I ' sto lavorando.

risposta

7

Ho provato le risposte di cui sopra e non ebbe particolare successo (sto correndo emacs 23). Dopo molte indagini, ho finito per mettere semplicemente system-name nel mio mode-line-format come segue:

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

ho dettaglio questa e altre cose che ho scoperto circa la modeline emacs in un posting on my website.

9

di costruire su Sean Bright answer, in particolare si può fare questo:

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

Questo presuppone che 'mode-line-modes è una parte della vostra 'mode-line-format, che è di default. Poiché stai modificando l'elenco puntato dalla variabile 'mode-line-format, non devi impostare il valore predefinito. Se imposti la variabile stessa, che avrebbe dovuto fare qualcosa di simile:

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

È inoltre possibile accodare spazzatura alla variabile global-mode-string:

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

quelle due righe sono probabilmente sufficienti per qualcosa di statico come il nome host.

Se si dispone di qualcosa di più dinamico, è possibile impostare un timer con run-at-time per aggiornare la stringa (my-hostname in questo esempio). Dai un'occhiata alla definizione di display-time-mode per un bell'esempio.

Problemi correlati