(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
他の機能を試しました...preexec
zshaddhistory
実行中のプロセスをどのようにキャプチャしてヘッダーに入れることができますか?
最初の質問を投稿しました
私はこれを見つけました: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'
詳細より。