|
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 |