.fvwm/xdg2fvwm.py
changeset 506 0ab510cb567d
child 517 de05fae3311f
equal deleted inserted replaced
505:17e3e6c1ea96 506:0ab510cb567d
       
     1 
       
     2 import sys
       
     3 import os
       
     4 
       
     5 import xdg.Menu
       
     6 from xdg.DesktopEntry import *
       
     7 
       
     8 sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
       
     9 
       
    10 # For testing purpose. Uncomment to run this file without args...
       
    11 # sys.argv.append('debian-menu')
       
    12 
       
    13 if len(sys.argv) >= 2:
       
    14     sys_menu_name = sys.argv[1]
       
    15 else:
       
    16     print("You forget pass NAME which is /etc/xdg/NAME.menu")
       
    17     exit(1)
       
    18 
       
    19 # xdg_config_dirs hold possible paths. We use Debian one.
       
    20 sys_menu_file = "%s/menus/%s.menu" % ("/etc/xdg", sys_menu_name)
       
    21 
       
    22 sys_menu = xdg.Menu.parse(sys_menu_file)
       
    23 
       
    24 def parse_menu(menu, name):
       
    25     ''' Parse menu file. '''
       
    26     print 'DestroyMenu recreate %s' % name
       
    27     for entry in menu.getEntries():
       
    28         if isinstance(entry, xdg.Menu.Menu):
       
    29             icon = entry.getIcon()
       
    30             subname = name+"-"+str(entry)
       
    31             print u'AddToMenu "%s" "%s%%folder.png%%" Popup "%s"' % (name, entry.getName(), subname)
       
    32             parse_menu(entry, subname)
       
    33         elif isinstance(entry, xdg.Menu.MenuEntry):
       
    34             desktop = DesktopEntry(entry.DesktopEntry.getFileName())
       
    35             icon = desktop.getIcon()
       
    36             ind = icon.rfind('.')
       
    37             if ind != -1:
       
    38                 icon = icon[0:ind]
       
    39             cmd = desktop.getExec().rstrip('%FUfu')
       
    40             print u'AddToMenu "%s" "%s%%%s.png%%" Exec exec %s' % (name, desktop.getName(), os.path.basename(icon), cmd)
       
    41         else:
       
    42             pass
       
    43 
       
    44 parse_menu(sys_menu, "Menu-"+sys_menu_name)
       
    45