मैं emacs शेल-मोड में अपने प्रॉम्प्ट को कैसे ठीक करूं?


13

मैं एक सहयोगी की मशीन पर कुछ प्रोग्रामिंग कर रहा हूं। उसके पास emacs का एक संस्करण है (23.1.1) जिसका मैंने पहले उपयोग नहीं किया है। मेरी समस्या यह है कि जब मैं शेल-मोड पर जाता हूं, तो मेरा बैश प्रॉम्प्ट इस तरह दिखता है:

^[]0;jay@socrates:~^G[jay@socrates]$ 

मैंने अपने में PS1सेट कर '[\u@\h]\$ 'लिया है .bashrc। यह इस तरह दिखना चाहिए:

[jay@socrates]$

यह एक नियमित खोल में दिखता है। मैंने यह भी जाँच लिया है कि PS1 emacs शेल में सही मान पर सेट है, इसलिए अब मैं विचारों से बाहर हूँ। मैं जिस तरह से चाहता हूं, उसे देखने के लिए मुझे अपना संकेत कैसे मिल सकता है?

मैंने उपयोग करने के बजाय termया eshellइसके लिए कुछ सुझाव देखे हैं shelltermऊपर के रूप में एक ही शीघ्र समस्या है, और eshellपूरी तरह से मेरी उपेक्षा PS1करता है ताकि वास्तव में मदद नहीं करता है।

जवाबों:


13

आपका शेल XTerm's (या अन्य कंसोल) शीर्षक / हेडर सेट करने का प्रयास कर रहा है। ऐसे कई तरीके हो सकते हैं।

पहले सुनिश्चित करें कि PS1 वास्तव में वही है जो आपको लगता है कि यह है

echo $PS1 | less -E

यह आपको बताएगा कि यदि प्रॉम्प्ट में नियंत्रण वर्ण हैं, तो कम उन्हें मज़ेदार बना देगा। यदि आप कहते हैं कि आपका संकेत ठीक है, तो यह संभवतः PROMPT_COMMAND पर्यावरण चर है। आप उसी तरह से देख सकते हैं ...

echo $PROMPT_COMMAND | less -E

यदि प्रॉम्प्ट कमांड समस्या है, तो आप इसे अनसुना कर सकते हैं। किसी भी स्थिति में, ये चर कहीं स्थापित किए जा रहे हैं, और यदि आपको XTerm में नहीं हैं तो XTerm हैडर को अपडेट करने के लिए सेट नहीं किया जाना चाहिए!

आप "मानक" bashrc (/ etc / bashrc) में देख सकते हैं। आपको कोड देखना चाहिए जो एक पुनरावृत्त शेल (PS1 सेट) के लिए जाँच करता है, और फिर xterm ($ TERM चर को देखते हुए) की जाँच करता है, और अन्य टर्मिनल प्रकारों की तुलना में वहाँ कुछ अलग करता है।

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

यदि उपरोक्त सभी विफल रहता है, तो प्रयास करें

printenv | less

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


1
PROMPT_COMMAND की समस्या थी। मुझे यकीन नहीं है कि यह कहां सेट हो रहा है, लेकिन मैंने इसे अनसेट करने के लिए अपने ~ / .bashrc पर एक लाइन जोड़ी और वह काम करता है। धन्यवाद!
जे कॉनरॉड

PROMPT_COMMAND मुझे भी मार रहा था। मैं MobaXTerm का उपयोग कर रहा हूं और इसमें विशेष रूप से जटिल बैश प्रॉम्प्ट है जो PS1 और PROMPT_COMMAND का संयोजन था।
स्टीव ब्रबर्ग

5

मैं एक ही समस्या को लेकर आया था और यह PROMPT_COMMAND के कारण है। मुझे xterm टाइटल पसंद है। इसलिए मैंने ~ / .emacs_bash में निम्नलिखित पंक्ति जोड़ी

export PROMPT_COMMAND=""

2

यह टर्मिनल प्रकार के साथ कुछ करने के लिए हो सकता है emacs खोल अपने नियमित शेल बनाम। TERMदोनों गोले में पर्यावरण चर क्या सेट है की जाँच करें । यदि वे भिन्न हैं, तो आपको एमएसीएस शेल टर्मिनल प्रकार को बदलने में सक्षम होना चाहिए या एमएसीएस टर्मिनल के लिए एक अलग पीएस 1 परिभाषा का उपयोग करना चाहिए .bashrc

आप भी कोशिश कर सकते हैं M-x ansi-term(और ansi-color-for-comint-mode-onयदि आपके पास रंग संकेत हैं)।


1
ansi-color-for-comint-mode-on ने मेरी मदद की!
यूजर 1

1

स्टैकओवरफ्लो साइट पर यह बहुत अच्छी तरह से उत्तर दिया गया था। डैनियल पो द्वारा।

यहाँ उसका जवाब है।

आप AnsiTerm का उपयोग कर सकते हैं जो रंगों का समर्थन करता है या आप सामान्य शेल के लिए AnsiColor को सक्षम कर सकते हैं:

(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.