summary refs log blame commit diff stats
path: root/README
blob: e8afdededb399010be8a46ffa22893b2f444d0a6 (plain) (tree)
): if 'alias' in self.tree_pointer.actions: self.tree_pointer = self.keymap.traverse( translate_keys(self.tree_pointer.actions['alias'])) self._try_to_finish(rec - 1) else: self.command = self.tree_pointer self.done = True def clear(self): self.failure = False self.done = False self.quant = None self.matches = [] self.command = None self.direction_quant = None self.directions = [] self.all_keys = [] self.tree_pointer = self.keymap._tree self.dir_tree_pointer = self.direction_keys._tree self.eval_quantifier = True self.eval_command = True def __str__(self): """returns a concatenation of all characters""" return "".join(to_string(c) for c in self.all_keys) def simulate_press(self, string): for char in translate_keys(string): self.add(char) if self.done: return self.command if self.failure: break key_map = { 'dir': DIRKEY, 'any': ANYKEY, 'cr': ord("\n"), 'enter': ord("\n"), 'space': ord(" "), 'space': ord(" "), 'tab': ord('\t'), } for char in ascii_lowercase: key_map['c-' + char] = ord(char) - 96 def translate_keys(obj): """ Translate a keybinding to a sequence of integers Example: lol<CR> => (108, 111, 108, 10) """ assert isinstance(obj, (tuple, int, str)) if isinstance(obj, tuple): for char in obj: yield char elif isinstance(obj, int): yield obj elif isinstance(obj, str): in_brackets = False bracket_content = None for char in obj: if in_brackets: if char == '>': in_brackets = False string = ''.join(bracket_content).lower() try: yield key_map[string] except KeyError: yield ord('<') for c in bracket_content: yield ord(c) yield ord('>') else: bracket_content.append(char) else: if char == '<': in_brackets = True bracket_content = [] else: yield ord(char) if in_brackets: yield ord('<') for c in bracket_content: yield ord(c)