#!BPY """ Name: 'Member Suggest | .' Blender: 246 Group: 'TextPlugin' Shortcut: 'Period' Tooltip: 'Lists members of the object preceding the cursor in the current text space' """ # Only run if we have the required modules try: import bpy from BPyTextPlugin import * except ImportError: OK = False else: OK = True def main(): txt = bpy.data.texts.active if not txt: return (line, c) = current_line(txt) # Check we are in a normal context if get_context(txt) != CTX_NORMAL: return targets = get_targets(line, c) if targets[0] == '': # Check if we are looking at a constant [] {} '' etc. i = c - len('.'.join(targets)) - 1 if i >= 0: if line[i] == '"' or line[i] == "'": targets[0] = 'str' elif line[i] == '}': targets[0] = 'dict' elif line[i] == ']': # Could be array elem x[y] or list [y] i = line.rfind('[', 0, i) - 1 while i >= 0: if line[i].isalnum() or line[i] == '_': break elif line[i] != ' ' and line[i] != '\t': i = -1 break i -= 1 if i < 0: targets[0] = 'list' obj = resolve_targets(txt, targets[:-1]) if not obj: return items = [] if isinstance(obj, VarDesc): obj = obj.type if isinstance(obj, Definition): # Locally defined if hasattr(obj, 'classes'): items.extend([(s, 'f') for s in obj.classes.keys()]) if hasattr(obj, 'defs'): items.extend([(s, 'f') for s in obj.defs.keys()]) if hasattr(obj, 'vars'): items.extend([(s, 'v') for s in obj.vars.keys()]) else: # Otherwise we have an imported or builtin object try: attr = obj.__dict__.keys() except AttributeError: attr = dir(obj) else: if not attr: attr = dir(obj) for k in attr: try: v = getattr(obj, k) except (AttributeError, TypeError): # Some attributes are not readable pass else: items.append((k, type_char(v))) if items != []: items.sort(cmp = suggest_cmp) txt.suggest(items, targets[-1]) # Check we are running as a script and not imported as a module if __name__ == "__main__" and OK: main()