Bagaimana cara mengubah judul jendela permen?

35

MinTTY adalah Konsol default baru untuk Cygwin.

Apa itu perintah shell (sesuatu yang bisa saya masukkan .bashrc, atau bahkan lebih baik, di .zshrc) untuk mengubah judul jendela MinTTY?

Saya ingin judul jendela menjadi jalur ke direktori saat ini, dan untuk memperbaruinya saat saya mengganti direktori di dalam konsol.

Leonel
sumber
1
Pengaturan prompt default Cygwin (yaitu $PS1) sudah berisi urutan kontrol yang menetapkan judul jendela ke pengguna @ mesin: working_directory.
ak2
MSYS2_packages / filesystem baru-baru ini melakukan 6e6310d (filesystem: MSYS2_PS1 variabel spesifik baru., 2016-05-01) memperkenalkan skrip prompt MSYS2_PS1, yang memungkinkan konfigurasi Cygwin / MSYS2 berbeda. Saya telah mengusulkan perubahan untuk memastikan bahwa PS1 yang ada memiliki prioritas menengah github.com/Alexpux/MSYS2-packages/pull/651 . Semoga ini membantu.
Philip Oakley
@ Pilip, (catatan dari diri sendiri) Tweak itu telah terbukti kontroversial dan tweak lebih lanjut sedang ditambahkan (atau dihapus) untuk membuat perbaikan minimum yang layak yang mencakup penggunaan yang berbeda.
Philip Oakley
1
Terkait, jika Anda hanya memerlukan judul statis seperti "Cygwin i686" atau "Cygwin x86_64" , maka Anda dapat menggunakan -T <title>properti pintasan Windows. Lihat juga mintty man page.
jww

Jawaban:

50

Apa yang salah

Perintah berikut ini tidak berfungsi untuk saya:

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

Ternyata instalasi Cygwin default saya menyertakan definisi prompt berikut dalam .bashrc:

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

Perhatikan bahwa bagian pertama dari prompt ( \e]0;\w\a) adalah mengatur judul windows setiap kali prompt muncul.

Solusinya

Tambahkan baris-baris ini di Anda .bashrcyang mendefinisikan 2 fungsi:

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

Kemudian Anda dapat mengatur judul khusus dengan perintah ini:

settitle "MYWonderfullTest here"

atau Anda dapat kembali ke default cygwin (jalur saat ini) dengan perintah ini:

settitlepath

Semoga ini membantu

boly38
sumber
1
Kerja bagus, mengatasi masalah PS1 yang akan dihadapi sebagian besar pengguna dengan pengaturan cygwin default.
Markku K.
3
Ini seharusnya diterima sebagai jawaban karena berfungsi sempurna tidak seperti jawaban dengan suara terbanyak
Tapan Chandra
1
Saya suka jawaban yang saya bisa potong dan tempel. Dan juga dengan jelas menjelaskan apa masalahnya sebenarnya.
Darrel Lee
fungsi-fungsi itu berfungsi dengan baik untuk saya! ingat bahwa untuk cygwin memuat ulang .bashrc Anda, Anda harus me-restart cygwin, ATAU menulis source ~/.bashrc- kalau tidak cygwin masih akan menjalankan versi bashrc lama yang ada di disk saat cygwin dimulai. - diuji pada Cygwin version 2.8.1 (64 bit)- versi 2017
hanshenrik
Mengapa jawaban ini tidak pernah diterima?
asmith
26

Anda dapat mengubahnya dengan urutan kontrol xterm untuk ini, seperti:

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

Rujuk ke: http://code.google.com/p/mintty/issues/detail?id=241

James Fu
sumber
4
Tidak berpengaruh bagi saya: / Mungkin trik ini rusak dalam 6 bulan terakhir?
voltrevo
Apakah Anda menggunakan bash?
James Fu
2
Ini tidak memiliki efek ketika dikeluarkan dari dalam layar.
Ярослав Рахматуллин
10
Mungkin masalahnya adalah prompt perintah sudah dikonfigurasi untuk memperbarui judul (untuk exmaple dengan jalur saat ini), jadi perintah itu berfungsi tetapi tiba-tiba ditimpa oleh prompt.
Andrea Polci
2
Untuk mengujinya "echo -ne '\ e] 0; Judul \ a' && cat". Metode ini mencegah prompt untuk segera mengatur ulang. (Jika itu berhasil, Anda dapat mengubah PS1 di profil Anda seperti yang dijelaskan dalam jawaban lain)
Curtis Yallop
3

Tempatkan ini di .zshrc:

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

Urutan karakter khusus dalam fungsi settitle membuat MinTTY mengubah judul jendela.

Di zsh , jika Anda mendefinisikan suatu fungsi dengan nama khusus chpwd, ia akan dipanggil setelah setiap chdir .

Bekerja pada WinXP, dengan Cygwin 1.7 dan MinTTY menjalankan zsh.

Leonel
sumber
Juga bekerja di WSL (minus barang-barang cygpath, tentu saja): settitle "$(pwd)@$HOST"
zzxyz
2

Dalam bash, variabel PROMPT_COMMAND dapat diatur untuk menampung sejumlah perintah, dipisahkan oleh titik koma. Anda dapat menggunakannya untuk melakukan pengaturan judul yang sama seperti yang dijelaskan dalam respons lain yang berbicara tentang zsh.

pondok
sumber
2
1) echo $ PS1 dan salin string itu ke clipboard atau editor teks Anda, seperti pada
   gema $ PS1
2) edit ~ / .bash_profile dan tambahkan kode shell di bawah ini, ganti $ PS1 seperlunya tetapi pertahankan variabel $ {TERMINAL_TITLE} dalam kondisi "false".
3) Simpan file dan setel variabel lingkungan TERMINAL_TILE, seperti pada
   export TERMINAL_TITLE = "Judul Kustom Saya"
4) Sumber profil bash Anda, seperti pada
   . ~ / .bash_profile
Nikmati

jika [-z "$ {TERMINAL_TITLE}"]
kemudian
  PS1 = '\ [\ e] 0; \ w \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \] \ n \ $ '
lain
  PS1 = '\ [\ e] 0; $ {TERMINAL_TITLE} \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \ ] \ n \ $ '
fi
orbit andrews
sumber
1

Saya menggunakan jawaban Leonel, tetapi saya menemukan judul hanya akan berkedip ketika melakukan ini, yang berarti setidaknya perintah gema berfungsi sebagaimana dimaksud. Saya menjalankan zsh secara interaktif dengan mode debug diaktifkan menggunakan

zsh -xv

Mengubah direktori jelas memanggil fungsi lain yang dipanggil title()setelah precmd()dan chpwd(), secara efektif menimpa mereka. Jadi saya mencolokkan ini ke .zshrc saya dan berhasil.

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

Jika Anda memilih untuk menggunakan chpwd()atau precmd()sebaliknya, hanya menonaktifkan fungsi judul: title(){}.

pengguna239512
sumber
1

Hanya ingin membagikan solusi saya untuk ini karena saya menggunakan mintty untuk menjalankan skrip.

Pintasan mintty saya disetel sebagai:

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

Skrip connect.sh yang saya tulis yang disebut dalam pintasan di atas akan meminta saya untuk server yang ingin saya sambungkan ke DAN jalankan fungsi settitle yang didefinisikan dalam skrip.

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
pengguna273306
sumber
Mengapa Anda mendefinisikan fungsi titlejika Anda tidak menggunakannya?
pabouk
0

coba tambahkan ini ke .bash_profile

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

Ini bekerja untuk saya.

netawater
sumber
2
Pertanyaannya adalah tentang mengubah judul jendela, bukan prompt perintah.
kenorb
1
tolong tambahkan ini ke .bash_profile, tidak apa-apa untuk judul perubahan, terima kasih!
netawater