Mintty penceresinin başlığını nasıl değiştirebilirim?


35

MinTTY, Cygwin için yeni varsayılan Konsoldur.

MinTTY penceresinin başlığını değiştirmek için bir kabuk komutu (.bashrc veya daha da iyisi .zshrc içine koyabileceğim bir şey) nedir?

Pencerenin başlığının geçerli dizine giden yol olmasını ve konsol içindeki dizinleri değiştirdiğimde güncellenmesini istiyorum.


1
Cygwin'in varsayılan bilgi istemi ayarı (yani $PS1) zaten pencere başlığını user @ machine: working_directory olarak ayarlayan bir kontrol sırası içeriyor.
ak2

Yeni bir MSYS2_packages / filesystem 6e6310d (dosya sistemi: Yeni özel değişken MSYS2_PS1., 2016-05-01) taahhüdünde, farklı Cygwin / MSYS2 yapılandırmalarına izin veren bir MSYS2_PS1 bilgi istemi komut dosyası sundu. Var olan herhangi bir PS1'in orta önceliğe sahip olmasını sağlamak için bir ayar önerdim github.com/Alexpux/MSYS2-packages/pull/651 . Bu yardımcı olur umarım.
Philip Oakley

@Philip, (kendinden not) İğnenin çekişmeli olduğunu ispatladı ve farklı kullanımları kapsayan asgari uygulanabilir düzeltmeyi oluşturmak için daha fazla eklem ekleniyor (veya kaldırılıyor).
Philip Oakley

1
Yalnızca gibi statik bir başlık gerekiyorsa, İlgili "Cygwin i686" veya "Cygwin x86_64" o zaman kullanabilirsiniz, -T <title>Windows'un kısayol özelliklerinde. Ayrıca bakınız mintty man page.
jww

Yanıtlar:


50

Yanlış olan ne

Aşağıdaki komut benim için çalışmıyordu:

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

Varsayılan Cygwin kurulumumun .bashrc dosyasında aşağıdaki bilgi istemi tanımını içerdiği ortaya çıktı:

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

Bilgi isteminin ( \e]0;\w\a) ilk bölümünün bilgi isteminin her görüntülenişinde pencere başlığını ayarladığını unutmayın.

Çözüm

.bashrc2 işlevi tanımlayana bu satırları ekleyin :

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$ "
}

Ardından bu komutla özel bir başlık belirleyebilirsiniz:

settitle "MYWonderfullTest here"

veya bu komutla cygwin'in varsayılanına (mevcut yol) geri dönebilirsiniz:

settitlepath

Bu yardımcı olur umarım


1
Çoğu kullanıcının varsayılan cygwin ayarları ile karşılaşacağı PS1 sorununu gidermek harika bir iş.
Markku K.

3
Bu, en yüksek oyu alan cevabın aksine mükemmel bir şekilde çalıştığından, cevap olarak kabul edilmiş olmalı
Tapan Chandra,

1
Sadece kesip yapıştırabileceğim bir cevabı seviyorum. Ayrıca sorunun gerçekten ne olduğunu da açıkça açıklar.
Darrel Lee,

bu işlevler benim için iyi çalışıyor! cygwin'in .bashrc'nizi yeniden yüklemesi için, cygwin'i yeniden başlatmanız gerekeceğini VEYA yazmayı unutmayın source ~/.bashrc- cygwin, cygwin başladığında diskte bulunan eski bashrc sürümünü çalıştırıyor olacak. - test edildi Cygwin version 2.8.1 (64 bit)- 2017 sürümü
hanshenrik

Bu cevap neden hiç kabul edilmedi?
avukat

26

Bunun için xterm kontrol dizisiyle değiştirebilirsiniz, şöyle:

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

: Bakınız http://code.google.com/p/mintty/issues/detail?id=241


4
Benim için bir etkisi yok: / Belki de bu numara 6 aydır bozuldu?
voltrevo

Bash kullanıyor musunuz?
James Fu

