Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-11-17 15:21:41 +0300
committerCampbell Barton <ideasman42@gmail.com>2009-11-17 15:21:41 +0300
commit51f2dcd08ccde78223449383b98b9f7e35062b24 (patch)
treed321846ee9e0d09d87dd9e43cc2a6b5f9edaeada /release/scripts/op
parent7f8a24b614450a05a4b1df80080a19001a851873 (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.py220
-rw-r--r--release/scripts/op/console_shell.py87
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)