diff options
author | Campbell Barton <ideasman42@gmail.com> | 2009-11-17 15:21:41 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2009-11-17 15:21:41 +0300 |
commit | 51f2dcd08ccde78223449383b98b9f7e35062b24 (patch) | |
tree | d321846ee9e0d09d87dd9e43cc2a6b5f9edaeada /release/scripts/op | |
parent | 7f8a24b614450a05a4b1df80080a19001a851873 (diff) |
- access console languages as modules rather then having the py operator call an operator
- workaround for __getattr__ existing for types that dont support it
Diffstat (limited to 'release/scripts/op')
-rw-r--r-- | release/scripts/op/console_python.py | 220 | ||||
-rw-r--r-- | release/scripts/op/console_shell.py | 87 |
2 files changed, 122 insertions, 185 deletions
diff --git a/release/scripts/op/console_python.py b/release/scripts/op/console_python.py index d3b745c7ead..ec700798b02 100644 --- a/release/scripts/op/console_python.py +++ b/release/scripts/op/console_python.py @@ -66,160 +66,130 @@ def get_console(console_id): return console, stdout, stderr -class PyConsoleExec(bpy.types.Operator): - '''Execute the current console line as a python expression.''' - bl_idname = "console.execute_" + language_id - bl_label = "Console Execute" - bl_register = False +# Both prompts must be the same length +PROMPT = '>>> ' +PROMPT_MULTI = '... ' - # Both prompts must be the same length - PROMPT = '>>> ' - PROMPT_MULTI = '... ' +def execute(context): + sc = context.space_data - # is this working??? - ''' - def poll(self, context): - return (context.space_data.type == 'PYTHON') - ''' - # its not :| - - def execute(self, context): - sc = context.space_data - - try: - line = sc.history[-1].line - except: - return ('CANCELLED',) - - if sc.console_type != 'PYTHON': - return ('CANCELLED',) - - console, stdout, stderr = get_console(hash(context.region)) - - # Hack, useful but must add some other way to access - #if "C" not in console.locals: - console.locals["C"] = context + try: + line = sc.history[-1].line + except: + return ('CANCELLED',) - # redirect output - sys.stdout = stdout - sys.stderr = stderr + if sc.console_type != 'PYTHON': + return ('CANCELLED',) - # run the console - if not line.strip(): - line_exec = '\n' # executes a multiline statement - else: - line_exec = line + console, stdout, stderr = get_console(hash(context.region)) - is_multiline = console.push(line_exec) + # Hack, useful but must add some other way to access + #if "C" not in console.locals: + console.locals["C"] = context - stdout.seek(0) - stderr.seek(0) + # redirect output + sys.stdout = stdout + sys.stderr = stderr - output = stdout.read() - output_err = stderr.read() + # run the console + if not line.strip(): + line_exec = '\n' # executes a multiline statement + else: + line_exec = line - # cleanup - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ - sys.last_traceback = None + is_multiline = console.push(line_exec) - # So we can reuse, clear all data - stdout.truncate(0) - stderr.truncate(0) + stdout.seek(0) + stderr.seek(0) - bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT') + output = stdout.read() + output_err = stderr.read() - if is_multiline: - sc.prompt = self.PROMPT_MULTI - else: - sc.prompt = self.PROMPT + # cleanup + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + sys.last_traceback = None - # insert a new blank line - bpy.ops.console.history_append(text="", current_character=0, - remove_duplicates=True) + # So we can reuse, clear all data + stdout.truncate(0) + stderr.truncate(0) - # Insert the output into the editor - # not quite correct because the order might have changed, - # but ok 99% of the time. - if output: - add_scrollback(output, 'OUTPUT') - if output_err: - add_scrollback(output_err, 'ERROR') + bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT') - return ('FINISHED',) + if is_multiline: + sc.prompt = PROMPT_MULTI + else: + sc.prompt = PROMPT + # insert a new blank line + bpy.ops.console.history_append(text="", current_character=0, + remove_duplicates=True) -class PyConsoleAutocomplete(bpy.types.Operator): - '''Evaluate the namespace up until the cursor and give a list of - options or complete the name if there is only one.''' - bl_idname = "console.autocomplete_" + language_id - bl_label = "Python Console Autocomplete" - bl_register = False + # Insert the output into the editor + # not quite correct because the order might have changed, + # but ok 99% of the time. + if output: + add_scrollback(output, 'OUTPUT') + if output_err: + add_scrollback(output_err, 'ERROR') - def poll(self, context): - return context.space_data.console_type == 'PYTHON' + return ('FINISHED',) - def execute(self, context): - from console import intellisense - sc = context.space_data +def autocomplete(context): + from console import intellisense - console = get_console(hash(context.region))[0] - - current_line = sc.history[-1] - line = current_line.line + sc = context.space_data - if not console: - return ('CANCELLED',) + console = get_console(hash(context.region))[0] + + current_line = sc.history[-1] + line = current_line.line - if sc.console_type != 'PYTHON': - return ('CANCELLED',) + if not console: + return ('CANCELLED',) - # This function isnt aware of the text editor or being an operator - # just does the autocomp then copy its results back - current_line.line, current_line.current_character, scrollback = \ - intellisense.expand( - line=current_line.line, - cursor=current_line.current_character, - namespace=console.locals, - private='-d' in sys.argv) + if sc.console_type != 'PYTHON': + return ('CANCELLED',) - # Now we need to copy back the line from blender back into the - # text editor. This will change when we dont use the text editor - # anymore - if scrollback: - add_scrollback(scrollback, 'INFO') + # This function isnt aware of the text editor or being an operator + # just does the autocomp then copy its results back + current_line.line, current_line.current_character, scrollback = \ + intellisense.expand( + line=current_line.line, + cursor=current_line.current_character, + namespace=console.locals, + private='-d' in sys.argv) - context.area.tag_redraw() + # Now we need to copy back the line from blender back into the + # text editor. This will change when we dont use the text editor + # anymore + if scrollback: + add_scrollback(scrollback, 'INFO') - return ('FINISHED',) + context.area.tag_redraw() + return ('FINISHED',) -class PyConsoleBanner(bpy.types.Operator): - bl_idname = "console.banner_" + language_id - def execute(self, context): - sc = context.space_data - version_string = sys.version.strip().replace('\n', ' ') +def banner(context): + sc = context.space_data + version_string = sys.version.strip().replace('\n', ' ') - add_scrollback(" * Python Interactive Console %s *" % version_string, 'OUTPUT') - add_scrollback("Command History: Up/Down Arrow", 'OUTPUT') - add_scrollback("Cursor: Left/Right Home/End", 'OUTPUT') - add_scrollback("Remove: Backspace/Delete", 'OUTPUT') - add_scrollback("Execute: Enter", 'OUTPUT') - add_scrollback("Autocomplete: Ctrl+Space", 'OUTPUT') - add_scrollback("Ctrl +/- Wheel: Zoom", 'OUTPUT') - add_scrollback("Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, Mathutils, Geometry, BGL", 'OUTPUT') - add_scrollback("", 'OUTPUT') - add_scrollback("", 'OUTPUT') - sc.prompt = PyConsoleExec.PROMPT + add_scrollback(" * Python Interactive Console %s *" % version_string, 'OUTPUT') + add_scrollback("Command History: Up/Down Arrow", 'OUTPUT') + add_scrollback("Cursor: Left/Right Home/End", 'OUTPUT') + add_scrollback("Remove: Backspace/Delete", 'OUTPUT') + add_scrollback("Execute: Enter", 'OUTPUT') + add_scrollback("Autocomplete: Ctrl+Space", 'OUTPUT') + add_scrollback("Ctrl +/- Wheel: Zoom", 'OUTPUT') + add_scrollback("Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, Mathutils, Geometry, BGL", 'OUTPUT') + add_scrollback("", 'OUTPUT') + add_scrollback("", 'OUTPUT') + sc.prompt = PROMPT - # Add context into the namespace for quick access - console = get_console(hash(context.region))[0] - console.locals["C"] = bpy.context + # Add context into the namespace for quick access + console = get_console(hash(context.region))[0] + console.locals["C"] = bpy.context - return ('FINISHED',) - -bpy.ops.add(PyConsoleExec) -bpy.ops.add(PyConsoleAutocomplete) -bpy.ops.add(PyConsoleBanner) + return ('FINISHED',) diff --git a/release/scripts/op/console_shell.py b/release/scripts/op/console_shell.py index 874101d1c79..60768693030 100644 --- a/release/scripts/op/console_shell.py +++ b/release/scripts/op/console_shell.py @@ -41,73 +41,40 @@ def shell_run(text): add_scrollback(output, style) +PROMPT = '$ ' -class ShellConsoleExec(bpy.types.Operator): - '''Execute the current console line as a python expression.''' - bl_idname = "console.execute_" + language_id - bl_label = "Console Execute" - bl_register = False - - # Both prompts must be the same length - PROMPT = '$ ' - - # is this working??? - ''' - def poll(self, context): - return (context.space_data.type == 'PYTHON') - ''' - # its not :| - - def execute(self, context): - sc = context.space_data - - try: - line = sc.history[-1].line - except: - return ('CANCELLED',) - - bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT') - - shell_run(line) - - # insert a new blank line - bpy.ops.console.history_append(text="", current_character=0, - remove_duplicates=True) - - sc.prompt = os.getcwd()+ShellConsoleExec.PROMPT - return ('FINISHED',) +def execute(context): + sc = context.space_data -class ShellConsoleAutocomplete(bpy.types.Operator): - '''Evaluate the namespace up until the cursor and give a list of - options or complete the name if there is only one.''' - bl_idname = "console.autocomplete_" + language_id - bl_label = "Python Console Autocomplete" - bl_register = False - - def poll(self, context): - return context.space_data.console_type == 'PYTHON' + try: + line = sc.history[-1].line + except: + return ('CANCELLED',) + + bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT') + + shell_run(line) + + # insert a new blank line + bpy.ops.console.history_append(text="", current_character=0, + remove_duplicates=True) - def execute(self, context): - from console import intellisense + sc.prompt = os.getcwd()+PROMPT + return ('FINISHED',) - sc = context.space_data - - # TODO - return ('CANCELLED',) +def autocomplete(context): + # sc = context.space_data + # TODO + return ('CANCELLED',) -class ShellConsoleBanner(bpy.types.Operator): - bl_idname = "console.banner_" + language_id - def execute(self, context): - sc = context.space_data - - shell_run("bash --version") - sc.prompt = os.getcwd()+ShellConsoleExec.PROMPT +def banner(context): + sc = context.space_data + + shell_run("bash --version") + sc.prompt = os.getcwd()+PROMPT - return ('FINISHED',) + return ('FINISHED',) -bpy.ops.add(ShellConsoleExec) -bpy.ops.add(ShellConsoleAutocomplete) -bpy.ops.add(ShellConsoleBanner) |