2
Bir ekran içinden yayınlandığında hiçbir etkisi olmaz.
Ярослав Рахматуллин

10
Muhtemelen sorun, komut isteminin başlığı güncellemek için zaten yapılandırılmış olmasıdır (geçerli yolla exmaple için), bu nedenle komut çalışır ancak komut istemi tarafından aniden geçersiz kılınır.
Andrea Polci

2
Test etmek için "echo -ne '\ e] 0; Title \ a' && cat". Bu yöntem istemin hemen sıfırlanmasını önler. (Bu işe yararsa, profilinizde
PS1'i

3

Bunu .zshrc içine yerleştirin:

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

Settitle fonksiyonundaki özel karakter dizisi, MinTTY'nin pencerenin başlığını değiştirmesini sağlar.

Gelen zsh Eğer özel bir isim chpwd olan bir işlev tanımlarsanız, bu olacak her İşlevin sonra çağrılan .

WinXP üzerinde çalışıyor, Cygwin 1.7 ve MinTTY zsh kullanıyor.


Ayrıca WSL’de de çalışır (eksi Cygpath’ın eksi, elbette): settitle "$(pwd)@$HOST"
zzxyz

2

Bash'da PROMPT_COMMAND değişkeni, noktalı virgüllerle ayrılmış bir dizi komut tutacak şekilde ayarlanabilir. Bunu, zsh hakkında konuşan diğer yanıtta açıklandığı şekilde aynı başlık ayarını yapmak için kullanabilirsiniz.


2
1) $ PS1 eko ve bu dize panoya veya metin editörüne kopyalayın.
   yankı $ PS1
2) ~ / .bash_profile dosyasını düzenleyin ve $ PS1'i gerektiği şekilde değiştirerek aşağıdaki kabuk kodunu ekleyin, ancak $ {TERMINAL_TITLE} değişkenini "false" durumunda tutun.
3) Dosyayı kaydedin ve TERMINAL_TILE ortam değişkenini olduğu gibi ayarlayın
   export TERMINAL_TITLE = "Özel Başlığım"
4) Bash profilinizi, olduğu gibi
   . ~ / .Bash_profile
Keyfini çıkarın

eğer [-z "$ {TERMINAL_TITLE}"]]
sonra
  PS1 = '\ [\ e] 0; \ w \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \] \ n \ $ '
Başka
  PS1 = '\ [\ e] 0; $ {TERMINAL_TITLE} \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \ ] \ n \ $ '
fi

1

Leonel'in cevabını kullandım, ancak başlığın sadece bunu yaparken titreyeceğini gördüm, bu en azından yankı komutunun amaçlandığı gibi çalıştığını gösterir. Zsh işlevini etkin bir şekilde hata ayıklama moduyla çalıştırdım

zsh -xv

Dizinin değiştirilmesi açıkça ve title()sonradan etkin bir şekilde geçersiz kılınan denilen başka bir işlevi çağırır . Böylece bunu .zshrc cihazıma bağladım ve işe yaradı.precmd()chpwd()

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

Eğer kullanmayı tercih ederseniz chpwd()veya precmd()bunun yerine, sadece başlık işlevini devre dışı bırakın: title(){}.


1

Ben sadece senaryomu yürütmek için mintty kullandığım için çözümümü bununla paylaşmak istedim.

Mintty kısayolum şu şekilde ayarlandı:

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

Yukarıdaki kısayolda çağrılan yazdığım connect.sh betiği , betiğimde tanımlanan settitle işlevini AND bağlamak istediğim sunucuyu soracak.

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

Kullanmazsanız neden fonksiyonu tanımladınız title?
pabouk

0

bunu .bash_profile içine eklemeyi deneyin

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

Benim için çalışıyor.


2
Soru, pencere başlığını değiştirmek değil, komut istemiyle ilgilidir.
kenorb

1
lütfen bunu .bash_profile dosyasına ekleyin, başlığı değiştirmek için tamam, teşekkürler!
netawater, 14
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.