X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=tools%2Fxdg-autostart%2Fxdg-autostart;fp=tools%2Fxdg-autostart%2Fxdg-autostart;h=0000000000000000000000000000000000000000;hb=bcc31faf7ecd8b0ad3b66a75fc72145e93e6c35a;hp=4a53382669443bd0dce7065899925e8c42f49a5b;hpb=7d71fb8a77ba9e2ea4938e793410f029265507a8;p=chaz%2Fopenbox diff --git a/tools/xdg-autostart/xdg-autostart b/tools/xdg-autostart/xdg-autostart deleted file mode 100755 index 4a533826..00000000 --- a/tools/xdg-autostart/xdg-autostart +++ /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())