GNU ekranındaki başlığı zorla


9

Varsayılan olarak, bir ekran oturumunun başlığı girilen son komutun adıdır, bu benim için iyidir, ancak bazı durumlarda değiştirmek istiyorum. Komutu biliyorum Ctrl- A Aama sadece bir sonraki komuta kadar başlığı değiştirir ve aksi karar verene kadar orada kalmasını isterim.

EDIT: İşte preexecbenim buldum işlevi.zshrc

if [[ "$TERM" == "screen" ]]; then
   local CMD=${1[(wr)^(*=*|sudo|-*)]}
   echo -n "\ek$CMD\e\\"
fi

Yanıtlar:


9

İşlerin nasıl ayarlandığına bağlıdır, ancak varsayılan olarak böyle bir şeyin çalışması gerekir.

settitle() {
    printf "\033k$1\033\\"
}

O zaman koş:

settitle NEWTITLE.

Daha fazla ayrıntı için ekran başlığı belgelerine ve GNU ekran sss bölümüne bakın .

Verilen Ctrl+ A Asadece bir sonraki komuta kadar değiştirir, muhtemelen $PS1(tüm kabuklar) veya $PROMPT_COMMAND/ DEBUG trap(sadece bash) veya precmd/ preexec(yalnızca zsh ) tarafından ayarlanır .

Herhangi bir yerde bunun için bakmak gerekir \eya \033sahip göründüğünü kveya \\temelde benim gibi ondan sonra settitleyukarıdaki örnekte.

GÜNCELLEME

Bir geleneğiniz olduğunu söylediniz preexec.

Neden bunu değiştirmiyoruz:

if [[ "$TERM" == "screen" ]]; then
   local CMD=${1[(wr)^(*=*|sudo|-*)]}
   echo -n "\ek${TITLE:-$CMD}\e\\"
fi

Ardından, aşağıdakileri çalıştırarak özel bir başlık ayarlayabilirsiniz:

TITLE="my title"

ve çalıştırarak başlığı kaldır

TITLE=

Değiştirmek unutmayın precmdve $PS1gerekirse de.

KENARA

Hatta bütün terminallere (örneğin bu genişletmek olabilir xterm, gnome-terminalsert kodlama etmeyerek, vs.) \ekve \e\\.

Bunu nasıl yaparım:

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

Ardından, aşağıdakileri değiştirebilirsiniz preexec:

if [[ "$TERM" == "screen" ]]; then
   local CMD=${1[(wr)^(*=*|sudo|-*)]}
   settitle "${TITLE:-$CMD}"
fi

Verdiğiniz komut tam olarak aynı şeyi yapar Ctrl-A A. Ve komut istemi hakkında, $PS1başlığın değişmesini istemediğimde değiştirmem gerektiğini mi söylüyorsunuz?
gregseth

Yani ESC k içermediğini kontrol et ESC \. PROMPT_COMMAND biçiminde.
Mikel

ESC yazılabilir \eveya \033.
Mikel

Ekran başlığı dokümanlar bağlantıları gerekli bilgilere sahip olmalıdır
Mikel

5

Pencere başlığınız o anda pencerede çalışan uygulamayı yansıtıyorsa, bunun nedeni kabuğunuzun bunu yapmasıdır. Bunu yapıyorsa, dağıtımınız, sistem yöneticiniz veya bunu yapılandırdığınız için.

Komut, komut çalışırken pencere başlığı olarak görünürse, bu preexecişlev (zsh cinsinden ) veya bash altındaki bir öykünmesi ile yapılır .

Her komut tamamlandığında başlık değişirse, bu işlem precmdzsh'daki işlev, bash'daki PROMPT_COMMANDparametre veya PS1herhangi bir kabuktaki istemin ( parametrenin) bir parçası olarak yapılır . (Başlığı değiştirme komutu, herhangi bir uygulama tarafından terminalin çıkış akışının bir parçası olarak yayılan bir kaçış dizisidir, böylece bir isteme gömülebilir.)

Gibi bir çıkış sırası arayın \e]0;new title\a, \e]2;new title\aya \eknew title\e\\da kabuk başlatma dosyasında ( ~/.bashrc, ~/.zshrc, ...). Alakalı bir şey yoksa, ayar bir sistem dosyasında (ör /etc/bash.bashrc. /etc/zsh/zshrc) Olabilir; ardından kendi başlatma dosyanızdaki bu parametrenin veya işlevin üzerine yazın.

Geçersiz bir başlık ayarı için Mikel'in cevabına bakın preexec.


Teşekkürler, çok netleştirdiniz. Gerçekten preexec.zshrc içinde tanımlanmış bir işlev buldum . Mesele şu ki, istediğim davranış bu ... çoğu zaman. Belirli bir ekranda anında devre dışı bırakmak istiyorum. preexecBaşlığı manuel olarak ayarladığımda işlevde alabileceğim bir değişken olabilir , ya da böyle bir şey?
gregseth

@gregseth: Genel olarak açıklamak biraz zor, ancak preexecişlevinizi gönderirseniz , ben veya başka biri muhtemelen basit bir değişiklik önerebilir.
Gilles 'SO- kötü olmayı bırak'

Bahsetecektim preexec, ama Greg kullandığını söylemedi zsh. Bu bana öğretecek. ;-)
Mikel

@Mikel: Açıklamam sizinkinden daha iyiydi, ancak yeni preexectasarımınız benimkinden daha iyi.
Gilles 'SO- kötü olmayı bırak'

Katılıyorum. :-) Benim asıl cevabım OP'ye kendisi için cevabı bulmayı öğretmeye çalışıyordu. Seninki daha derhal yardımcı oldu. Her iki şekilde de, hepimiz kazanıyoruz.
Mikel
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.