1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
import MenuMaker
from MenuMaker import indent, writeFullMenu
menuFile = "~/.config/compiz/deskmenu/menu.xml"
def _map(x) :
for d, s in (("&", "&"), ("\'", "\"")) :
x = x.replace(s, d)
return x
class Sep(object) :
def emit(self, level) :
return ['%s<separator/>' % indent(level)]
class App(object) :
def emit(self, level) :
x = indent(level)
xx = indent(level + 1)
cmd = self.app.execmd
if self.app.terminal :
cmd = MenuMaker.terminal.runCmd(cmd)
return [
'%s<item type="launcher">' % x,
'%s<name>%s</name>' % (x, _map(self.app.name)),
'%s<command>%s</command>' % (x, cmd),
'%s</item>' % x
]
class Menu(object) :
def emit(self, level) :
menu = ['%s<menu name="%s">' % (indent(level), _map(self.name))]
for x in self :
menu += x.emit(level + 1)
menu.append('%s</menu>' % indent(level))
return menu
class Root(object) :
def __init__(self, subs) :
if writeFullMenu :
subs = subs + [MenuMaker.Sep(), SysMenu()]
super(Root, self).__init__(subs)
def emit(self, level) :
if writeFullMenu :
menu = [
'<menu>'
]
for x in self :
menu += x.emit(level)
menu.append('</menu>')
return menu
else :
menu = []
for x in self :
menu += x.emit(level)
return menu
class SysMenu(MenuMaker.Menu) :
name = "Compiz"
def __init__(self) :
subs = [
X('<item type="launcher">'),
X(' <name>Edit Menu</name>'),
X(' <icon>gtk-edit</icon>'),
X(' <command>compiz-deskmenu-editor</command>'),
X('</item>'),
X('<item type="viewportlist"/>'),
X('<item type="reload"/>'),
MenuMaker.Sep(),
X('<item type="launcher">'),
X(' <name>Logout</name>'),
X(' <icon>gnome-session-logout</icon>'),
X(' <command>killall X</command>'),
X('</item>')
]
super(SysMenu, self).__init__(subs)
self.align = MenuMaker.Entry.StickBottom
class X(MenuMaker.Entry) :
def __init__(self, x) :
super(X, self).__init__()
self.align = MenuMaker.Entry.StickBottom
self.x = x
def emit(self, level) :
return [indent(level) + self.x]
|