मिनिटेट विंडो का शीर्षक कैसे बदलें?


35

मिन्टीटी Cygwin के लिए नया डिफ़ॉल्ट कंसोल है।

एक शेल कमांड क्या है (कुछ जो मैं .bashrc, या उससे भी बेहतर, .zshrc में डाल सकता हूं) को मिन्ट विंडो का शीर्षक बदलने के लिए?

मैं विंडो का शीर्षक मौजूदा निर्देशिका के लिए पथ होना चाहूंगा, और इसे अपडेट करना होगा क्योंकि मैं निर्देशिकाओं को कंसोल के अंदर स्विच करता हूं।


1
Cygwin की डिफ़ॉल्ट प्रॉम्प्ट सेटिंग (यानी $PS1) में पहले से ही एक कंट्रोल सीक्वेंस होता है जो यूजर @ मशीन के लिए विंडो टाइटल सेट करता है: working_directory।
ak2

हाल ही में MSYS2_packages / filesystem प्रतिबद्ध 6e6310d (फाइल सिस्टम: नया विशिष्ट चर MSYS2_PS1।, 2016-05-01) ने MSYS2_PS1 शीघ्र स्क्रिप्ट पेश की, जिससे अलग-अलग Cygwin / MSYS2_Surations की अनुमति मिली। मैंने यह सुनिश्चित करने के लिए एक ट्विन प्रस्तावित किया है कि किसी भी मौजूदा PS1 में एक मध्यवर्ती प्राथमिकता github.com/Alexpux/MSYS2-packages/pull/651 है । उम्मीद है की यह मदद करेगा।
फिलिप ओकले

@Philip, (सेल्फ से नोट) उस ट्विस्ट ने विवादास्पद साबित कर दिया है और अलग-अलग उपयोगों को कवर करने वाले न्यूनतम व्यवहार्य फिक्स बनाने के लिए आगे और जुड़वा जोड़े जा रहे हैं (या हटाए गए)।
फिलिप ओकले

1
संबंधित, अगर आपको केवल "Cygwin i686" या "Cygwin x86_64" जैसे स्थिर शीर्षक की आवश्यकता है , तो आप -T <title>Windows शॉर्टकट गुणों में उपयोग कर सकते हैं । यह भी देखें mintty man page
jww

जवाबों:


50

गलत क्या है

निम्नलिखित कमांड मेरे लिए काम नहीं कर रही थी:

echo -ne "\e]0;MYTITLE\a"

यह पता चला है कि मेरी डिफ़ॉल्ट Cygwin स्थापना में .bashrc में निम्नलिखित शीघ्र परिभाषा शामिल है:

PS1=\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$

ध्यान दें कि प्रॉम्प्ट का पहला भाग ( \e]0;\w\a) हर बार प्रॉम्प्ट प्रकट होने पर विंडो शीर्षक सेट कर रहा है।

समाधान

इन पंक्तियों को अपने .bashrcकार्यों में जोड़ें जो 2 कार्यों को परिभाषित करती हैं:

function settitle() {
      export PS1="\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
      echo -ne "\e]0;$1\a"
}
function settitlepath() {
      export PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
}

तब आप इस आदेश के साथ एक कस्टम शीर्षक सेट कर सकते हैं:

settitle "MYWonderfullTest here"

या आप इस आदेश के साथ साइबरविन के डिफ़ॉल्ट (वर्तमान पथ) पर वापस आ सकते हैं:

settitlepath

उम्मीद है की यह मदद करेगा


1
पीएस 1 समस्या को संबोधित करते हुए महान काम, जो अधिकांश उपयोगकर्ता डिफ़ॉल्ट साइबरविन सेटिंग्स के साथ चलेगा।
मार्कु के।

3
इसे उत्तर के रूप में स्वीकार किया जाना चाहिए क्योंकि यह उच्चतम मत वाले उत्तर के विपरीत पूरी तरह से काम करता है
तपन चंद्र

1
मुझे एक जवाब पसंद है मैं बस काट और पेस्ट कर सकता हूं। और यह भी स्पष्ट रूप से बताता है कि वास्तव में समस्या क्या है।
डारेल ली

उन कार्यों मेरे लिए ठीक काम करता है! याद रखें कि cybwin को अपने .bashrc को फिर से लोड करने के लिए, आपको cygwin को फिर से शुरू करना होगा, या लिखना होगा source ~/.bashrc- अन्यथा cygwin अभी भी bashrc के पुराने संस्करण को चला रहा होगा जो कि cygwin शुरू होने पर डिस्क पर था। - पर परीक्षण किया गया Cygwin version 2.8.1 (64 bit)- एक 2017 संस्करण
हैंश्रिक्रिक

इस उत्तर को कभी स्वीकार क्यों नहीं किया गया?
Asmith

26

आप इसे इसके लिए xterm नियंत्रण अनुक्रम के साथ बदल सकते हैं, जैसे:

echo -ne '\e]0;Title\a'

इसका संदर्भ लें: http://code.google.com/p/mintty/issues/detail?id=241


4
मेरे लिए कोई प्रभाव नहीं है: / शायद यह चाल पिछले 6 महीनों में टूट गई है?
वॉल्ट्रेवो

क्या आप बैश का उपयोग कर रहे हैं?
जेम्स फू

2
स्क्रीन के भीतर से जारी किए जाने पर इसका कोई प्रभाव नहीं पड़ता है।
урослав Рахматуллин

