GNU画面にタイトルを強制表示

GNU画面にタイトルを強制表示

デフォルトでは、スクリーンセッションのタイトルは最後に入力したコマンドの名前で、私の場合はうまくいきますが、場合によっては変更したいと思います。私はCtrl- コマンドについて知っていますが、A A次のコマンドまでのみタイトルを変更し、別の方法で決定するまでそこに滞在したいと思います。

編集する: これはpreexec私が見つけた機能です。.zshrc

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

答え1

設定方法によって異なりますが、基本的にこれはうまくいきます。

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

次に、次を実行します。

settitle NEWTITLE

バラより画面タイトル文書そしてGNU画面のよくある質問詳細については。

指定された+は、(すべてのシェル)または/(bashのみ)または/(zshのみ)に設定Ctrlできる次のコマンドの前にのみ変更されます。A A$PS1$PROMPT_COMMANDDEBUG trapprecmdpreexec

\eデフォルトでは、\033上記の例のように、itと一緒に、または後ろに表示されるすべての場所を見つける必要があります。k\\settitle

修正する

クセがあると言われましたpreexec

これを次のように変えたらどうでしょうか?

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

その後、次のコマンドを実行してカスタムタイトルを設定できます。

TITLE="my title"

以下を実行してヘッダー設定を解除します。

TITLE=

必要に応じて変更することを忘れないでくださいprecmd$PS1

横に

合計をハードコーディングしないことで、それをすべての端末(例:xtermなど)に拡張することもできます。gnome-terminal\ek\e\\

これが私がする方法です:

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

その後、次のように変更できますpreexec

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

答え2

ウィンドウタイトルが現在ウィンドウで実行されているアプリケーションを反映している場合、これはシェルがこれを実行しているためです。その場合は、ディストリビューション、システム管理者、またはユーザーが構成したためです。

実行時にコマンドがウィンドウのタイトルとして表示される場合、これはpreexec(zshから)またはBashでのシミュレーション

各コマンドの完了時にタイトルが変更されると、これはprecmdzshの関数、bashのパラメータ、またはシェルのプロンプト(パラメータ)の一部を介してPROMPT_COMMAND行われます。PS1(タイトルを変更するコマンドは、端末出力ストリームの一部としてすべてのアプリケーションで実行されるエスケープシーケンスなので、プロンプトに含めることができます。)

\e]0;new title\a、または(、、...)などのシェル初期化ファイルでエスケープシーケンスを見つけます\e]2;new title\a。関連がない場合、設定はシステムファイル(たとえば)にあり、独自の初期化ファイルでパラメータまたは関数をオーバーライドします。\eknew title\e\\~/.bashrc~/.zshrc/etc/bash.bashrc/etc/zsh/zshrc

バラよりミケルの答えで上書き可能なタイトルの設定preexec

関連情報