Blender Console addon
Coming from applications that have a dedicated console/prompt for their user input I always felt that the Blender Interactive Python console was one abstraction away from what I want in a console. Yes it's great that it executes python, i totally love REPL, but what about shortcuts+switches? What about actual interaction where the prompt suggests options to continue a command.Two types of commands
1) Parsed commands
2) Modal Interactive commands
Let's say I can't quite remember how to add a plane from python, or don't want to type:
bpy.ops.mesh.primitive_plane_add()What if i maybe want to define my own syntax for adding objects, and use the Console more as a prompt than a Python interpreter. Pressing Enter will execute console.execute (ie, the regular python). Pressing Ctrl+Enter can send the current line to console.do_action ( a new operator for this addon). console.do_action can interpret / parse the line and do a number of predefined operations.
Maybe I want to be able to write
+plane|0 1 2|layer=2 # gets parsed into # bpy.ops.mesh.primitive_plane_add(location=(0,1,2), layer=(False, True, False......)) +plane|3d|layer=1 # gets parsed into # bpy.ops.mesh.primitive_plane_add(location=(current-3dcursor-location), layer=(True, False......))Perhaps these are crude, non interactive, examples. Maybe i'd like a running modal operator to suggest a list of parameters to pick for the next element of my command.
+plane # p=location (space separated, 3 floats) # l=layer (single integer) # r=radius # enter # to finalize +circle # (or ci, or circ) # p=location (space separated, 3 floats) # l=layer (single integer) # r=radius # fill # enter # to finalizeSome golden oldies would be easy to add.
vtx # would just perform automatic intersection/extend/project from the tinyCAD addon v2x # would place a vertex at the intersection xall # would intersect all selected geometry bix # add bisector edge in proximity of selected edges # copy the current console line to the clipboard, without using a mouse. # exclamation at the end copies the preceding text to the clipboard. some.superlong.line.that.i.wanted.to.copy.to.clipboard! # pressing ctrl+enter would copy that line, without needing to highlightThis would abstract the python commands into something that I feel i can remember, or be happy about wanting to maintain.
Addon?!
yes, addon! https://github.com/zeffii/BlenderConsolePrompt Essentially, the addon core could be as simple as:class ConsoleDoAction(bpy.types.Operator): bl_label = "ConsoleDoAction" bl_idname = "console.do_action" def execute(self, context): m = bpy.context.space_data.history[-1].body m = m.strip() if m == "cen": '''cursor to center''' context.scene.cursor_location = (0.0, 0.0, 0.0) elif m.endswith('!'): '''copy current line to clipboard''' m = m[:-1] context.window_manager.clipboard = m print('copied: "{0}"'.format(m)) elif m == 'vtx': if hasattr(bpy.ops.view3d, 'autovtx'): bpy.ops.view3d.autovtx() return {'FINISHED'}I haven't tried to implement the modal interactive bits yet, but that's the next step.