Emacs में टेक्स्ट को कैसे कलर करें?


11

मैं चाहता हूँ जैसे द्वारा उत्पादन है दृश्य (और / या संपादित) Emacs में colorized पाठ, करने के लिए ls -l --color=always, tree...या जो भी।

मैं जिस पाठ को संदर्भित करता हूं वह एक फाइल में मौजूद है। जब मैं उस फ़ाइल को emacs में खोलता हूं, तो मैं इसे रंगीन रूप में देखने में सक्षम होना चाहता हूं, या ANSI (SGR) से बचने के दृश्यों को दिखाने के लिए इसे टॉगल करना चाहता हूं।

ansi-color.el ऐसा लगता है कि मुझे क्या चाहिए, लेकिन मैं एएनएसआई से बचने के अनुक्रमों के किसी भी रंग को करने के लिए इसे प्राप्त करने में सक्षम नहीं हूं , लेकिन मैं व्यक्तिगत कंटोल बाइट्स (जैसे। ^Aऔर ^[) के लिए ब्लू-बोल्ड नहीं देख रहा हूं ... मैं नहीं हूं। यकीन है कि अगर की एक विशेषता है ansi-color, लेकिन मुझे लगता है कि यह है।

Asi-color.el टिप्पणियों के अनुसार , यह स्ट्रिंग्स और क्षेत्रों के साथ काम कर सकता है, लेकिन यहां तक ​​कि यह काम नहीं करता है .. उदाहरण के लिए फ़ंक्शन ansi-color-apply-on-regionद्वारा पहचाना नहीं गया है M-x। यह कहता है, "कोई मैच नहीं"

मैंने (require 'ansi-color)अपने .emacs फ़ाइल और यहां तक ​​कि जोड़ दिया है (add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)। ईमैक्स शुरू होने पर मुझे कोई त्रुटि या चेतावनी नहीं मिलती है, इसलिए मैं फंस गया हूं।

मैं काम करने के लिए मानक कार्य कैसे प्राप्त कर सकता हूं, और क्या यह एक फाइल खोलने पर स्वचालित रूप से लागू करने के लिए बनाया जा सकता है जिसका नाम प्रत्यय है .col?

जवाबों:


15

मुझे लगता है कि आप जिस टुकड़े को याद कर रहे हैं वह interactiveरूप है। यह है कि Emacs एक फ़ंक्शन के बीच अंतर करता है जिसे अन्य फ़ंक्शन द्वारा कॉल किया जाता है, और एक फ़ंक्शन जिसे उपयोगकर्ता द्वारा सीधे कॉल किया जाता है। Emacs लिस्प इंट्रो नोड देखें

अब यदि आप इसकी परिभाषा पढ़ते हैं ansi-color-apply-on-region, तो आप देखेंगे कि यह इंटरैक्टिव उपयोग के लिए नहीं बनाया गया है। "एनी-कलर" को कॉमिंट आउटपुट को फ़िल्टर करने के लिए डिज़ाइन किया गया है। हालाँकि इसके लिए इंटरेक्टिव रैपर बनाना आसान है।

(defun ansi-color-apply-on-region-int (beg end)
  "interactive version of func"
  (interactive "r")
  (ansi-color-apply-on-region beg end))

अगले बिट आप .col एक्सटेंशन के लिए एएनआई रंगों को चालू करना चाहते हैं। आप उन फ़ाइलों को संपादित करने के लिए जो भी प्रमुख मोड का उपयोग करना चाहते हैं, उसमें एक हुक फ़ंक्शन जोड़ सकते हैं। जब भी आप प्रमुख-मोड को चालू करते हैं, तो फ़ंक्शन चलाया जाएगा, इसलिए आपको उचित फ़ाइल प्रत्यय के लिए एक चेक जोड़ना होगा।

वैकल्पिक रूप से आप "मौलिक" मोड के आधार पर एक त्वरित व्युत्पन्न मोड हैक कर सकते हैं।

(define-derived-mode fundamental-ansi-mode fundamental-mode "fundamental ansi"
  "Fundamental mode that understands ansi colors."
  (require 'ansi-color)
  (ansi-color-apply-on-region (point-min) (point-max)))

और इसे उस एक्सटेंशन के साथ जोड़ दें।

(setq auto-mode-alist
      (cons '("\\.col\\'" . fundamental-ansi-mode) auto-mode-alist))

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

मैं आश्चर्यचकित हूं कि मुझसे क्या गलती हो रही है। मैंने आपके द्वारा मेरे .emacs फ़ाइल में ऊपर दिए गए सभी पाठ जोड़े हैं, लेकिन मैं जिस पाठ को हाइलाइट करता हूं, वह एएनएसआई-रंग-ऑन-ऑन-क्षेत्र-इंट को लागू करने के बाद रंगीन नहीं लगता है।
SFbay007

5

निम्नलिखित समाधान ANSI रंग अनुक्रम वाली फ़ाइलों को पढ़ने (और सहेजने नहीं) की अनुमति देता है। फ़ाइल नाम में .txtएक्सटेंशन होना चाहिए ।

लाइब्रेरी ट्टी-फॉर्मेट में डालें ~/.emacs.d/site-lisp/, फिर इन लाइनों को अपनी ~/.emacsइनिट फ़ाइल में जोड़ें।

(add-to-list 'load-path "~/.emacs.d/site-lisp/")              
(require 'tty-format)
(add-hook 'find-file-hooks 'tty-format-guess)

यह एक उपयोगी विकल्प भी है। यह उपयोग करता है ansi-colorऔर इसे एक कदम आगे ले जाता है, जैसा कि आपका लिंक कहता है, "... tty-format.el का उद्देश्य सिर्फ * ऐसी फ़ाइलों को देखने योग्य बनाना है ।" * .. " ऐसी फाइलें " जो ANSI SGR से बच रही हैं। अनुक्रम और बैकस्पेसिंग .. धन्यवाद ..
पीटर।

1
इसके लायक क्या है .. इस विधि बनाम पूरी तरह से संपादन योग्य संस्करण के रूप में event_jr द्वारा पोस्ट किया गया है तेज (~ 25%) महत्वपूर्ण पेजिंग गति के साथ निरंतर पेजिंग गति बेहतर (बहुत बेहतर) बेहतर आवृत्ति .. परीक्षण फ़ाइल में 45,000 लाइनें थीं। संपादन योग्य संस्करण के लिए स्क्रीन रीफ्रेश ग्राउंड को फ़ाइल के माध्यम से लगभग 75% रास्ते में रोकने के लिए, लेकिन स्क्रॉल बार अभी भी स्क्रॉल कर रहा था .. मुझे संदेह है कि यह संपादन योग्य संस्करण में कुछ बिंदु / चिह्न पूर्व बफर के कुछ ओवरहेड के कारण है। .. दोनों विधियों के अपने फायदे हैं ... ( "निरंतर" से मेरा मतलब है कि पेज अप / डाउन कुंजी को लगातार दबाए
रखना

PS .. tty- प्रारूप वाले पृष्ठ सुचारू रूप से और उतने ही तेज़ होते हैं जितने टर्मिनल में कम होते हैं (समय एक दूसरे के दूसरे या दो के भीतर होता है; लगभग शीर्ष-बॉटन से 50 सेकंड, और नीचे-ऊपर)।
20.O पर पीटर।

मुझे इसकी जानकारी नहीं थी tty-format। यह मेरे रैपर फ़ंक्शन या 3 लाइन व्युत्पन्न-मोड से बेहतर लगता है। :) Emacs में बहुत सारे ओवरले के साथ एक कठिन समय होता है, जो कि एएनआई-रंग का रंगीकरण करता है। यहां आगे अनुकूलन का अवसर है, क्योंकि हमें पूरे बफर को रंगीन करने की आवश्यकता नहीं है, बस भाग प्रदर्शित किया जा रहा है।
Event_jr

0

आपके समाधान के लिए बहुत बहुत धन्यवाद @enzotib!

आपके समाधान के अतिरिक्त, यहां उपयोगकर्ता द्वारा स्पष्ट रूप से कॉल करने योग्य एक तरीका है:

;; M-x display-ansi-colors to explicitly decode ANSI color escape sequences                                                                                                                                        
(defun display-ansi-colors ()
  (interactive)
  (format-decode-buffer 'ansi-colors))

और केवल * .txt या README के ​​अलावा अन्य फ़ाइलों के लिए स्वचालित:

;; decode ANSI color escape sequences for .log files                                                                                                                                                               
(add-to-list 'auto-mode-alist '("\\.log\\'" . display-ansi-colors))

इस तरह आप मूल फ़ाइल को बदलने के बिना अपने भागने के अनुक्रम को रंगों के साथ बदल सकते हैं, उपयोग करने वाले समाधानों के विपरीत ansi-color-apply-on-region

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.