Gnu画面ウィンドウタイトルの自動化

Gnu画面ウィンドウタイトルの自動化

(got one possible solution on stack overflow : https://stackoverflow.com/a/51769020/9497573)

もっと正確に修正しました

画面のウィンドウタイトルを作業ディレクトリのパスと自動的に同じにしてみました。追加する例:npmの起動またはvimファイル.js)

これを行うには、次の行を私のアイテムに追加しました.zshrc

precmd () {
  local action = action_to_define
  if [[ $TERM == screen* ]]; then
    printf -Pn '\ek%~ $action\e\\'
  fi
}

これは(とにかく)タイトルに画面へのパスを送信します(参照:Stefan Chazerasの答え)

存在する場合、この変数はaction実行中のプログラムを印刷します。

私はlocal action= $(history | tail -1 | sed 's#[0-9 ]*##') | grep vimこれが履歴の最後のコマンドのプロンプトを選択するので試しました。 (history !!そのオプションを認識するのと同様に、!!何らかの理由でそうではありません...)

local action= $(ps -lr | tail -1 | sed 's#^.*:...##')実行中のプロセスのコマンドを選択するため

しかし、うまくいきません。プロセスがキャッチされていないか、タスクがhistory開始psされる前に実行される可能性があるため、運が悪いかどうかにかかわらずprecmd他の機能を試しました...preexeczshaddhistory

実行中のプロセスをどのようにキャプチャしてヘッダーに入れることができますか?

最初の質問を投稿しました

私はこれを見つけました:GNU画面:新しいウィンドウ名が変更されました。.zshrcファイルを変更して特定のタスクを実行する方法を提供し、画面マニュアルのこのセクションで説明を取得します。https://www.gnu.org/software/screen/manual/screen.html#Dynamic-Titles

ただし、ファイルではなくフォルダだけが表示され、説明が何であるかを理解できず、ニーズに合わせて調整することはできません。ディレクトリだけを印刷するのではなく、作業ファイルも印刷します。

これまで、.zshrcファイルスクリプトの私の理解は次のとおりです。

precmd () {
  local tmp='%~'
  local HPWD=${(%)tmp}
  if [[ $TERM == screen* ]]; then
    printf '\ek%s\e\\' $HPWD
  fi
}

-precmd ()各プロンプトの前に実行される関数chpwd ()(src:http://tldp.org/HOWTO/Xterm-Title-4.html)

-local変数にローカル範囲があることを示します(src:https://stackoverflow.com/questions/13667284/how-do-i-keep-functions-variables-local-to-my-zshrc)

- tmp='%~'tmpは、$ HOMEディレクトリを参照する文字列 '%〜'と同じ変数です。 (しかし、なぜ次の変数を分解するためにこの変数を使用するのですか?)

- HPWD=${(%)tmp}HPWDはpwd(作業ディレクトリ印刷)に関連する変数で、内部の先行変数と同じですが、括弧の前のドル記号は何を意味するのかわかりません。

if [[ $TERM == screen* ]]; then printf- ソフトウェア画面が実行されている場合は印刷

-'\ek%s\e\\'全く分からない…

(どうやってその画面がこのスクリプトを聞くことができましたか?)

答え1

それは${(flag)tmp}どこですか?(flag)パラメータ拡張フラグ(参照info zsh 'flags, parameter expansion'%パラメータ拡張フラグがオン急速な拡張変数が拡張されている場合$tmp

%~/home/youプロンプト拡張から現在の作業ディレクトリに展開します~

一時変数は必要なく、${(%):-%~}より簡単に実行できます。

print -Pn '\ek%~\e\\'

この-Pオプションはprintプロンプト拡張も有効にします(参照info zsh print)。

precmd以下を使用する代わりに、プロンプトに文字列を直接追加することもできます。

PROMPT=$'%{\ek%~\e\\%}$ '

␛kTITLE␛\GNU画面で認識され、タイトルを設定するために使用されるエスケープシーケンス。info screen -n 'Dynamic Titles'詳細より。

関連情報