10
संभवतः समस्या यह है कि शीर्षक को अपडेट करने के लिए कमांड प्रॉम्प्ट पहले से ही कॉन्फ़िगर किया गया है (वर्तमान पथ के साथ बाहर निकालना), इसलिए कमांड काम करता है लेकिन यह प्रॉम्प्ट द्वारा अचानक ओवरराइड हो जाता है।
एंड्रिया पोल्सी

2
इसे "इको-एन '\ ई] 0 का परीक्षण करने के लिए; शीर्षक \" ए && बिल्ली "। यह विधि प्रॉम्प्ट को तुरंत रीसेट करने से रोकती है। (अगर वह काम करता है, तो आप अपने प्रोफाइल में PS1 को बदल सकते हैं जैसा कि अन्य उत्तरों में बताया गया है)
कर्टिस यल्लोप

3

इसे .zshrc में रखें:

# Change title of MinTTY to current dir
function settitle() {
    echo -ne "\033]2;"$1"\007"
}
function chpwd() {
    settitle $(cygpath -m `pwd`)
}

फ़ंक्शन सेटलिट में विशेष वर्णों का अनुक्रम मिन्टटी को खिड़की के शीर्षक को बदल देता है।

में zsh , यदि आप विशेष नाम chpwd वाला फ़ंक्शन निर्धारित है, यह हो जाएगा प्रत्येक chdir के बाद लागू किया

WinXP पर काम करता है, जिसमें Cygwin 1.7 और MinTTY रनिंग zsh है।


इसके अलावा WSL ​​में काम करता है (शून्य से सागपाथ सामान),: settitle "$(pwd)@$HOST"
zzxyz

2

बैश में, वेरिएबल PROMPT_COMMAND को कई कमांड रखने के लिए सेट किया जा सकता है, जो अर्धविराम द्वारा अलग किया गया है। आप अन्य शीर्षक में वर्णित उसी शीर्षक सेटिंग को करने के लिए उपयोग कर सकते हैं जो zsh के बारे में बात करती है।


2
1) $ PS1 प्रतिध्वनित करें और उस स्ट्रिंग को अपने क्लिपबोर्ड या टेक्स्ट एडिटर में कॉपी करें, जैसे कि
   गूंज $ PS1
2) ~ / .bash_profile संपादित करें और नीचे शेल कोड जोड़ें, $ PS1 को आवश्यक के रूप में प्रतिस्थापित करें लेकिन "झूठी" स्थिति में $ {TERMINAL_TITLE} चर रखें।
3) फ़ाइल को सहेजें और TERMINAL_TILE वातावरण चर सेट करें, जैसे
   निर्यात TERMINAL_TITLE = "मेरा कस्टम शीर्षक"
4) अपने बैश प्रोफाइल को सोर्स करें, जैसे कि
   । ~ / .Bash_profile
का आनंद लें

अगर [-z "$ {TERMINAL_TITLE}"]
फिर
  PS1 = '\ [\ e] 0; \ w \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \] \ _ n \ _ $ '
अन्य
  PS1 = '\ "[\ e] 0; $ {TERMINAL_TITLE} \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \ _ \ _] ] \ n \ '
फाई

1

मैंने लियोनेल के उत्तर का उपयोग किया, लेकिन मैंने पाया कि यह करते समय शीर्षक केवल झिलमिलाहट होगा, जिसका अर्थ है कि कम से कम प्रतिध्वनी कमांड के रूप में काम करता है। मैं डिबग मोड के साथ अंतःक्रियात्मक रूप से zsh का उपयोग करते हुए सक्षम हुआ

zsh -xv

निर्देशिका को बदलना स्पष्ट रूप से उन्हें ओवरराइड करने के title()बाद precmd()और बाद में बुलाए गए एक अन्य फ़ंक्शन का आह्वान करता chpwd()है। इसलिए मैंने इसे अपने .zshrc में प्लग कर दिया और यह काम कर गया।

function settitle() {
    echo -ne "\033]2;"$1"\007"
}
function title() {
    settitle $(cygpath -m `pwd`)
}

यदि आप उपयोग करना चाहते हैं chpwd()या precmd()इसके बजाय, बस शीर्षक फ़ंक्शन को अक्षम करें title(){}:।


1

बस मैं इसका समाधान साझा करना चाहता था क्योंकि मैं स्क्रिप्ट का निष्पादन करने के लिए मिनिट का उपयोग करता हूं।

मेरा शार्टकट शॉर्टकट इस प्रकार है:

C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico /usr/bin/bash.exe -l -c /scripts/connect.sh

कनेक्ट.श लिपि जो मैंने लिखी है, जो कि ऊपर दिए गए शॉर्टकट में कहलाती है, मुझे उस सर्वर के लिए प्रेरित करेगी जिसे मैं लिपि में परिभाषित सेटलमेंट फ़ंक्शन से कनेक्ट करना चाहता हूं और निष्पादित करना चाहता हूं ।

connect.sh

#!/bin/bash

echo "Enter servername when prompted"
echo -n "servername: " 
read servername
function settitle() {
    echo -ne "\033]2;"$servername"\007"
}
function title() {
    settitle $(cygpath -m `pwd`)
}
settitle
ssh my_username@$servername

titleयदि आप इसका उपयोग नहीं करते हैं तो आप फ़ंक्शन को क्यों परिभाषित करते हैं?
पाबौक

0

इसे .bash_profile में जोड़ने का प्रयास करें

export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}:${PWD/#$HOME/~}\007"'

इससे मेरा काम बनता है।


2
सवाल विंडो टाइटल बदलने का है, कमांड प्रॉम्प्ट का नहीं।
केनोरब

1
कृपया इसे .bash_profile में जोड़ें, यह शीर्षक बदलने के लिए ठीक है, धन्यवाद!
नेटवाटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.