2012-11-15 15 views
27

क्या किसी ने संकलन-मोड Emacs में ansi-color के लिए समर्थन जोड़ा है? यदि ऐसा है तो यह सुनिश्चित करने के लिए कि उसका सक्रिय टर्मिनल एएनएसआई-एस्केप रंग का समर्थन करता है, रंग-लेखन कार्यक्रम को किस संपत्ति/विशेषता की जांच करनी है।संकलन मोड में एएनएसआई रंग

+2

संभव डुप्लिकेट [ककड़ी के एएनएसआई Emacs अप खिलवाड़ रंग संकलन बफर] (http://stackoverflow.com/questions/3072648/खीरे-ansi-colors-messing-up-emacs-compilation-buffer) – legoscia

उत्तर

41

धूमकेतु बफर को रंग लगाने के लिए पहले से ही एक फ़ंक्शन है। आप बस संकलन बफ़र्स पर यह सक्षम करना होगा:

(require 'ansi-color) 
(defun colorize-compilation-buffer() 
    (toggle-read-only) 
    (ansi-color-apply-on-region compilation-filter-start (point)) 
    (toggle-read-only)) 
(add-hook 'compilation-filter-hook 'colorize-compilation-buffer) 

रंग लेखन कार्यक्रमों टर्मिनल रंग समर्थन करता है या TERM वातावरण चर और terminfo डेटाबेस जांच होनी चाहिए। व्यावहारिक रूप से, बहुत सारे कार्यक्रम इसे अनदेखा करते हैं और उपयोगकर्ता सेटिंग पर भरोसा करते हैं। Emacs संकलन टर्मिनल प्रकार को डिफ़ॉल्ट रूप से dumb पर सेट करेगा लेकिन compilation-environment चर सेट करके इसे ओवरराइड किया जा सकता है।

+0

यह पूरी तरह से काम नहीं कर रहा है। मैंने 'grep --color' के साथ परीक्षण किया और कभी-कभी बड़े क्षेत्र रंगीन हो जाते हैं जो नहीं होना चाहिए। ऐसा लगता है जैसे Emacs हमेशा एएनएसआई नियंत्रण अनुक्रमों को अक्षम करने का पता नहीं लगाता है :( –

+1

@ Nordlöw, मैंने इस समस्या को ठीक किया है, और पोस्ट को अपडेट किया है। फ़ंक्शन पूरे बफर को रंगीन करने का प्रयास कर रहा था, हालांकि इसे केवल उस खंड को फ़िल्टर करना चाहिए एक प्रक्रिया से फैला हुआ है। हालांकि नया संस्करण अधिक मजबूत और तेज़ है, फिर भी यह भ्रमित हो सकता है, क्योंकि इसकी गारंटी नहीं है, कि एक प्रक्रिया से बचने के क्रम में अपने आउटपुट में कटौती नहीं होगी। – ivg

+0

धन्यवाद, मदद के लिए। –

22

मेरे अनुकूलित समाधान जो M-x grep (केवल M-x compile के लिए) अपवित्र नहीं है:

(ignore-errors 
    (require 'ansi-color) 
    (defun my-colorize-compilation-buffer() 
    (when (eq major-mode 'compilation-mode) 
     (ansi-color-apply-on-region compilation-filter-start (point-max)))) 
    (add-hook 'compilation-filter-hook 'my-colorize-compilation-buffer)) 
की
+1

धन्यवाद! जब मैं ऊपर दिए गए स्वीकृत उत्तर की तरह कुछ और उपयोग कर रहा था, तो मेरे आरजीआरपी बफर एक ठोस लाल फ़ॉन्ट में दिखाए जा रहे थे। आपका संस्करण काम कर रहा है मेरे लिए बहुत बेहतर। Emacs का उपयोग 24.3.50.1। – sockmonk

+2

धन्यवाद, यह एक बेहतर समाधान की तरह लगता है। 'संकलन-फ़िल्टर-स्टार्ट' का उपयोग करना सबकुछ शर्त लगाने से कहीं अधिक कुशल होना चाहिए हर बार वीन '(बिंदु-मिनट)' और '(बिंदु-अधिकतम)'। – mgalgs

+1

इस काम को करने के लिए मुझे संकलन-पर्यावरण चर को TERM = xterm-256color पर सेट करने की आवश्यकता है। –

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