2012-12-10 27 views
7

मैं अपने कर्सर के रंग को Emacs के अंदर अन्य रंगों में गतिशील रूप से बदलने की कोशिश कर रहा हूं।टर्मिनल के अंदर Emacs कर्सर रंग गतिशील रूप से बदलते हैं

मैं टर्मिनल Emacs के लिए emacs -nw का उपयोग कर रहा हूँ। मैं जिस टर्मिनल का उपयोग कर रहा हूं वह आरएक्सवीटी-यूनिकोड (Urxvt) है।

चूंकि Emacs (मुझे लगता है) टर्मिनल में परिवर्तन नहीं कर सकता है, (set-cursor-color "red") काम नहीं करेगा। टर्मिनल के कर्सर रंग को बदलने के लिए मैं echo -ne '\033]12;red\007' चला सकता हूं। यह कर्सर के रंग को लाल रंग में बदल देता है।

एमएक्स में मैंने जो करने की कोशिश की वह इस कमांड को इसके अंदर चलाने के लिए है। M-x shell-command RET echo -ne '\033]12;red\007' RET

हालांकि, Emacs प्रतिध्वनि स्ट्रिंग से बचेंगे और खिड़की के नीचे इसे प्रिंट करेंगे, और वास्तव में कर्सर में कोई भी परिवर्तन नहीं करेंगे।

मुझे सच में नहीं पता कि मैं यहां से और क्या कर सकता हूं, मैं Emacs GUI का उपयोग नहीं करना चाहता। क्या किसी को भी यहाँ के रास्ते पता है? मैं अपने वर्तमान मोड के आधार पर अपने कर्सर के रंग को बदलने में सक्षम होना चाहता हूं, यही कारण है कि इसे गतिशील होना चाहिए। अगर किसी के पास कोई अन्य सुझाव है तो मुझे उन्हें सुनकर खुशी होगी!

+0

'shell-command' कम अवरक्त शेल में कमांड चलाता है, इसलिए यह युक्त Emacs में प्रभावी नहीं होगा। मुझे नहीं पता कि Emacs को सीधे भागने के अनुक्रमों को प्रतिबिंबित करने के लिए कैसे प्राप्त करें ... मैंने वहां से बचने के अनुक्रम के साथ (संदेश ...) का उपयोग करने की कोशिश की लेकिन कोई भाग्य नहीं। – scottfrazer

उत्तर

5

मुझे लगता है कि आप send-string-to-terminal का उपयोग करना चाहते हैं।

उदा। (send-string-to-terminal "\033]12;red\007")

+0

ऐसा लगता है कि यह सबसे अच्छा समाधान है! बहुत बहुत धन्यवाद। मुझे फ्रांसेस्को के जवाब को अस्वीकार करने के लिए दर्द होता है, लेकिन यह सबसे अच्छा काम करता है। आपकी मदद के लिए अभी भी आप दोनों को धन्यवाद! – Attic

+0

ठीक है अब मैं मूर्खतापूर्ण महसूस कर रहा हूं :(भले ही मैंने सोचा कि यह काम करता है (और यह करता है) हालांकि जब भी मैं फ़ंक्शन चलाता हूं तो यह संपादक को टेक्स्ट में प्रिंट करता है। इसलिए यह काम नहीं करेगा मैं डरता हूं। इस प्रश्न को थोड़े समय के लिए अनुत्तरित छोड़ दें और अन्यथा मुझे फ्रांसेस्को के जवाब को फिर से स्वीकार करना होगा। मेरी माफ़ी .. – Attic

+0

यह निश्चित रूप से ऐसा लगता है कि यह जाने का सही तरीका है। फिर भी मुझे समझ में नहीं आता कि यह क्यों काम नहीं करता है अपेक्षित होना...(मेरे सेटअप में, यह कर्सर रंग बदल नहीं है और टर्मिनल में एएनएसआई अनुक्रम मुद्रण करता है; मैं 'एम एक्स पुनः बनाने-display' यह से छुटकारा पाने के चलाने के लिए है) मेरे लिए – Francesco

2

यह एक बहुत ही hackish समाधान है - मुझे आशा है कि किसी को मिलेगा एक अच्छा वाला:

(suspend-emacs "echo -ne '\\033]12;red\\007'; fg\n") 

यह अस्थायी रूप से अंतर्निहित टर्मिनल में Emacs प्रक्रिया और स्टफिंग आदेशों निलंबित खोल कर्सर बदल बनाने के लिए कर काम करता है उसके बाद रंग और फिर से शुरू emacs। हालांकि, यह स्क्रीन को फ्लिकर करने का कारण बनता है जबकि इमैक फ्रेम अस्थायी रूप से गायब हो जाता है।

(shell-command (format "echo -ne '\\033]12;red\\007' > /proc/%d/fd/1" (emacs-pid))) 

यह सीधे (टर्मिनल के लिए एएनएसआई एस्केप अनुक्रम भेजने जो /proc/PID के माध्यम से पहुँचा है द्वारा (कम से कम लिनक्स पर) काम करता है:


यहाँ एक और बहुत hackish और सिस्टम पर निर्भर समाधान है छद्म फाइल सिस्टम)। मुझे यह समाधान पिछले एक की तुलना में अधिक सुरुचिपूर्ण नहीं मिला है, लेकिन कम से कम यह स्क्रीन झिलमिलाहट नहीं करता है।

+0

ऐसा लगता है कि, स्क्रीन झिलमिलाहट थोड़ा परेशान है लेकिन शायद एक बेहतर तरीका नहीं हो सकता है। अगर कोई बेहतर तरीके से आ सकता है तो यह बहुत अच्छा होगा। – Attic

+0

भले ही यह "सुरुचिपूर्ण" नहीं है, यह काम करता है! इस समाधान के लिए बहुत बहुत धन्यवाद! – Attic