1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 from libxyz.core.utils import ustring
18 from libxyz.exceptions import XYZValueError
19
20 from libxyz.ui import Keys
21
23 """
24 Shortcut abstraction
25 """
26
28 if (sc is raw is sc is None) or ((sc, raw) == (None, None)):
29 raise XYZValueError(
30 _(u"Only one of the arguments must be provided"))
31
32 self._keys = Keys()
33
34 if sc:
35 self.sc = sc
36 self.raw = self._parse_sc(sc)
37 elif raw:
38 self.raw = raw
39 self.sc = self._parse_raw(raw)
40
41
42
44 return self._hash(self)
45
46
47
50
51
52
54 return "<Shortcut: %s>" % str(self.sc)
55
56
57
58 __repr__ = __str__
59
60
61
63 return hash(tuple(obj.raw))
64
65
66
68 """
69 Parse shortcut into raw form
70 @param sc: List of shortcuts as read from config file
71 """
72
73 _shortcut = []
74
75 for s in sc:
76 _tmp = []
77
78 for _key in s.split("-"):
79 try:
80 _tmp.append(getattr(self._keys, _key))
81 except AttributeError:
82 _tmp.append(_key)
83
84 _shortcut.append(u" ".join([ustring(x) for x in _tmp]))
85
86 return _shortcut
87
88
89
91 """
92 Make shortcut from raw keys received
93 """
94
95 _raw = []
96
97 for el in raw:
98 el = ustring(el)
99 _data = el
100
101 if el in (u"page up", u"page down"):
102 _data = self._keys.get_key(raw)
103 elif len(el) > 1:
104 _data = u"-".join([self._keys.get_key(x) or x
105 for x in el.split(u" ")])
106
107 _raw.append(_data)
108
109 return _raw
110