#!/bin/env python # vim:fileencoding=iso-8859-1:ft=python # """ runGraphical Run a programm in X11 using a shortcut Configuration file syntax: command { .. shell script to execute .. } or command shell line to execute lines beginning with # are ignored. """ import gtk import os import sys import re # Read configuration try: config = open(os.path.expanduser("~/.runGraphical.config")).read() config = re.sub("\r\n?", "\n", config) commands = {} n = -1 cmdLevel = 0 while n < len(config) - 1: n += 1 if config[n].isspace(): continue if config[n] == "#": n = config.find("\n", n) continue command = "" while not (config[n].isspace() or n >= len(config)): command += config[n] n += 1 while config[n].isspace() and n < len(config) and config[n] != "\n": n += 1 if config[n] == "\n": raise Exception("Configuration error") execute = "" if config[n] != "{": while config[n] != "\n" and n < len(config): execute += config[n] n += 1 else: n += 2 cmdLevel = 1 while n < len(config): if config[n] == "}": cmdLevel -= 1 if cmdLevel == 0: break elif config[n] == "{": cmdLevel += 1 execute += config[n] n += 1 if cmdLevel > 0: raise Exception("Configuration error") commands[command] = execute.strip() except: print "Configuration error in ~/.runGraphical.config in character %d" % n sys.exit(0) # Show dialog entry = gtk.Entry() def check(*x): if entry.get_text() in commands: gtk.main_quit() entry.connect("key_release_event", check) window = gtk.Window() window.add(entry) window.connect("hide", lambda *x: gtk.main_quit()) window.set_decorated(gtk.gdk.DECOR_ALL & (not gtk.gdk.DECOR_TITLE)) window.stick() window.move(0, 0) window.show_all() gtk.main() command = entry.get_text() del window del entry del gtk # Execute if command in commands: os.system(commands[command] + " &")