Tuesday, September 15, 2009

Raise a window to the front

I wanted to be able to detect in a python program if it was already running (pygtk) and bring it to the front if so. Thought this code could be useful to others:

#!/usr/bin/env python2.6
import sys, re, subprocess as sp, os
if __name__ == "__main__":
  program_name = os.path.basename(sys.argv[0])
  window_title_starts_with = 'My Application' # Change to the window title of your application
  p = sp.Popen([ '/usr/bin/pgrep', program_name ], stdout = sp.PIPE)
  out = p.communicate()[0]
  if p.returncode == 0:
    p = sp.Popen([ '/usr/bin/wmctrl', '-lp' ], stdout = sp.PIPE)
    out = p.communicate()[0]
    if p.returncode == 0:
      result = [ a[0] for a in 
        [ re.split('\s+', l, 4) for l in re.split('\n', out) ]
        if len(a) == 5 and a[4].startswith(window_title_starts_with) ]
      if len(result):
        print 'Application is already running, bringing to front'
        sp.check_call([ '/usr/bin/wmctrl', '-ia', result[0] ])
        sys.exit(0)

Note that paths are the ones used by Ubuntu. Requires pgrep and wmctrl to be installed.



© Copyright 2009 - Andrew Robinson.
Please feel free to use in your applications under the LGPL license (http://www.gnu.org/licenses/lgpl.html).