Tergantung bagaimana hal-hal diatur, tetapi secara default, sesuatu seperti ini seharusnya bekerja.
settitle() {
printf "\033k$1\033\\"
}
Lalu lari:
settitle NEWTITLE
.
Lihat dokumen judul layar dan faq layar GNU untuk detail lebih lanjut.
Diberikan Ctrl+ A Ahanya mengubahnya sampai perintah berikutnya, itu mungkin diatur oleh $PS1
(semua shell), atau $PROMPT_COMMAND
/ DEBUG trap
(hanya bash) atau precmd
/ preexec
(hanya zsh).
Anda harus mencari tempat yang \e
atau \033
muncul dengan k
atau \\
setelah, pada dasarnya seperti saya settitle
contoh di atas.
MEMPERBARUI
Anda bilang punya kebiasaan preexec
.
Mengapa tidak mengubahnya ke ini:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
echo -n "\ek${TITLE:-$CMD}\e\\"
fi
Kemudian Anda dapat mengatur judul khusus dengan menjalankan:
TITLE="my title"
dan hapus judul dengan menjalankan
TITLE=
Jangan lupa untuk berubah precmd
dan $PS1
juga jika perlu.
KE SAMPING
Anda bahkan bisa memperpanjang ini ke semua terminal (misalnya xterm
, gnome-terminal
, dll) dengan tidak keras coding \ek
dan \e\\
.
Beginilah cara saya melakukannya:
terminit()
{
# determine the window title escape sequences
case "$TERM" in
aixterm|dtterm|putty|rxvt|xterm*)
titlestart='\033]0;'
titlefinish='\007'
;;
cygwin)
titlestart='\033];'
titlefinish='\007'
;;
konsole)
titlestart='\033]30;'
titlefinish='\007'
;;
screen*)
# status line
#titlestart='\033_'
#titlefinish='\033\'
# window title
titlestart='\033k'
titlefinish='\033\'
;;
*)
if type tput >/dev/null 2>&1
then
if tput longname >/dev/null 2>&1
then
titlestart="$(tput tsl)"
titlefinish="$(tput fsl)"
fi
else
titlestart=''
titlefinish=''
fi
;;
esac
}
# or put it inside a case $- in *i* guard
if test -t 0; then
terminit
fi
# set the xterm/screen/etc. title
settitle()
{
test -z "${titlestart}" && return 0
printf "${titlestart}$*${titlefinish}"
}
Kemudian Anda dapat mengubah preexec
ke:
if [[ "$TERM" == "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
settitle "${TITLE:-$CMD}"
fi
Ctrl-A A
. Dan tentang prompt, maksud Anda saya harus memodifikasi$PS1
setiap kali saya ingin judul tidak berubah?\e
atau\033
.Jika judul jendela Anda mencerminkan aplikasi yang sedang berjalan di jendela, itu karena shell Anda melakukan itu. Jika melakukan itu, itu karena distribusi Anda, administrator sistem Anda atau Anda mengonfigurasikannya.
Jika perintah muncul sebagai judul jendela saat perintah dijalankan, ini dilakukan oleh
preexec
fungsi (di zsh), atau emulasi daripadanya di bawah bash .Jika judul berubah ketika setiap perintah selesai, ini dilakukan oleh
precmd
fungsi di zsh,PROMPT_COMMAND
parameter di bash, atau sebagai bagian dari prompt (PS1
parameter) di shell apa pun. (Perintah untuk mengubah judul adalah urutan pelepasan yang dipancarkan oleh aplikasi apa pun sebagai bagian dari aliran keluaran terminal, sehingga dapat disematkan dalam prompt.)Mencari urutan escape seperti
\e]0;new title\a
,\e]2;new title\a
atau\eknew title\e\\
dalam file inisialisasi shell Anda (~/.bashrc
,~/.zshrc
, ...). Jika tidak ada yang relevan, pengaturan mungkin dalam file sistem (misalnya/etc/bash.bashrc
,/etc/zsh/zshrc
); kemudian timpa parameter atau fungsi itu dalam file inisialisasi Anda sendiri.Lihat jawaban Mikel untuk pengaturan judul yang dapat ditimpa di
preexec
.sumber
preexec
fungsi yang didefinisikan dalam .zshrc saya. Masalahnya, itulah perilaku yang saya inginkan ... sebagian besar waktu. Saya ingin dapat menonaktifkannya dengan cepat di satu layar tertentu. Mungkin ada variabel yang bisa saya dapatkan dipreexec
fungsi ketika saya secara manual mengatur judul, atau sesuatu seperti itu?preexec
fungsi Anda , saya atau orang lain mungkin dapat menyarankan perubahan sederhana.preexec
, tetapi Greg tidak mengatakan dia menggunakanzsh
. Itu akan mengajari saya. ;-)preexec
desain baru Anda lebih baik dari saya.