विंडोज में emacs में Git Bash


9

मैं बैश शेल चला सकता हूं जो विंडोज के लिए गिट के साथ आता है। मैंने इसे अपने में रखा .emacs:

(defun git-bash () (interactive)
  (let ((explicit-shell-file-name "D:/Program Files/git/bin/bash"))
    (call-interactively 'shell)))

तब M-x git-bashऔर वोइला, बैश चल रहा है लेकिन कुछ अजीब से:

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
^[]0;MINGW64:/c/Users/M??rton^G
MĂĄrton@Marci MINGW64 /c/Users/MĂĄrton
$ 

और यह उस रेखा को प्रिंट करता है, जिसकी शुरुआत ^[], मेरे द्वारा चलाए जाने वाले प्रत्येक आदेश के बाद होती है। इसके अलावा एन्कोडिंग गड़बड़ है। मैं इसे कैसे ठीक कर सकता हूं .emacs?

जवाबों:


10

^[]शोर अपनी सुरक्षा प्रॉम्प्ट में विभिन्न टर्मिनल नियंत्रण वर्ण से आ रही है। echo $PS1पूर्ण अनुक्रम को देखने का प्रयास करें , और उदाहरण के export PS1='$ 'लिए यह देखने की कोशिश करें कि एक सरल प्रॉम्प्ट स्ट्रिंग उस विशेष समस्या को हटा देती है।

एन्कोडिंग के लिए, आप utf-8 को अपना पसंदीदा एन्कोडिंग बनाने का प्रयास कर सकते हैं:

(prefer-coding-system 'utf-8)

शीघ्र की स्थापना

Emacs INSIDE_EMACS चर सेट करता है ताकि आप एक .bash_profile बना सकें जो PS1 को केवल Emacs में चलने पर सेट करता है।

मेरी मशीन पर परीक्षण, प्रॉम्प्ट की पहली पंक्ति में समस्याग्रस्त नियंत्रण वर्ण हैं। मैंने इसके साथ एक ~ / .bash_profile बनाया।

if [ -n "$INSIDE_EMACS" ]; then
    export PS1='\[\033[32m\]\u@\h \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\]\n$ '
fi

यह डिफ़ॉल्ट रूप से सेटिंग-बैश के आधार पर प्रॉम्प्ट सेट करता है, लेकिन मैंने पहली पंक्ति (\ n लाइन ब्रेक तक) को हटा दिया है। मैंने $ MSYSTEM को भी हटा दिया है जो MINGW64 को प्रॉम्प्ट में डालता है - मुझे यह देखने की आवश्यकता नहीं है। क्या रहता है उपयोगकर्ता @ होस्ट, वर्तमान निर्देशिका और गिट रेपो। नियंत्रण वर्ण उन रंगों को सेट करते हैं जो Emacs मेरे लिए ठीक से प्रदर्शित करता है। (अपना प्रॉम्प्ट सेट करने के विवरण के लिए, बैश मैनुअल देखें ।)

Emacs में मैंने शेल को git-bash में सेट किया है:

(setq explicit-shell-file-name "C:/git-for-windows/bin/bash.exe")
(setq explicit-bash.exe-args '("--login" "-i"))

इस सेटअप के साथ मैं अभी भी प्रारंभिक ioctl त्रुटि संदेश देख रहा हूं, लेकिन अन्यथा चीजें अपेक्षा के अनुरूप काम करती हैं और एन्कोडिंग utf-8 है।


यह काम करता है, धन्यवाद! पीएस 1 लाइन क्या करती है (मुझे क्रिप्टिक करने के लिए)? क्या आप स्वचालित रूप से utf-8 को शेल बफर एन्कोडिंग सेट करने में मदद कर सकते हैं? ( MĂĄrtonपढ़ना चाहिए Márton)
marczellm

मेरे उदाहरण में PS1 डिफ़ॉल्ट रूप से एक git-bash द्वारा सेट किया गया था। मैंने लाइन ब्रेक (\ n) तक सब कुछ हटा दिया। यह उन नियंत्रण अनुक्रमों का उपयोग कर रहा है जो दिखाए गए जानकारी के विभिन्न बिट्स के रंग को बदलने के लिए हैं - वर्तमान उपयोगकर्ता, होस्ट, गिट रेपो, आदि। मुझे विवरण के लिए bash PS1 डॉक्टर को ट्रैक करना होगा। Utf-8 के लिए, default-process-coding-systemआपके Emacs में क्या सेट है?
ग्लूकास

मुझे यह Emacs मैनुअल में मिला: "शेल के लिए एक कोडिंग सिस्टम को निर्दिष्ट करने के लिए, आप Mx शेल से ठीक पहले कमांड Cx RET c का उपयोग कर सकते हैं। आप खोल में Cx RET p टाइप करके एक रनिंग सबशेल के लिए कोडिंग सिस्टम भी बदल सकते हैं। बफ़र। " (देखें gnu.org/software/emacs/manual/html_node/emacs/… )
ग्लूकास

इसका मूल्य है (undecided-dos . undecided-unix)। मैं इसे खोलने के दौरान हर बार कीस्ट्रोक्स के दूसरे सेट को याद रखने के बजाय बफर एन्कोडिंग को स्वचालित रूप से सेट करने का एक तरीका ढूंढ रहा हूं। शायद मुझे एक नया सवाल पूछना चाहिए।
marczellm

मेरा utf-8 डॉस और UNIX है। मैं इसे स्पष्ट रूप से सेट नहीं करता, लेकिन मेरे पास ये सेटिंग हैं: (पसंद-कोडिंग-सिस्टम 'utf-8) (सेट-डिफॉल्ट बफर-फाइल-कोडिंग-सिस्टम' utf-8-unix)
ग्लूकास

1

यह त्रुटि बेमेल स्विच की ओर इशारा करती है। यह शायद करने के लिए सेट है -icऔर आप की जरूरत है -c:

(setq shell-command-switch "-c")

अन्य विकल्प यह है कि (जो भी विंडोज़ समतुल्य है) के समान आदेश के साथ गिट-बैश करने के लिए टीटीआई प्रदान करना है:

/sbin/getty -l bash -n 38400 tty0

आपका पहला सुझाव कुछ भी नहीं बदलता है। इसके अलावा, M-x list-processesदिखाता है कि इसका कोई प्रभाव नहीं पड़ा: प्रक्रिया कमांड है D:/Program Files/git/bin/bash --noediting -i। आपका दूसरा सुझाव मुझे समझ नहीं आ रहा है।
13:16

1
ऐसा इसलिए है क्योंकि आपने -i स्विच को नहीं हटाया है।
Emacs यूजर

ठीक है, तो मैं इसे कैसे निकालूं?
marczellm

1
आप उपयोग कर रहे हैं explicit-shell-file-nameइसलिए मेरा मानना ​​है कि आप उदाहरण के लिए सेट करना चाहते हैं (setq explicit-bash-args '("--login" "-i"))
ग्लूकास

1

मुझे पता है कि यह ओपी के समान नहीं है, लेकिन मुझे लगता है कि यह एक दिलचस्प विकल्प है। आप git-bash कमांड-लाइन से emacs शुरू कर सकते हैं। यह emacs को शेल के रूप में गिट-बैश मान लेगा।

अपने बैश प्रॉम्प्ट से निम्नलिखित की तरह कुछ दर्ज करें

bla@host MINGW64 ~/ $ emacs .&

फिर, एमएसीएस में, एमएक्स "शेल"

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