web-dev-qa-db-ja.com

Linuxで端末がフォーカスを取得したことを検出するにはどうすればよいですか?

ターミナルの前で過ごす時間を計りたいです。ターミナルがフォーカスを獲得/喪失したときに開始および停止するある種のタイマーを用意するのが最善の方法だと思います。そして、それは複数の端末で動作する必要があります...

何か案は? GNOMEを使用しています。

5
lobati

ターミナルシェルが独自のXウィンドウIDに簡単にアクセスできる場合は、おそらく何か問題があります。それらは互いに何の関係もありません-例えばscreen内で長いジョブを実行することができます(そして実行する必要があります)。理論的には、世界中の任意の数の端末に出力できます。

そうは言っても、この問題を解決する方法は、次のプロンプトのように、端末の「ステータス」/「タイトル」を更新してシェルのPIDを報​​告するプロンプトの機能を使用することです。

PS1=\u@\H:\w\$\ \[\e]2;\u@\H:\w [$$]\a\]

このプロンプトとPID6399でシェルを表示する疑似端末には、user@Host:~ [6399]のようなタイトルが付いています。 次にwmctrl のようなツールを使用して、次のようなbashスクリプトを記述できます。

win_from_pid() {
   type wmctrl &>/dev/null || return 1
   wmctrl -l | awk '/^.*\['"$1"'\]$/ { print $1 }'
}

これにより、ウィンドウリストが検索され、そのタイトルで終わるXウィンドウIDが表示されます。したがって、関数win_from_pid $$は、スクリプトを実行している同じホスト上のウィンドウIDがあれば、それを通知します。あなたはそこから焦点を決定する方法を理解することができます。 :)

2
yardena

適切なFOCUSメッセージについては、Xウィンドウメッセージをリッスンする必要があると思います。それがどれほど簡単/難しいかはわかりませんが。

または https://stackoverflow.com/questions/1014822/how-to-know-which-window-has-focus-and-how-to-change-it フォーカスのあるウィンドウの決定について説明しますそして、いくつかのオプションを提供します。その手法を使用して、ループで実行し、フォーカスの変更を追跡することができます。

1
Femi

ターミナルで統計を実行し、アクセス時間または変更時間を取得できます。

stat /dev/pts/2
1
Ankur Agarwal