2009-04-22 11 views
11

Je voudrais afficher la sortie de (getenv "HOSTNAME") quelque part dans ma ligne de mode. Mon mode d'affichage est réglé sur 't', donc j'affiche déjà l'heure, le niveau de chargement et un drapeau de courrier dans la ligne de mode. Y a-t-il un moyen facile d'obtenir le nom d'hôte ici aussi? Je voudrais avoir ceci parce que je suis ssh'd dans 3 machines distantes, exécutant tous emacs d'un ensemble commun de dossiers d'initialisation, et je voudrais un moyen rapide et facile de savoir quelle machine je ' Je travaille sur.Emacs: ajouter le nom d'hôte à la ligne de mode?

Répondre

7

J'ai essayé les réponses ci-dessus et n'a pas été particulièrement réussi (je suis en cours d'exécution emacs 23). Après beaucoup de recherches, je me suis retrouvé juste mettre system-name dans mon mode-line-format comme suit:

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

J'ai exposé en détail et dans d'autres choses que je découvre sur le emacs modeline dans un posting on my website.

9

Pour construire sur Sean answer lumineux, vous pouvez le faire en particulier:

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

Cela suppose que 'mode-line-modes est une partie de votre 'mode-line-format, qui est par défaut. Comme vous modifiez la liste pointée par la variable 'mode-line-format, vous n'avez pas besoin de définir la valeur par défaut. Si vous définissez la variable elle-même, vous auriez à faire quelque chose comme:

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

Vous pouvez également ajouter indésirable à la variable global-mode-string:

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

Ces deux lignes sont probablement suffisantes pour quelque chose de statique comme votre nom d'hôte.

Si vous avez quelque chose de plus dynamique, vous pouvez configurer un temporisateur avec run-at-time pour mettre à jour la chaîne (my-hostname dans cet exemple). Jetez un oeil à la définition de display-time-mode pour un bon petit exemple.

Questions connexes