.fvwm/xdg2fvwm.py
changeset 506 0ab510cb567d
child 517 de05fae3311f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.fvwm/xdg2fvwm.py	Tue Aug 14 02:52:27 2012 +0300
@@ -0,0 +1,45 @@
+
+import sys
+import os
+
+import xdg.Menu
+from xdg.DesktopEntry import *
+
+sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
+
+# For testing purpose. Uncomment to run this file without args...
+# sys.argv.append('debian-menu')
+
+if len(sys.argv) >= 2:
+    sys_menu_name = sys.argv[1]
+else:
+    print("You forget pass NAME which is /etc/xdg/NAME.menu")
+    exit(1)
+
+# xdg_config_dirs hold possible paths. We use Debian one.
+sys_menu_file = "%s/menus/%s.menu" % ("/etc/xdg", sys_menu_name)
+
+sys_menu = xdg.Menu.parse(sys_menu_file)
+
+def parse_menu(menu, name):
+    ''' Parse menu file. '''
+    print 'DestroyMenu recreate %s' % name
+    for entry in menu.getEntries():
+        if isinstance(entry, xdg.Menu.Menu):
+            icon = entry.getIcon()
+            subname = name+"-"+str(entry)
+            print u'AddToMenu "%s" "%s%%folder.png%%" Popup "%s"' % (name, entry.getName(), subname)
+            parse_menu(entry, subname)
+        elif isinstance(entry, xdg.Menu.MenuEntry):
+            desktop = DesktopEntry(entry.DesktopEntry.getFileName())
+            icon = desktop.getIcon()
+            ind = icon.rfind('.')
+            if ind != -1:
+                icon = icon[0:ind]
+            cmd = desktop.getExec().rstrip('%FUfu')
+            print u'AddToMenu "%s" "%s%%%s.png%%" Exec exec %s' % (name, desktop.getName(), os.path.basename(icon), cmd)
+        else:
+            pass
+
+parse_menu(sys_menu, "Menu-"+sys_menu_name)
+