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
60
61
62
63 __repr__ = __str__
64
65
66
68 return hash(tuple(obj.raw))
69
70
71
73 """
74 Parse shortcut into raw form
75 @param sc: List of shortcuts as read from config file
76 """
77
78 _shortcut = []
79
80 for s in sc:
81 _tmp = []
82
83 for _key in s.split("-"):
84 try:
85 _tmp.append(getattr(self._keys, _key))
86 except AttributeError:
87 _tmp.append(_key)
88
89 _shortcut.append(u" ".join([ustring(x) for x in _tmp]))
90
91 return _shortcut
92
93
94
96 """
97 Make shortcut from raw keys received
98 """
99
100 _raw = []
101
102 for el in raw:
103 el = ustring(el)
104 _data = el
105
106 if el in (u"page up", u"page down"):
107 _data = self._keys.get_key(raw)
108 elif len(el) > 1:
109 _data = u"-".join([self._keys.get_key(x) or x
110 for x in el.split(u" ")])
111
112 _raw.append(_data)
113
114 return _raw
115