[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24605] trunk/blender: - access console languages as modules rather then having the py operator call an operator
Campbell Barton
ideasman42 at gmail.com
Tue Nov 17 13:21:41 CET 2009
Revision: 24605
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24605
Author: campbellbarton
Date: 2009-11-17 13:21:41 +0100 (Tue, 17 Nov 2009)
Log Message:
-----------
- access console languages as modules rather then having the py operator call an operator
- workaround for __getattr__ existing for types that dont support it
Modified Paths:
--------------
trunk/blender/release/scripts/op/console_python.py
trunk/blender/release/scripts/op/console_shell.py
trunk/blender/release/scripts/ui/space_console.py
trunk/blender/source/blender/makesrna/intern/rna_main.c
trunk/blender/source/blender/python/intern/bpy_rna.c
Modified: trunk/blender/release/scripts/op/console_python.py
===================================================================
--- trunk/blender/release/scripts/op/console_python.py 2009-11-17 10:57:49 UTC (rev 24604)
+++ trunk/blender/release/scripts/op/console_python.py 2009-11-17 12:21:41 UTC (rev 24605)
@@ -66,160 +66,130 @@
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 :|
+ try:
+ line = sc.history[-1].line
+ except:
+ return ('CANCELLED',)
- def execute(self, context):
- sc = context.space_data
+ if sc.console_type != 'PYTHON':
+ return ('CANCELLED',)
- try:
- line = sc.history[-1].line
- except:
- return ('CANCELLED',)
+ console, stdout, stderr = get_console(hash(context.region))
- if sc.console_type != 'PYTHON':
- return ('CANCELLED',)
+ # Hack, useful but must add some other way to access
+ #if "C" not in console.locals:
+ console.locals["C"] = context
- console, stdout, stderr = get_console(hash(context.region))
+ # redirect output
+ sys.stdout = stdout
+ sys.stderr = stderr
- # Hack, useful but must add some other way to access
- #if "C" not in console.locals:
- console.locals["C"] = context
+ # run the console
+ if not line.strip():
+ line_exec = '\n' # executes a multiline statement
+ else:
+ line_exec = line
- # redirect output
- sys.stdout = stdout
- sys.stderr = stderr
+ is_multiline = console.push(line_exec)
- # run the console
- if not line.strip():
- line_exec = '\n' # executes a multiline statement
- else:
- line_exec = line
+ stdout.seek(0)
+ stderr.seek(0)
- is_multiline = console.push(line_exec)
+ output = stdout.read()
+ output_err = stderr.read()
- stdout.seek(0)
- stderr.seek(0)
+ # cleanup
+ sys.stdout = sys.__stdout__
+ sys.stderr = sys.__stderr__
+ sys.last_traceback = None
- output = stdout.read()
- output_err = stderr.read()
+ # So we can reuse, clear all data
+ stdout.truncate(0)
+ stderr.truncate(0)
- # cleanup
- sys.stdout = sys.__stdout__
- sys.stderr = sys.__stderr__
- sys.last_traceback = None
+ bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT')
- # So we can reuse, clear all data
- stdout.truncate(0)
- stderr.truncate(0)
+ if is_multiline:
+ sc.prompt = PROMPT_MULTI
+ else:
+ sc.prompt = PROMPT
- bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT')
+ # insert a new blank line
+ bpy.ops.console.history_append(text="", current_character=0,
+ remove_duplicates=True)
- if is_multiline:
- sc.prompt = self.PROMPT_MULTI
- else:
- sc.prompt = self.PROMPT
+ # 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')
- # insert a new blank line
- bpy.ops.console.history_append(text="", current_character=0,
- remove_duplicates=True)
+ return ('FINISHED',)
- # 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')
- return ('FINISHED',)
+def autocomplete(context):
+ from console import intellisense
+ sc = context.space_data
-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
+ console = get_console(hash(context.region))[0]
+
+ current_line = sc.history[-1]
+ line = current_line.line
- def poll(self, context):
- return context.space_data.console_type == 'PYTHON'
+ if not console:
+ return ('CANCELLED',)
- def execute(self, context):
- from console import intellisense
+ if sc.console_type != 'PYTHON':
+ return ('CANCELLED',)
- sc = context.space_data
+ # 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)
- console = get_console(hash(context.region))[0]
-
- current_line = sc.history[-1]
- line = current_line.line
+ # 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')
- if not console:
- return ('CANCELLED',)
+ context.area.tag_redraw()
- if sc.console_type != 'PYTHON':
- return ('CANCELLED',)
+ return ('FINISHED',)
- # 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)
- # 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')
+def banner(context):
+ sc = context.space_data
+ version_string = sys.version.strip().replace('\n', ' ')
- context.area.tag_redraw()
+ 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
- return ('FINISHED',)
+ # Add context into the namespace for quick access
+ console = get_console(hash(context.region))[0]
+ console.locals["C"] = bpy.context
-
-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', ' ')
-
- 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 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',)
Modified: trunk/blender/release/scripts/op/console_shell.py
===================================================================
--- trunk/blender/release/scripts/op/console_shell.py 2009-11-17 10:57:49 UTC (rev 24604)
+++ trunk/blender/release/scripts/op/console_shell.py 2009-11-17 12:21:41 UTC (rev 24605)
@@ -41,73 +41,40 @@
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 = '$ '
+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',)
-
- bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT')
+ try:
+ line = sc.history[-1].line
+ except:
+ return ('CANCELLED',)
- shell_run(line)
-
- # insert a new blank line
- bpy.ops.console.history_append(text="", current_character=0,
- remove_duplicates=True)
+ bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT')
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list