#!/usr/bin/python

import xdg.Menu

def print_fvwm_menu(menu):
    menu_name = menu.getName()
    submenus=[]
    print
    print 'DestroyMenu', 'MenuArch'+concName(menu_name)
    print 'AddToMenu', 'MenuArch'+concName(menu_name), ' "$[gt.'+menu_name+']"    Title'
    for entry in menu.getEntries():
        if isinstance(entry, xdg.Menu.Menu):
            submenus.append(entry)
            submenu_name = entry.getName()
            print '+', "\t", '"'+submenu_name+'"', "\t\t", 'Popup MenuArch'+concName(submenu_name)
        elif isinstance(entry, xdg.Menu.MenuEntry):
            entry_name = entry.DesktopEntry.getName()
            entry_exec = cleanExecEntry(entry.DesktopEntry.getExec())
            #print '+', (' '*4), '"'+entry_name+'"', (' '*4), 'Exec exec', entry_exec
            print '+', "\t", '"'+entry_name+'"', "\t\t", 'Exec exec', entry_exec
        elif isinstance(entry, xdg.Menu.Separator):
            print '+', "\t", '""', "\t\t", 'Nop'
    for submenu in submenus:
        print_fvwm_menu(submenu)

def concName(name):
    """concatenates name (example: menu name) if it consists of several words."""
    return ''.join(name.split())

def cleanExecEntry(string):
    """ get rid of those pesky exec  parameters ('%f') """
    i = 0
    while i < len(string):
        if string[i] == '%':
            if  i < len(string)-1:
                string = string[:i]+string[i+2:]
            else:
                string = string[:i]
        else:
            i = i+1
    return string

#Print the menu. Uses default config files.
print_fvwm_menu(xdg.Menu.parse())
