annotate urwid_satext/keys.py @ 144:bfab04d0a745

ListOption: add __hash__ method
author Goffi <goffi@goffi.org>
date Sun, 27 Oct 2019 18:55:47 +0100
parents 144bdf877d21
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/python
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
3
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # Urwid SàT extensions
122
00b012549f88 copyright update
Goffi <goffi@goffi.org>
parents: 108
diff changeset
5 # Copyright (C) 2009-2016 Jérôme Poisson (goffi@goffi.org)
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
6 #
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Lesser General Public License as published by
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
11 #
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Lesser General Public License for more details.
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
16 #
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Lesser General Public License
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
19
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
20 """This module manage action <==> key mapping and can be extended to add new actions"""
143
144bdf877d21 python 3 port (using 2to3)
Goffi <goffi@goffi.org>
parents: 129
diff changeset
21 from functools import reduce
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
22
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
23
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
24 class ConflictError(Exception):
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
25 pass
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
26
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
27
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
28 class ActionMap(dict):
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
29 """Object which manage mapping betwwen actions and keys"""
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
30
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
31 def __init__(self, source_dict=None):
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
32 """ Initialise the map
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
33
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
34 @param source_dict: dictionary-like object with actions to import
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
35 """
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
36 self._namespaces_actions = {} # key = namespace, values (set) = actions
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
37 self._close_namespaces = tuple()
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
38 self._alway_check_namespaces = None
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
39 if source_dict is not None:
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
40 self.update(source_dict)
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
41
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
42 def __setitem__(self, action, shortcut):
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
43 """set an action avoiding conflicts
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
44
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
45 @param action (str,tuple): either an action (str) or a (namespace, action) tuple. action without namespace will not be checked by cbeck_namespaces(). namespace can also be a tuple itself, the action will the be assigned to several namespaces.
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
46 @param shortcut (str): key shortcut for this action
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
47 @raise: ConflictError if the action already exists
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
48 """
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
49 if isinstance(action, tuple):
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
50 namespaces, action = action
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
51 if not isinstance(namespaces, tuple):
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
52 namespaces = (namespaces,)
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
53 for namespace in namespaces:
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
54 namespace_map = self._namespaces_actions.setdefault(namespace.lower(), set())
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
55 namespace_map.add(action)
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
56
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
57 if action in self:
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
58 raise ConflictError("The action [{}] already exists".format(action))
129
2a1880d5d450 keys: don't lower() shortcuts anymore
Goffi <goffi@goffi.org>
parents: 122
diff changeset
59 return super(ActionMap, self).__setitem__(action, shortcut)
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
60
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
61 def __delitem__(self, action):
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
62 # we don't want to delete actions
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
63 raise NotImplementedError
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
64
85
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
65 def replace_shortcut(self, action, shortcut):
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
66 """Replace an existing action
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
67
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
68 @param action: name of an existing action
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
69 @param shortcut: new shortcut to use
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
70 @raise KeyError: action doesn't exists
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
71 """
143
144bdf877d21 python 3 port (using 2to3)
Goffi <goffi@goffi.org>
parents: 129
diff changeset
72 assert isinstance(action, str)
85
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
73 if action not in self:
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
74 raise ValueError("Action [{}] doesn't exist".format(action))
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
75 super(ActionMap, self).__setitem__(action, shortcut)
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
76
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
77 def update(self, new_actions):
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
78 """Update actions with an other dictionary
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
79
85
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
80 @param new_actions: dictionary object to update actions
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
81 @raise ValueError: something else than a dictionary is used
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
82 @raise: ConflictError if at least one of the new actions already exists
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
83 """
85
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
84 if not isinstance(new_actions, dict):
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
85 raise ValueError("only dictionary subclasses are accepted for update")
143
144bdf877d21 python 3 port (using 2to3)
Goffi <goffi@goffi.org>
parents: 129
diff changeset
86 conflict = new_actions.keys() & self.keys()
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
87 if conflict:
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
88 raise ConflictError("The actions [{}] already exists".format(','.join(conflict)))
143
144bdf877d21 python 3 port (using 2to3)
Goffi <goffi@goffi.org>
parents: 129
diff changeset
89 for action, shortcut in new_actions.items():
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
90 self[action] = shortcut
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
91
85
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
92 def replace(self, action_shortcuts_map):
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
93 """Replace shortcuts with an other dictionary
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
94
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
95 @param action_shortcuts_map: dictionary like object to update shortcuts
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
96 @raise ValueError: something else than a dictionary is used
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
97 @raise KeyError: action doesn't exists
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
98 """
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
99 if not isinstance(action_shortcuts_map, dict):
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
100 raise ValueError("only dictionary subclasses are accepted for replacing shortcuts")
143
144bdf877d21 python 3 port (using 2to3)
Goffi <goffi@goffi.org>
parents: 129
diff changeset
101 for action, shortcut in action_shortcuts_map.items():
85
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
102 self.replace_shortcut(action, shortcut)
e0c8274f9b1c added ability to replace shortcuts
Goffi <goffi@goffi.org>
parents: 84
diff changeset
103
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
104 def set_close_namespaces(self, close_namespaces, always_check=None):
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
105 """Set namespaces where conflicting shortcut should not happen
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
106
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
107 used by check_namespaces to see if the same shortcut is not used in two close namespaces (e.g. 'tab' used in edit_bar and globally)
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
108 @param close_namespaces (tuple of tuples): tuple indicating namespace where shortcut should not conflict. e.g.: (('global', 'edit'), ('confirm', 'popup', 'global')) indicate that shortcut in 'global' and 'edit' should not be the same, nor the ones between 'confirm', 'popup' and 'global'.
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
109 @param always_check (tuple): if not None, these namespaces will be close to every other ones (useful for global namespace)
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
110 """
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
111 assert isinstance(close_namespaces, tuple)
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
112 if always_check is not None:
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
113 assert isinstance(always_check, tuple)
86
ea5b9a211bbb added namespace check in keys.ActionMap.set_close_namespaces
Goffi <goffi@goffi.org>
parents: 85
diff changeset
114 to_check = reduce(lambda ns1, ns2: ns1.union(ns2), close_namespaces, set(always_check) or set())
ea5b9a211bbb added namespace check in keys.ActionMap.set_close_namespaces
Goffi <goffi@goffi.org>
parents: 85
diff changeset
115 if not to_check.issubset(self._namespaces_actions):
ea5b9a211bbb added namespace check in keys.ActionMap.set_close_namespaces
Goffi <goffi@goffi.org>
parents: 85
diff changeset
116 raise ValueError("Unkown namespaces: {}".format(', '.join(to_check.difference(self._namespaces_actions))))
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
117 self._close_namespaces = close_namespaces
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
118 self._alway_check_namespaces = always_check
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
119
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
120 def check_namespaces(self):
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
121 """Check that shortcuts are not conflicting in close namespaces"""
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
122 # we first check each namespace individually
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
123 checked = set()
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
124
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
125 def check_namespaces(namespaces):
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
126 # for each namespace which save keys used
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
127 # if 1 key is used several times, we raise
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
128 # a ConflictError
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
129 set_shortcuts = {}
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
130
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
131 to_check = set(namespaces + self._alway_check_namespaces)
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
132
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
133 for namespace in to_check:
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
134 checked.add(namespace)
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
135 for action in self._namespaces_actions[namespace]:
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
136 shortcut = self[action]
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
137 if shortcut in set_shortcuts:
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
138 set_namespace = set_shortcuts[shortcut]
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
139 if set_namespace == namespace:
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
140 msg = 'shortcut [{}] is not unique in namespace "{}"'.format(shortcut, namespace)
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
141 else:
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
142 msg = 'shortcut [{}] is used both in namespaces "{}" and "{}"'.format(shortcut, set_namespace, namespace)
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
143 raise ConflictError(msg)
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
144 set_shortcuts[shortcut] = namespace
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
145
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
146 # we first check close namespaces
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
147 for close_namespaces in self._close_namespaces:
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
148 check_namespaces(close_namespaces)
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
149
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
150 # then the remaining ones
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
151 for namespace in set(self._namespaces_actions.keys()).difference(checked):
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
152 check_namespaces((namespace,))
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
153
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
154
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
155 keys = {
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
156 ("edit", "EDIT_HOME"): 'ctrl a',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
157 ("edit", "EDIT_END"): 'ctrl e',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
158 ("edit", "EDIT_DELETE_TO_END"): 'ctrl k',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
159 ("edit", "EDIT_DELETE_LAST_WORD"): 'ctrl w',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
160 ("edit", "EDIT_ENTER"): 'enter',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
161 ("edit", "EDIT_COMPLETE"): 'shift tab',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
162 (("edit", "modal"), "MODAL_ESCAPE"): 'esc',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
163 ("selectable", "TEXT_SELECT"): ' ',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
164 ("selectable", "TEXT_SELECT2"): 'enter',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
165 ("menu_box", "MENU_BOX_UP"): 'up',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
166 ("menu_box", "MENU_BOX_LEFT"): 'left',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
167 ("menu_box", "MENU_BOX_RIGHT"): 'right',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
168 ("menu", "MENU_DOWN"): 'down',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
169 ("menu", "MENU_UP"): 'up',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
170 ("menu_roller", "MENU_ROLLER_UP"): 'up',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
171 ("menu_roller", "MENU_ROLLER_DOWN"): 'down',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
172 ("menu_roller", "MENU_ROLLER_RIGHT"): 'right',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
173 ("columns_roller", "COLUMNS_ROLLER_LEFT"): 'left',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
174 ("columns_roller", "COLUMNS_ROLLER_RIGHT"): 'right',
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
175 ("focus", "FOCUS_SWITCH"): 'tab',
87
a0dbf973befa keys: added FOCUS_UP FOCUS_DOWN FOCUS_LEFT and FOCUS_RIGHT
Goffi <goffi@goffi.org>
parents: 86
diff changeset
176 ('focus', "FOCUS_UP"): 'ctrl up',
a0dbf973befa keys: added FOCUS_UP FOCUS_DOWN FOCUS_LEFT and FOCUS_RIGHT
Goffi <goffi@goffi.org>
parents: 86
diff changeset
177 ('focus', "FOCUS_DOWN"): 'ctrl down',
a0dbf973befa keys: added FOCUS_UP FOCUS_DOWN FOCUS_LEFT and FOCUS_RIGHT
Goffi <goffi@goffi.org>
parents: 86
diff changeset
178 ('focus', "FOCUS_LEFT"): 'ctrl left',
a0dbf973befa keys: added FOCUS_UP FOCUS_DOWN FOCUS_LEFT and FOCUS_RIGHT
Goffi <goffi@goffi.org>
parents: 86
diff changeset
179 ('focus', "FOCUS_RIGHT"): 'ctrl right',
92
fdd0543677d4 use of new keys module in files_management
Goffi <goffi@goffi.org>
parents: 87
diff changeset
180 ('files_management', "FILES_HIDDEN_HIDE"): 'meta h',
fdd0543677d4 use of new keys module in files_management
Goffi <goffi@goffi.org>
parents: 87
diff changeset
181 ('files_management', "FILES_JUMP_DIRECTORIES"): 'meta d',
fdd0543677d4 use of new keys module in files_management
Goffi <goffi@goffi.org>
parents: 87
diff changeset
182 ('files_management', "FILES_JUMP_FILES"): 'meta f',
84
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
183 }
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
184
9f683df69a4c shortcut keys are now managed in separate module, with a class checking for conflicts
Goffi <goffi@goffi.org>
parents:
diff changeset
185 action_key_map = ActionMap(keys)