revamp the autostart functionality, so autostart apps launch after openbox.
[dana/openbox.git] / tools / xdg-autostart / xdg-autostart
diff --git a/tools/xdg-autostart/xdg-autostart b/tools/xdg-autostart/xdg-autostart
deleted file mode 100755 (executable)
index 4a53382..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-#!/usr/bin/env python
-
-# xdg-autostart runs things based on the XDG autostart specification
-# Copyright (C) 2008       Dana Jansens
-#
-# XDG autostart specification can be found here:
-# http://standards.freedesktop.org/autostart-spec/
-#
-#
-#
-# LICENSE:
-#   This program is free software; you can redistribute it and/or modify
-#   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 2 of the License, or
-#   (at your option) any later version.
-#
-#   This program is distributed in the hope that it will be useful,
-#   but WITHOUT ANY WARRANTY; without even the implied warranty of
-#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#   GNU General Public License for more details.
-
-ME="xdg-autostart"
-VERSION="1.0"
-
-import os, glob, sys
-try:
-    from xdg import BaseDirectory
-    from xdg.DesktopEntry import DesktopEntry
-    from xdg.Exceptions import ParsingError
-except ImportError:
-    print
-    print "ERROR:", ME, "requires PyXDG to be installed"
-    print
-    sys.exit(1)
-
-def main(argv=sys.argv):
-    if "--help" in argv[1:]:
-        show_help()
-        return 0
-    if "--version" in argv[1:]:
-        show_version()
-        return 0
-
-    # get the autostart directories
-    autodirs = BaseDirectory.load_config_paths("autostart")
-
-    # find all the autostart files
-    files = []
-    for dir in autodirs:
-        for path in glob.glob(os.path.join(dir, '*.desktop')):
-            try:
-                autofile = AutostartFile(path)
-            except ParsingError:
-                print "Invalid .desktop file: " + path
-            else:
-                if not autofile in files:
-                    files.append(autofile)
-
-    list = False
-    if "--list" in argv[1:]:
-        list = True
-        argv.remove("--list")
-
-    # run them !
-    environments = argv[1:]
-    for autofile in files:
-        if list: autofile.display(environments)
-        else: autofile.run(environments)
-
-class AutostartFile:
-    def __init__(self, path):
-        self.path = path
-        self.filename = os.path.basename(path)
-        self.dirname = os.path.dirname(path)
-        self.de = DesktopEntry(path)
-
-    def __eq__(self, other):
-        return self.filename == other.filename
-
-    def __str__(self):
-        return self.path + " : " + self.de.getName()
-
-    def _isexecfile(self, path):
-        return os.access(path, os.X_OK)
-
-    def _findFile(self, path, search, match_func):
-        # check empty path
-        if not path: return None
-        # check absolute path
-        if path[0] == '/':
-            if match_func(path): return path
-            else: return None
-        else:
-            # check relative path
-            for dirname in search.split(os.pathsep):
-                if dirname != "":
-                    candidate = os.path.join(dirname, path)
-                    if (match_func(candidate)): return candidate
-
-    def _alert(self, str, info=False):
-        if info:
-            print "\t ", str
-        else:
-            print "\t*", str
-
-    def _showInEnvironment(self, envs, verbose=False):
-        default = not self.de.getOnlyShowIn()
-        noshow = False
-        force = False
-        for i in self.de.getOnlyShowIn():
-            if i in envs: force = True
-        for i in self.de.getNotShowIn():
-            if i in envs: noshow = True
-
-        if verbose:
-            if not default and not force:
-                s = ""
-                for i in self.de.getOnlyShowIn():
-                    if s: s += ", "
-                    s += i
-                self._alert("Excluded by: OnlyShowIn (" + s + ")")
-            if default and noshow and not force:
-                s = ""
-                for i in self.de.getNotShowIn():
-                    if s: s += ", "
-                    s += i
-                self._alert("Excluded by: NotShowIn (" + s + ")")
-        return (default and not noshow) or force
-
-    def _shouldRun(self, envs, verbose=False):
-        if not self.de.getExec():
-            if verbose: self._alert("Excluded by: Missing Exec field")
-            return False
-        if self.de.getHidden():
-            if verbose: self._alert("Excluded by: Hidden")
-            return False
-        if self.de.getTryExec():
-            if not self._findFile(self.de.getTryExec(), os.getenv("PATH"),
-                                  self._isexecfile):
-                if verbose: self._alert("Excluded by: TryExec (" +
-                                        self.de.getTryExec() + ")")
-                return False
-        if not self._showInEnvironment(envs, verbose):
-            return False
-        return True
-
-    def display(self, envs):
-        if self._shouldRun(envs):
-            print "[*] " + self.de.getName()
-        else:
-            print "[ ] " + self.de.getName()
-        self._alert("File: " + self.path, info=True)
-        if self.de.getExec():
-            self._alert("Executes: " + self.de.getExec(), info=True)
-        self._shouldRun(envs, True)
-        print
-
-    def run(self, envs):
-        here = os.getcwd()
-        if self.de.getPath():
-            os.chdir(self.de.getPath())
-        if self._shouldRun(envs):
-            args = ["/bin/sh", "-c", "exec " + self.de.getExec()]
-            os.spawnv(os.P_NOWAIT, args[0], args);
-        os.chdir(here)
-
-def show_help():
-    print "Usage:", ME, "[OPTION]... [ENVIRONMENT]..."
-    print
-    print "This tool will run xdg autostart .desktop files"
-    print
-    print "OPTIONS"
-    print "  --list        Show a list of the files which would be run"
-    print "                Files which would be run are marked with an asterix"
-    print "                symbol [*].  For files which would not be run,"
-    print "                information is given for why they are excluded"
-    print "  --help        Show this help and exit"
-    print "  --version     Show version and copyright information"
-    print
-    print "ENVIRONMENT specifies a list of environments for which to run autostart"
-    print "applications.  If none are specified, only applications which do not "
-    print "limit themselves to certain environments will be run."
-    print
-    print "ENVIRONMENT can be one or more of:"
-    print "  GNOME         Gnome Desktop"
-    print "  KDE           KDE Desktop"
-    print "  ROX           ROX Desktop"
-    print "  XFCE          XFCE Desktop"
-    print "  Old           Legacy systems"
-    print
-
-def show_version():
-    print ME, VERSION
-    print "Copyright (c) 2008        Dana Jansens"
-    print
-
-if __name__ == "__main__":
-        sys.exit(main())