Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I want to be able to time how long I spend in front of a terminal. I'm thinking the best way will be to have some sort of timer that starts and stops when the terminal gains/loses focus. And it will have to work with multiple terminals...

Any ideas? I'm using GNOME.

share|improve this question

migrated from Jul 22 '11 at 4:33

This question came from our site for professional and enthusiast programmers.

If your terminal shell has easy access to its own X window ID, you're probably doing something wrong! They have nothing to do with each other - e.g. you could (and should) be running long jobs inside screen which could in theory be outputting to any number of terminals anywhere in the world.

That being said, the way I solve this problem is by using the prompt's ability to update a terminal's "status"/"title" to report the shell's PID, as with the following prompt:

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

Any pseudo-terminal showing the shell with this prompt and PID 6399 have a title like user@host:~ [6399]. Then, using a tool like wmctrl, you can write a bash script such as this:

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

This searches the window list and gives you the X Window ID(s) of any ending with that title. Thus, the function win_from_pid $$ can tell you your window ID(s) on the same host running the script, if any. You can figure out how to determine focus from there. :)

share|improve this answer

You can do a stat on the terminal and get the Access or Modify times.

stat /dev/pts/2
share|improve this answer

I expect you'll have to listen in on the X-window messages for the appropriate FOCUS message. Not sure how easy/difficult that will be though.

Alternatively How to know which window has focus and how to change it? talks about determining the window with focus and provides a couple of options: you could use that technique and just run it in a loop and track the focus changes.

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .