2013-04-09 10 views
6

मैं अगर वहाँ एक रास्ता मोड लिंक अग्रभूमि और प्रमुख मोड पर पृष्ठभूमि रंग बदलने के लिए आधार है देखना पसंद के आधार पर,बदलें Emacs मोड लाइन रंग प्रमुख मोड

मैं जोड़ने के लिए सोच रहा था

(add-hook 'after-change-major-mode-hook 

पर तर्क, लेकिन मेरे पास इस तरह के बदलाव करने के लिए सभी emacs lisp अनुभव नहीं है। यहां तर्क है:

switch major-mode: 
case "emacs-lisp-mode": 
    (set-face-foreground 'mode-line "ivory") 
    (set-face-background 'mode-line "DarkOrange2") 
case "ruby-mode": 
    (set-face-foreground 'mode-line "white") 
    (set-face-background 'mode-line "red") 
... 
default: 
    (set-face-foreground 'mode-line "black") 
    (set-face-background 'mode-line "white") 
end switch 

अग्रिम में बहुत धन्यवाद!

उत्तर

9

आप शायद कुछ ऐसा करना चाहते हैं।

+0

आपको बहुत धन्यवाद। यह खूबसूरती से काम करता है :) क्या आप भी एक पूर्वनिर्धारित सूची का उपयोग करके अपने ऐड-हुक को गठबंधन करने में मदद करने के लिए दयालु होंगे? "एसडीएस" सुझाव के समान, लेकिन रंगों के साथ पूर्वनिर्धारित सूची में सभी मोड में ऐड-हुक? धन्यवाद! –

+0

आपका मतलब है '(डॉलीस्ट (एक्स' ((emacs-lisp-mode: अग्रभूमि "हाथीदांत": पृष्ठभूमि "डार्कऑरेंज 2") (रूबी-मोड: अग्रभूमि "सफेद": पृष्ठभूमि "लाल")) (ऐड-हुक (इंटर्न (कॉन्सट (प्रतीक-नाम (कार एक्स)) "-मोड")) (लैम्ब्डा() (चेहरे-रीमेप-एड-रिश्तेदार 'मोड-लाइन (विपक्ष (सीडीआर एक्स)' (मोड-लाइन))))) 'सावधान रहें कि यह केवल' लेक्सिकल-बाध्यकारी: टी' बफर में काम करेगा। – Stefan

3

"तर्क" आप के बारे में बात कर रहे हैं कुछ इस तरह है:

(add-hook 'after-change-major-mode-hook 'my-set-mode-line-colors) 
(defvar my-mode-line-colors 
    '((emacs-lisp-mode :foreground "ivory" :background "DarkOrange2") 
    (ruby-mode :foreground "white" :background "red"))) 
(defun my-set-mode-line-colors() 
    (face-remap-add-relative 
    'mode-line (list (or (cdr (assq major-mode my-mode-line-colors)) 
         '(:foreground "black" :background "white")) 
        'mode-line))) 

वैकल्पिक रूप से, आप कर सकते हैं कि मोड विशेष हुक, के रूप में स्टीफन ने सुझाव दिया है।

(add-hook 'emacs-lisp-mode-hook 
      (lambda() 
      (face-remap-add-relative 
      'mode-line '((:foreground "ivory" :background "DarkOrange2") mode-line)))) 

साथ ही आप mode-line-inactive चेहरे के लिए आमने-remap का उपयोग करना चाहें:

+0

मुझे वास्तव में प्रत्येक मोड में एड-हुक था। लेकिन जब मैं रूबी से लिस्प तक बफर स्विच करता हूं, तो मोड-लाइन अपडेट नहीं हुआ .. इसलिए मैंने "चेंज-मेजर-मोड-हुक" के बारे में सोचा और आप सही हैं, न तो काम करते हैं ... क्या यह है कि बफर-स्विच-हुक? मैंने ऐसा कुछ देखने की कोशिश की लेकिन कोई फायदा नहीं हुआ। धन्यवाद! –

+0

जैसा कि मैंने लिखा है, समस्या यह है कि emacs चेहरे बफर-स्थानीय नहीं हैं, इसलिए ऊपर सेट-फेस-फोरग्राउंड कॉल सभी विंडोज़ और सभी मोड लाइनों को प्रभावित करेगी। मोड-लाइन उपस्थिति बफर-विशिष्ट – sds

+0

सेट-फेस-फोरग्राउंड प्रति फ्रेम सेट किया जा सकता है। यहां तक ​​कि यदि मेरे पास एकाधिक फ्रेम हैं, तो मैं केवल उस फ्रेम के लिए मोड-लाइन बदल सकता हूं ... जब तक मैं कह सकता हूं कि जब बफर स्विच और आउट हो जाता है और मोड-लाइन बदलता है, तो उसे काम करना चाहिए .. –

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