2009-04-22 10 views
11

मैं अपनी मोड लाइन में कहीं भी (getenv "HOSTNAME") का आउटपुट प्रदर्शित करना चाहता हूं। मेरा डिस्प्ले-टाइम-मोड 'टी' पर सेट है, इसलिए मैं पहले से ही मोड लाइन में लोड, लोड लेवल और मेल फ्लैग प्रदर्शित कर रहा हूं। क्या मेजबाननाम भी वहां लाने का कोई आसान तरीका है?Emacs: मोड लाइन में होस्टनाम जोड़ें?

मुझे यह पसंद है क्योंकि मैं 3 रिमोट मशीनों में ssh'd हूं, सभी init फ़ाइलों के एक सामान्य सेट से चल रहे emacs, और मुझे यह जानने के लिए कुछ तेज़ आसान अविभाज्य तरीका चाहिए कि मैं कौन सी मशीन ' मैं काम कर रहा हूँ

उत्तर

7

मैं ऊपर जवाब करने की कोशिश की और विशेष रूप से सफल नहीं था (मैं Emacs 23 चल रहा हूँ): यदि आप चर ही स्थापित कर रहे थे, तो आप की तरह कुछ करने के लिए होगा।

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

मैं इस और अन्य चीजें मैं एक posting on my website में Emacs modeline के बारे में खोज की विस्तृत जानकारी दी है: ज्यादा जांच के बाद, मैं बस अपना mode-line-format में system-name डाल इस प्रकार समाप्त हो गया।

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 की परिभाषा पर एक नज़र डालें।

संबंधित मुद्दे