Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/env python
- import os, sys
- import ConfigParser
- import xdg.IconTheme
- class my_apps:
- def __init__(self, name , execute , icon=None):
- self.name = name
- self.execute = execute
- self.icon = icon
- class application_list:
- def __init__(self):
- self.known_cats = ['Audio', 'Audio Video', 'Development', 'Education',
- 'Game' , 'Graphics', 'Network' , 'Office' , 'Science' ,
- 'Settings' , 'System' , 'Utility', 'Other']
- self.list = {'Audio':[], 'Audio Video':[], 'Development':[], 'Education':[],
- 'Game':[] , 'Graphics':[], 'Network':[] , 'Office':[] , 'Science':[] ,
- 'Settings':[] , 'System':[] , 'Utility':[], 'Other':[]}
- self.get_app_list()
- #for i in self.list.items():
- #i.sort(key = operator.attrgetter('name'))
- def get_menu_items(self, app):
- section = 'Desktop Entry'
- config = ConfigParser.ConfigParser()
- config.readfp(open(app))
- try:
- exe = config.get(section,'Exec')
- except:
- exe = '\dev\Null'
- try:
- name = config.get(section, 'Name')
- except:
- name = 'N/A'
- try:
- t = config.get(section, 'Type')
- except :
- t = None
- try:
- categories = config.get(section, 'Categories')
- cats = categories.split(";")
- except:
- cats = ['Other']
- try:
- icon = config.get(section, 'Icon')
- except:
- icon = None
- #print ("Name:{0}\n\tExec:{1}\n\tType:{2}\n\tCat:{3}").format(name, exe, t, cats)
- return name, exe , t, cats , icon
- def get_cats(self, categories):
- rt = []
- if categories:
- if len(categories) > 0:
- for i in categories:
- if i in self.known_cats:
- rt.append(i)
- return rt
- def get_app_list(self):
- apps=[]
- path = str(sys.argv[1])
- for (path, dir , filename) in os.walk(path):
- for fn in filename:
- full_path = os.path.join(path, fn)
- filen, filee = os.path.splitext(fn)
- if filee == ".desktop":
- name, exe, t , cats , icon = self.get_menu_items(full_path)
- cat = self.get_cats(cats)
- exe = self.check_execute(exe)
- icon = self.check_icon(icon)
- if cat is not None:
- for d in cat:
- my_a = my_apps(name, exe, icon)
- self.list[d].append(my_a)
- def check_execute(self, execute):
- checklist = ['%U' , '%u', '%F' , '%f', '%i' , '%c', '%k']
- for i in checklist:
- execute = execute.replace(i, "")
- execute = execute.strip()
- return execute
- def check_icon(self,icon):
- if icon is not None:
- if os.path.isfile(icon):
- return icon
- else:
- try:
- icon = xdg.IconTheme.getIconPath(icon)
- except:
- icon = ""
- return icon
- else:
- return ""
- ml = application_list()
- print "<openbox_pipe_menu>"
- for j in ml.known_cats:
- if len(ml.list[j]) > 0 :
- print "<menu id=\"user-{0}\" label=\"{0}\">".format(j)
- for i in ml.list[j]:
- print "<item label=\"{0}\" icon=\"{2}\">\n\t<action name=\"Execute\">\n\t\t<execute>{1}</execute>\n\t</action>\n</item>".format(i.name,i.execute,i.icon)
- print "</menu>"
- print "</openbox_pipe_menu>"
Add Comment
Please, Sign In to add comment