Emacs डेमॉन का उपयोग करते समय टर्मिनल और ग्राफिकल फ्रेम के लिए विभिन्न थीम


20

मैं Emacs24 में निम्न व्यवहार को प्राप्त करने की कोशिश कर रहा हूं:

मुझे एक अलग विषय (सोलराइज्ड-डार्क बनाम सोलराइज़्ड-लाइट) का उपयोग करना पसंद है, इस पर निर्भर करता है कि मैं टर्मिनल फ्रेम के साथ रनिंग सर्वर से जुड़ता हूं या नहीं

% emacsclient -t

या एक gtk फ्रेम के साथ

% emacsclient -c

ऐसा लगता है कि पुराने Emacs में काम किया है, लेकिन वर्तमान Emacs मुझे कोई रास्ता नहीं मिल रहा है। मैंने alreday को SO (जैसे, /programming//q/18904529/152439 और उत्तर) और मेलिंग सूचियों (जैसे, https://lists.gnu.org/archive/html/help-gnu-emuss/) की जाँच की 2012-02 / msg00227.html और https://lists.gnu.org/archive/html/help-gnu-emacs/2012-02/msg00237.html )।

मेरा वर्तमान सेटअप इस तरह दिखता है:

(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/solarized")
(if (daemonp)
  (add-hook 'after-make-frame-functions
    (lambda (frame)
      (select-frame frame)
      (if (display-graphic-p frame)
        (load-theme 'solarized-light t)
        (load-theme 'solarized-dark t)
      )
    )
  )
  (load-theme 'solarized-light t)
)

इसके साथ समस्या यह है कि अगर मेरे पास एक ग्राफिकल फ्रेम खुला है और फिर एक टर्मिनल फ्रेम खुला है emacsclient -t, तो थीम सोलराइज्ड-डार्क दोनों नए टर्मिनल फ्रेम (जो कि सही है) और पहले से खुले ग्राफिकल फ्रेम (जिसे छोड़ा जाना चाहिए) पर लागू होता है। अछूता, आदर्श रूप से)। समतुल्य तब होता है जब एक टर्मिनल फ्रेम पहले से ही खुला होता है और मैं एक नया ग्राफिकल फ्रेम खोलता हूं emacsclient -c

EDIT: यदि यह वर्तमान Emacs24 के साथ संभव नहीं है, तो क्या इसे फिर से संभव बनाने की कोई योजना है?


1
Afaik (इस उद्देश्य के लिए अन्य खोज से), कुछ प्रति-बफर सेटिंग्स के लिए पुराने रंग-विषय कार्यान्वयन की अनुमति है। एमएसीएस 24 के साथ एक अंतर्निर्मित थीम सपोर्ट (जिसे डेफ्थेम या लोड-थीम के रूप में जाना जाता है) आया, जो इसका समर्थन नहीं करता है: थीम पूरे ईमैक्स सत्र के लिए समान है। इस तरह के सेटअप के लिए, शायद आप हमेशा सोलराइज्ड-डार्क लोड करके और -rv फ्लैग को ग्राफिकल फ्रेम शुरू करने के लिए एक स्वीकार्य हैक का प्रबंधन कर सकते हैं, लेकिन यह एकदम सही है।
टी। वेरॉन

एक वर्कअराउंड टर्मिनल के लिए और GUI के लिए अलग-अलग क्लाइंट चलाने के लिए है जैसा कि यहां चर्चा की गई है: emacs.stackexchange.com/q/41/93 आपके वर्कफ़्लो के आधार पर, यह संभव समाधान नहीं हो सकता है। यह मेरे लिए काम करता है क्योंकि मैं प्रत्येक में विभिन्न प्रकार के कार्य कर रहा हूं, जिसमें बहुत कम या कोई ओवरलैप नहीं है।
nispio

यदि emacs24 में इनबिल्ट कस्टम थीम थीम आपकी आवश्यकताओं के अनुरूप नहीं है, तो आप हमेशा उपयोग कर सकते हैं, color-theme.elजिसमें IIRC पर निर्भर फ्रेमवर्क सेटिंग्स थीं। सर्वव्यापकता के अलावा इनबिल्ट थीमिंग क्षमताओं का उपयोग करने में कोई बड़ा फायदा नहीं है।
वामसी

2
color-theme-बफर-लोकल , दोनों color-themeऔर Emacs 24 थीम सिस्टम के लिए बफर-लोकल थीम सपोर्ट प्रदान करता है। यदि आप इस मार्ग पर जाने का निर्णय लेते हैं, तो सोलराइज्ड थीम का मेरा संस्करण भी दोनों प्रणालियों का समर्थन करता है।
संन्यासी

@sanityinc धन्यवाद; मैं 24.3 Emacs का उपयोग कर रहा हूं, और कुछ समस्याएं प्रतीत हो रही हैं, github.com/vic/color-theme-buffer-local/issues/5 देखें । लेकिन मैं इस परियोजना पर नजर रखूंगा।
andreas-h

जवाबों:


8

आप विभिन्न विषयों का उपयोग करके ऐसा नहीं कर सकते। इसका समाधान एक ऐसी थीम बनाना है जिसमें टर्मिनल के आधार पर अलग-अलग चेहरे की परिभाषा हो। यदि आप एक उदाहरण font-lock-comment-faceको देखते हैं , तो आप देखेंगे कि यह कैसे काम करता है। निर्दिष्ट करने के बजाय ((class color) (min-colors 88) (background dark))आप यह भी निर्दिष्ट कर सकते हैं (type tty)या (type graphic)आदि। मैनुअल में अधिक जानकारी है

(defface font-lock-comment-face
  '((((class grayscale) (background light))
 :foreground "DimGray" :weight bold :slant italic)
(((class grayscale) (background dark))
 :foreground "LightGray" :weight bold :slant italic)
(((class color) (min-colors 88) (background light))
 :foreground "Firebrick")
(((class color) (min-colors 88) (background dark))
 :foreground "chocolate1")
(((class color) (min-colors 16) (background light))
 :foreground "red")
(((class color) (min-colors 16) (background dark))
 :foreground "red1")
(((class color) (min-colors 8) (background light))
 :foreground "red")
(((class color) (min-colors 8) (background dark))
 :foreground "yellow")
(t :weight bold :slant italic))
  "Font Lock mode face used to highlight comments."
  :group 'font-lock-faces)

मुझे लगता है कि आप एक ऐसा फ़ंक्शन लिख सकते हैं जो दो थीम लेता है और एक मर्ज किए गए विषय का उत्पादन करता है, जिसमें एक विषय (type tty)से चेहरे सौंपे जाते हैं और दूसरे विषय से उन चेहरों को असाइन किया जाता है (type graphic)जहां दोनों मूल विषय का उपयोग करते हैं t


6

कलर-थीम-बफर-लोकल कलर-थीम और एमएसीएस 24 थीम सिस्टम दोनों के लिए बफर-लोकल थीम सपोर्ट प्रदान करता है। यदि आप इस मार्ग पर जाने का निर्णय लेते हैं, तो सोलराइज्ड थीम का मेरा संस्करण भी दोनों प्रणालियों का समर्थन करता है ।


आपके सौर के संस्करण के लिए पॉइंटर के लिए धन्यवाद, मुझे वास्तव में यह पसंद है!
andreas-h

2

आप कस्टमाइज़ेशन में फेस कस्टमाइज़ेशन, जैसे "टर्मिनल मोड" या "न्यूनतम रंग" जैसी स्थितियों को परिभाषित कर सकते हैं:

एक चेहरे को अनुकूलित करते समय, [राज्य] बटन पर क्लिक करें और "सभी प्रदर्शन चश्मा दिखाएं" चुनें। फिर आप चेहरे के आगे विशेषज्ञता के लिए शर्तों को सेट कर सकते हैं।

फ्रेम छोटा होने पर पृष्ठभूमि का रंग काला करने के लिए एक न्यूनतम संस्करण यहां दिया गया है:

(custom-set-faces
 '(default (
            (((type tty) (min-colors 256))
             (:background "black"))
            (t
             (:background "#181a26")))
    ))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.