Bir xterm koşu ekranında başlığı otomatik olarak nasıl güncelleyebilirim?


14

Bu, bu sorunun bir parçası . Bir xterm içinde GNU ekranı içinde tcsh'de çalışıyorum .

.Cshrc dosyamda aşağıdakiler var:

alias res_t 'xtset -t %h:%d "(%u:%g)" %e'       # reset titlebar
res_t                                           # reset title right now
alias precmd res_t

Ve bu iyi çalışıyor!

Ancak, ekranı çalıştırdığımda başlığın geçerli dizinle güncellenmediğini görüyorum. Ekran güncellemesini xterm başlığını nasıl yapabilirim?


Sizin için işe yarayan bir çözüm buldunuz mu?
Trey Hunner

Hayır. Önerilen cevapları denedim ama işe yaramadı. Bu yüzden ne kabul ettim ne de onayladım.
Nathan Fellman

Yanıtlar:


4

Xterm pencere başlığını, bunu .tcshrcveya öğenize ekleyerek ayarlayabilirsiniz .cshrc(mevcut precmdtakma adınızı değiştirin ):

alias precmd 'echo -n "\033]0;${PWD}\a"'

Bunu kullanırken dosyalarınızdaki .cshrcve .tcshrcdosyalarınızdaki tek precmd diğer adı olduğundan emin olun . Bu yöntem, bir GNU ekran oturumunun açık olup olmadığına bakılmaksızın, geçerli dizini hem xterm gnome terminalinde benim için pencere başlığı olarak görüntüler.

Benim cevabım dayanıyordu bu .


3

Tcsh kullandığınızı anlıyorum, bu muhtemelen işe yaramayacak ... Herkesin bunu yapmanın bash yolunu araması durumunda.

Sistemleriniz (yerel / uzak) bash çalıştırıyorsa, pencere başlığını ayarlamak için "PROMPT_COMMAND" ortam değişkenini kullanabilirsiniz. Bir istem görüntülenmeden önce PROMPT_COMMAND değerlendirilir.

(.bashrc'nizde):

export PROMPT_COMMAND='history -a && echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007'

Açıklama:

'history -a'

Bu, kabuğun, tüm kabuk tamamlandığında değil, her komut tamamlandığında geçmiş dosyasına eklenmesini sağlar. (Bu, bu örnekle ilgili değildir).

'echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

Bu çıkış kodu "\ 033] 0;" pencere başlığını "user" @ "host" değişkenleriyle (sağdan ilke en uzun eşleşmeyi kaldırarak ") ve ardından çalışma dizinini ('$ HOME' yerine '~' yerine) ayarlar.

Yukarıdaki hile, pencere başlığının dinamik olarak değiştirilmesini destekleyen herhangi bir terminal uygulamasıyla çalışacaktır (iTerm, Terminal.app, urxvt, aterm, eTerm. Xterm vb. Ayrıca bash belgelerinde kabuk değişkenine "TITLEBAR" bakabilirsiniz, benzerdir.


1
gnuscreen'in içindeyken çalışmaz. en azından benim için çalışmıyor. thats why im here :)
gcb


2

Bu herhangi bir kabukta çalışmalıdır, ancak kirli bir .screenrc kesmek. Bazı kullanıcılar için kabul edilemeyebilecek şekilde çalışmak için hardstatus hattınızı devralır. Ancak termcapinfo olmasa bile en yeni Ubuntu'da gnome terminalinde çalışıyor aşağıdaki hattı . Bazı durumlar daha derin ayarlamalar gerektirebilir (örneğin PuTTY üzerinde test yapmadım).

# enable xterm title setting; may not be necessary on some platforms
termcapinfo xterm*|rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

# dirty hack: put xterm title escapes in the hardstatus
# this example will yield "user@host || screen Win#:(windowtitle)
defhstatus "$USER@^EH || screen ^E:(^Et)"
# now turn it off so it doesn't print in the hardstatus line
hardstatus off

# and finally, use caption as a replacement hardstatus
caption always '%{= kG}[%{G}%H%{G}][%= %{= kw}%?%-Lw%?%{R}(%{W}%n*%f%t%?(%u)%?%{R})%{w}%?%+Lw%?%?%= %{G}][%{B}%C%a %M.%d%{G}]'

Bu bağlantıda bulundu .


2
setenv TITLE "%{\033]0;%n@%m:%~\007%}"
set prompt = "${TITLE}%n@%m:%~%#"

1
Ancak bu, çalışırken başlığı güncelleyecekscreen
Nathan Fellman

1
Ekran 4.00.02 + tcsh 6.12.00 ile sorunsuz çalışır. Bu, ekran hardstatusdeğişkeninin uygun şekilde ayarlandığını ve termcap / terminfo'yu desteklediğini varsayar hs|ts|fs|ds.
Darren Hall

hardstatus burada ne oynuyor?
gcb

2

Ancak, bu sayfa (yukarıda bağlanmıştır) çözümdür girişin terminal dizesinin terminalinizin kimlik dizesiyle (yani TERM değişkeninin ne olarak ayarlandığı) ayarlandığından emin olmanız gerekir, aksi takdirde herhangi bir etkisi olmaz.

İşte bunu anlamaya yetecek kadar zaman harcamadığım yıllar sonra benim için çalışan ne yaptığımın bir özeti:

  1. Terminalinizin kimlik dizesinin ne olduğunu çalıştırarak öğrenin:

    echo $TERM
    

    Muhtemelen 'xterm' veya 'linux' veya 'rxvt' gibi bir şey söyleyecektir.

  2. Şimdi homedirinizde (~ / .screenrc) bulunan .screenrc dosyanıza aşağıdaki satırı ekleyin (veya yoksa bir tane yapın):

    termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
    

    Anahtar 'xterm' teriminizin TERM'nizin kimlik dizesi olduğundan emin olmaktır. Kullandığınız her farklı terim türü için birden çok satır yapabilirsiniz.

Örneğin, bir kutuya SShing yaparken hem xterms hem de 'linux' terim türünü kullandığım için bu .screenrc dosyam var:

termcapinfo linux 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

Umarım bu yardımcı olur ve tamamen kabuk agnostiktir. Ekranı root olarak çalıştırırsanız, kendi ~ / .screenrc dosyanıza ek olarak ~ root / .screenrc dosyasını değiştirmeniz gerekecektir.


1

Talimatları burada bana benim için bash rxvt başlığı güncellemek için izin - prehaps değil herhangi bir yardım hangi ama buna değer araştıran olabileceğini düşündüm (Bilgilendirici Statusbar bağlantı sayfanın sağ bölümüne atlamak etmezse bölümü)

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.