Ekranı kullanırken xterm (PuTTY) pencere başlığı ayarlanmalı mı?


12

Başlığımı screenbelirlemeye çalışıyorum xterm. Bunun dışında çalışıyorum screen, ama screenbaşladığımda hangi başlığı varsa saklıyorum. İşte benim .bashrc:

işlev bash_prompt_command () {
    # $ PWD'nin kaç karakteri saklanmalıdır?
    yerel pwdmaxlen = 25
    # Dir kesilme olduğunu belirtin
    yerel trunc_symbol = ".."
    yerel yön = $ {PWD ## * /}
    pwdmaxlen = $ (((pwdmaxlen <$ {# dir})? $ {# dir}: pwdmaxlen))
    NEW_PWD = $ {PWD / # $ HOME / \ ~}
    yerel pwdoffset = $ (($ {# NEW_PWD} - pwdmaxlen))
    [$ {pwdoffset} -gt "0"] ise
    sonra
        NEW_PWD = $ {NEW_PWD: $ pwdoffset: $ pwdmaxlen}
        NEW_PWD = $ {trunc_symbol} / $ {NEW_PWD # * /}
    fi

    dışa aktar NEW_PWD
}

PROMPT_COMMAND = bash_prompt_command
# Renk şeması @ http://wiki.archlinux.org/index.php/Color_Bash_Prompt
durumda "$ {TERM}"
    "Xterm")
        TITLEBAR = '\ [\ 033] 0; \ u @ \ h> $ {NEW_PWD} \ 007 \]'
        PS1 = "$ {Başlık çubuğu} \ [\ e [1; 32 m \] [\ e [0, 36m \] \ u \ e [1; 32 m \] + \ e [1; 33m \] \ h \ e [ 1; 32m \]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ \ [\ e [0m "
        ;;
    "ekran")
        TITLEBAR = '\ [\ 033] 0; \ u @ \ h> $ {NEW_PWD} \ 007 \]'
        ESC = '\ [\ ek \ e \\\]
        PS1 = "$ {TITLEBAR} \ [\ e [1; 32m \] [\ e [0; 36m \] \ u \ e [1; 32m \]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ $ {ESC} \ [\ e [0m "
        ;;
    *)
        PS1 = "\ [\ e [1; 32 m \] [\ e [0, 36m \] \ u \ e [1; 32 m \] + \ e [1; 33m \] \ h \ e [1; 32 m \ ]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ \ [\ e [0m "
    ;;
esac

Ve işte benim .screenrc:

hardstatus alwayslastline
sabit durum dizesi '% {= kg} [% {Y}% H% {g}] [% =% {= kw}%?% - Lw%?% {= b kR} (% {W}% n-% t%? (% u)%?% {= b kR})% {= kw}%?% + Lw%?%?% =% {g}] [% {Y}% l% {g}]% {g} [% {B}% m.% d.% Y% {G}% c% {g}] '

termcapinfo xterm | xterms | xs | rxvt ti @: te @
termcapinfo xterm 'hs: ts = \ E] 2;: fs = \ 007: ds = \ E] 2; ekran \ 007'

ekran üstü açık
shelltitle '$ | bash'

Ne yanlış yapıyorum?

Güncelleme (19 Ağustos 2010): Sorun, ayarladığınızda terminalin başlığını ekrandan güncelleyememeniz alwayslastline. Bu yüzden çözümüm, ekran oturumlarım için önceden belirlenmiş, kullanışlı bir başlıktan vazgeçmek ve yerleşmekti. Güncellemem .bashrcve http://bitbucket.org/jsumners/rcfiles/src adresinde.screenrc bulunabilir .

Yanıtlar:


4

Kaçış kodları ekranın içinde farklıdır .

Bu ekranın dışında:

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

bu iç ekranla eşdeğerdir:

PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME}: ${PWD}\033\\"'

Vaka $ {TERM} = "screen" başlık çubuğunu olarak değiştirmek

TITLEBAR='\[\033_\u@\h > ${NEW_PWD}\033\\\]'

Sorununuzu çözecek.


Bu çalışmıyor. Nedenini anlamıyorum.
James Sumners

Bunun için hardstatus alwayslastlineyaptığım ayarın başlığı ayarlamasını screenengellerim . Şimdi ikisini de aynı anda nasıl yapacağımı anlayabilirsem. screenxterm
James Sumners

Hardstatus'unuzun içinde% t (başlık için) olduğu için mi?
crb

Hayır! Sadece kaldırdım ve aynı sonucu alın. Ben screenpencere başlığını ayarlar ve sonra programı başlatır bunun için bir takma ad ayarlamak zorunda olacağına inanıyorum . Ve sonra kullanırken sadece dinamik terminal başlıklarından vazgeç screen. :(
James Sumners

1
bugs.launchpad.net/byobu/+bug/338722/comments/10 , ekranda bir sınırlama olduğunu söyledi
agnul

7

Aslında, kaçış dizilerini ekrandan geçerek doğrudan xterm'e göndermenin bir yolu var. Bulmak kolay değildi, ama ekran kodundan (src / ansi.c) 2005'ten beri orada olduğunu düşünüyorum. Ben xterm, Gnome Terminali ve macun çalışıyor. Nane kaynağında, DCS'yi işlemedikleri için orada çalışmadığını belirten bir not buldum (son zamanlarda düzeltilmedikçe).

Aşağıdaki ekran için belgelerden ( http://www.gnu.org/software/screen/manual/html_node/Control-Sequences.html adresinde )

ESC P (A) Device Control String
          Outputs a string directly to the host terminal without interpretation.

ANSI DCS (Cihaz Kontrol Dizesi) doğrudan bir terminale göndermek için kullanılan bir kaçış kodudur (sanırım yıllar önce orijinal amacı budur). Böyle bir dize bir ST kaçış kodu (String Terminator) ile sonlandırılır.

Bir DCS..ST bloğu içinde terminalin pencere başlığını ayarlamak için dizeyi sarın ve hardstatus alwayslastline ile bile ekrandan geçer ve doğru şekilde güncellenir.

DCS = \ 033P, ST = \ 033 \

Örnek - pencere başlığını geçerli çalışma diziniyle güncellemek için şunu kullanın:

NEW_TITLE="\033]0;${PWD/$HOME/~}\007"
echo -ne "\033P${NEW_TITLE}\033\\"

Geç olsun güç olmasın! Umarım bu birine yardımcı olur.

Ekran kaynağı değişiklikleri konusunda yanılıyorsam: En son ekran oturum git'i çalıştırıyorum, bu da ekran git'in neredeyse en son sürümünü kullanıyor (ekran oturumuna özgü bazı değişikliklerle). Ancak günlük iletileri 2005 ekranından tarihlendirilir (ekran git repo'yu klonlar ve aşağıdaki komutu kullanırsanız DCS işleme ile ilgili olarak yapılan değişiklikleri görebilirsiniz).

git clone git://git.savannah.gnu.org/screen.git
git difftool e6618a14^! src/ansi.c

1

crb biraz doğru, ama

a) kullandığı kaçış kodu benim için çalışmıyor. Bunun \033kyerine olmalı \033_. Bkz screen (1)altında "TITLES (naming windows)". Bu yüzden olmalı:

PROMPT_COMMAND='echo -ne "\033k${USER}@${HOSTNAME}: ${PWD}\033\\"'

b) bu ​​tür bir kaçış sadece ekran penceresinin başlığını ayarlamak için kullanılır. Ekranın bir örneği olduğunu görüntülenir budur, her biri bir adı vardır, birden fazla pencere olabilir hardstatusve captionbirlikte tçıkış sırası.

c) xterm için doğru terminfoyu aşağıdaki gibi ayarlarsanız normal bash kaçış işe yarar .screenrc:

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

(bu works on my machinemacun için de geçerlidir )

Yani hem ekran penceresi hem de macun / xterm başlığı için doğru başlığı ayarlamak için şöyle bir şey kullanıyorum:

XTERM_TITLE="${USER}@${HOSTNAME}: ${PWD}"
SCREEN_TITLE="${PWD}"
PROMPT_COMMAND='echo -ne "\033]0;$XTERM_TITLE\007\033k$SCREEN_TITLE\033\\"'

referans için: http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x395.html


1

Soruyu tamamen cevaplamayacağım, ama sorunu çözmenin yolunu önereyim. Birçok pencere yöneticisi EWMH spesifikasyonunu destekler . wmctrlOnlarla etkileşime girebilen bir komut satırı aracı da vardır. Bu aracı kullanarak, aktif komutun başlığını aşağıdaki komutla kolayca değiştirebilirsiniz:

  wmctrl -r :ACTIVE: -T "FooTitle"

Pencere simgesini, mizanpajı ve diğer özellikleri değiştirmek de mümkündür.Windows EWMH'yi desteklemediğinden araç muhtemelen PuTTY için çalışmaz, ancak Linux sistemlerinin çoğu bunu kabul etmelidir.

Bu yöntemle kullanmanız screenveya kullanmamanız önemli değildir.


0

Son 2 hafta içinde pek çok forum aradım ve sorunun cevabını bulamadım:

Tüm komut çıktılarını Putty başlığına nasıl alabilirim?

Diğer programların bir sunucudaki bazı işlerin ne zaman yapıldığını ve doğru veya yanlış yapıldığını bilmesi için gerekli. Plink stdout ve stdin çalışmıyor, bekleme gecikmeleri ve diğerleri için işe yarayan bazı komutlar için birçok tweaks kullandım. XSEL ve XCLIP bu sunucuya yüklenemedi.

İşte çözüm:

  1. Komut çıktısını bir dosyaya alın.
  2. Bu dosyayı başlığa çevirin.

Macun istemcisi ve suse sunucusunda şöyle görünür:

ls /home | grep domagaja > logutoit.txt 
echo -e "\033]0\\;$(cat logutoit.txt)\\007\\c"

Umarım birisi bunu kullanabilir. Elbette tüm sunucu türleri ve macun istemci ayarları için işe yaramaz, ancak fikir iyi çalışmalıdır.

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.