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-10-29 23:55:45 +0300
committerCampbell Barton <ideasman42@gmail.com>2009-10-29 23:55:45 +0300
commit4b3fd4a8e05e49a9034e5ee789fcfef3961c19c5 (patch)
tree278aea66d1d901873a8e19f329f7a89c8a434d51 /release/scripts/ui/space_console.py
parent8c707b2a5f306f149bcd3057ab6fe91076c75dd8 (diff)
replacement for my own autocomplete module by stani
--- from his patch All the functionality is in the console folder: - intellisense.py: the central module which loads others on demand - complete_namespace: more or less a replacement for the old autocomplete.py - complete_import: module completion (I find this very handy, not just luxury) These complete_* modules work very simple and should also work outside blender. You give some input and it returns a list with possible completions. autocomplete.py is now deprecated.
Diffstat (limited to 'release/scripts/ui/space_console.py')
-rw-r--r--release/scripts/ui/space_console.py424
1 files changed, 212 insertions, 212 deletions
diff --git a/release/scripts/ui/space_console.py b/release/scripts/ui/space_console.py
index 19024977992..d02577d93e6 100644
--- a/release/scripts/ui/space_console.py
+++ b/release/scripts/ui/space_console.py
@@ -1,235 +1,236 @@
+import sys
import bpy
+
class CONSOLE_HT_header(bpy.types.Header):
- __space_type__ = 'CONSOLE'
-
- def draw(self, context):
- sc = context.space_data
- # text = sc.text
- layout = self.layout
-
- row= layout.row(align=True)
- row.template_header()
-
- if context.area.show_menus:
- sub = row.row(align=True)
-
- if sc.console_type == 'REPORT':
- sub.itemM("CONSOLE_MT_report")
- else:
- sub.itemM("CONSOLE_MT_console")
-
- layout.itemS()
- layout.itemR(sc, "console_type", expand=True)
-
- if sc.console_type == 'REPORT':
- row = layout.row(align=True)
- row.itemR(sc, "show_report_debug", text="Debug")
- row.itemR(sc, "show_report_info", text="Info")
- row.itemR(sc, "show_report_operator", text="Operators")
- row.itemR(sc, "show_report_warn", text="Warnings")
- row.itemR(sc, "show_report_error", text="Errors")
-
- row = layout.row()
- row.enabled = sc.show_report_operator
- row.itemO("console.report_replay")
- else:
- row = layout.row(align=True)
- row.itemO("console.autocomplete", text="Autocomplete")
+ __space_type__ = 'CONSOLE'
+
+ def draw(self, context):
+ sc = context.space_data
+ # text = sc.text
+ layout = self.layout
+
+ row = layout.row(align=True)
+ row.template_header()
+
+ if context.area.show_menus:
+ sub = row.row(align=True)
+
+ if sc.console_type == 'REPORT':
+ sub.itemM("CONSOLE_MT_report")
+ else:
+ sub.itemM("CONSOLE_MT_console")
+
+ layout.itemS()
+ layout.itemR(sc, "console_type", expand=True)
+
+ if sc.console_type == 'REPORT':
+ row = layout.row(align=True)
+ row.itemR(sc, "show_report_debug", text="Debug")
+ row.itemR(sc, "show_report_info", text="Info")
+ row.itemR(sc, "show_report_operator", text="Operators")
+ row.itemR(sc, "show_report_warn", text="Warnings")
+ row.itemR(sc, "show_report_error", text="Errors")
+
+ row = layout.row()
+ row.enabled = sc.show_report_operator
+ row.itemO("console.report_replay")
+ else:
+ row = layout.row(align=True)
+ row.itemO("console.autocomplete", text="Autocomplete")
+
class CONSOLE_MT_console(bpy.types.Menu):
- __label__ = "Console"
+ __label__ = "Console"
- def draw(self, context):
- layout = self.layout
- sc = context.space_data
+ def draw(self, context):
+ layout = self.layout
+ layout.column()
+ layout.itemO("console.clear")
+ layout.itemO("console.copy")
+ layout.itemO("console.paste")
- layout.column()
- layout.itemO("console.clear")
- layout.itemO("console.copy")
- layout.itemO("console.paste")
class CONSOLE_MT_report(bpy.types.Menu):
- __label__ = "Report"
+ __label__ = "Report"
- def draw(self, context):
- layout = self.layout
- sc = context.space_data
+ def draw(self, context):
+ layout = self.layout
+ layout.column()
+ layout.itemO("console.select_all_toggle")
+ layout.itemO("console.select_border")
+ layout.itemO("console.report_delete")
+ layout.itemO("console.report_copy")
- layout.column()
- layout.itemO("console.select_all_toggle")
- layout.itemO("console.select_border")
- layout.itemO("console.report_delete")
- layout.itemO("console.report_copy")
def add_scrollback(text, text_type):
- for l in text.split('\n'):
- bpy.ops.console.scrollback_append(text=l.replace('\t', ' '), type=text_type)
+ for l in text.split('\n'):
+ bpy.ops.console.scrollback_append(text=l.replace('\t', ' '),
+ type=text_type)
+
def get_console(console_id):
- '''
- helper function for console operators
- currently each text datablock gets its own console - code.InteractiveConsole()
- ...which is stored in this function.
-
- console_id can be any hashable type
- '''
- import sys, code
-
- try: consoles = get_console.consoles
- except:consoles = get_console.consoles = {}
-
- # clear all dead consoles, use text names as IDs
- # TODO, find a way to clear IDs
- '''
- for console_id in list(consoles.keys()):
- if console_id not in bpy.data.texts:
- del consoles[id]
- '''
-
- try:
- namespace, console, stdout, stderr = consoles[console_id]
- except:
- namespace = {'__builtins__':__builtins__} # locals()
- namespace['bpy'] = bpy
-
- console = code.InteractiveConsole(namespace)
-
- import io
- stdout = io.StringIO()
- stderr = io.StringIO()
-
- consoles[console_id]= namespace, console, stdout, stderr
-
- return namespace, console, stdout, stderr
+ '''
+ helper function for console operators
+ currently each text datablock gets its own
+ console - bpython_code.InteractiveConsole()
+ ...which is stored in this function.
+
+ console_id can be any hashable type
+ '''
+ from code import InteractiveConsole
+
+ try:
+ consoles = get_console.consoles
+ except:
+ consoles = get_console.consoles = {}
+
+ # clear all dead consoles, use text names as IDs
+ # TODO, find a way to clear IDs
+ '''
+ for console_id in list(consoles.keys()):
+ if console_id not in bpy.data.texts:
+ del consoles[id]
+ '''
+
+ try:
+ console, stdout, stderr = consoles[console_id]
+ except:
+ namespace = {'__builtins__': __builtins__, 'bpy': bpy}
+ console = InteractiveConsole(namespace)
+
+ import io
+ stdout = io.StringIO()
+ stderr = io.StringIO()
+
+ consoles[console_id] = console, stdout, stderr
+
+ return console, stdout, stderr
+
class CONSOLE_OT_exec(bpy.types.Operator):
- '''Execute the current console line as a python expression.'''
- __idname__ = "console.execute"
- __label__ = "Console Execute"
- __register__ = False
-
- # Both prompts must be the same length
- PROMPT = '>>> '
- PROMPT_MULTI = '... '
-
- # is this working???
- '''
- def poll(self, context):
- return (context.space_data.type == 'PYTHON')
- ''' # its not :|
-
- def execute(self, context):
- import sys
-
- sc = context.space_data
-
- try:
- line = sc.history[-1].line
- except:
- return ('CANCELLED',)
-
- if sc.console_type != 'PYTHON':
- return ('CANCELLED',)
-
- namespace, console, stdout, stderr = get_console(hash(context.region))
- namespace['C'] = context
-
- # redirect output
- sys.stdout = stdout
- sys.stderr = stderr
-
- # run the console
- if not line.strip():
- line_exec = '\n' # executes a multiline statement
- else:
- line_exec = line
-
- is_multiline = console.push(line_exec)
-
- stdout.seek(0)
- stderr.seek(0)
-
- output = stdout.read()
- output_err = stderr.read()
-
- # cleanup
- sys.stdout = sys.__stdout__
- sys.stderr = sys.__stderr__
- sys.last_traceback = None
-
- # So we can reuse, clear all data
- stdout.truncate(0)
- stderr.truncate(0)
-
- bpy.ops.console.scrollback_append(text = sc.prompt+line, type='INPUT')
-
- if is_multiline: sc.prompt = self.PROMPT_MULTI
- else: sc.prompt = self.PROMPT
-
- # insert a new blank line
- bpy.ops.console.history_append(text="", current_character=0, remove_duplicates= True)
-
- # 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',)
+ '''Execute the current console line as a python expression.'''
+ __idname__ = "console.execute"
+ __label__ = "Console Execute"
+ __register__ = False
+
+ # Both prompts must be the same length
+ PROMPT = '>>> '
+ PROMPT_MULTI = '... '
+
+ # 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))
+
+ # redirect output
+ sys.stdout = stdout
+ sys.stderr = stderr
+
+ # run the console
+ if not line.strip():
+ line_exec = '\n' # executes a multiline statement
+ else:
+ line_exec = line
+
+ is_multiline = console.push(line_exec)
+
+ stdout.seek(0)
+ stderr.seek(0)
+
+ output = stdout.read()
+ output_err = stderr.read()
+
+ # cleanup
+ sys.stdout = sys.__stdout__
+ sys.stderr = sys.__stderr__
+ sys.last_traceback = None
+
+ # So we can reuse, clear all data
+ stdout.truncate(0)
+ stderr.truncate(0)
+
+ bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT')
+
+ if is_multiline:
+ sc.prompt = self.PROMPT_MULTI
+ else:
+ sc.prompt = self.PROMPT
+
+ # insert a new blank line
+ bpy.ops.console.history_append(text="", current_character=0,
+ remove_duplicates=True)
+
+ # 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',)
class CONSOLE_OT_autocomplete(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.'''
- __idname__ = "console.autocomplete"
- __label__ = "Console Autocomplete"
- __register__ = False
-
- def poll(self, context):
- return context.space_data.console_type == 'PYTHON'
-
- def execute(self, context):
-
- sc = context.space_data
-
- namespace, console, stdout, stderr = get_console(hash(context.region))
-
- current_line = sc.history[-1]
- line = current_line.line
-
- if not console:
- return ('CANCELLED',)
-
- if sc.console_type != 'PYTHON':
- return ('CANCELLED',)
-
- # fake cursor, use for autocomp func.
- bcon = {}
- bcon['cursor'] = current_line.current_character
- bcon['console'] = console
- bcon['edit_text'] = line
- bcon['namespace'] = namespace
- bcon['scrollback'] = '' # nor from the BGE console
-
-
- # This function isnt aware of the text editor or being an operator
- # just does the autocomp then copy its results back
- import autocomplete
- autocomplete.execute(bcon)
-
- # 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 bcon['scrollback']:
- add_scrollback(bcon['scrollback'], 'INFO')
-
- # copy back
- current_line.line = bcon['edit_text']
- current_line.current_character = bcon['cursor']
-
- context.area.tag_redraw()
-
- return ('FINISHED',)
+ '''Evaluate the namespace up until the cursor and give a list of
+ options or complete the name if there is only one.'''
+ __idname__ = "console.autocomplete"
+ __label__ = "Console Autocomplete"
+ __register__ = False
+ def poll(self, context):
+ return context.space_data.console_type == 'PYTHON'
+
+ def execute(self, context):
+ from console import intellisense
+
+ sc = context.space_data
+
+ console = get_console(hash(context.region))[0]
+
+ current_line = sc.history[-1]
+ line = current_line.line
+
+ if not console:
+ return ('CANCELLED',)
+
+ if sc.console_type != 'PYTHON':
+ 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)
+
+ # 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')
+
+ context.area.tag_redraw()
+
+ return ('FINISHED',)
bpy.types.register(CONSOLE_HT_header)
@@ -238,4 +239,3 @@ bpy.types.register(CONSOLE_MT_report)
bpy.ops.add(CONSOLE_OT_exec)
bpy.ops.add(CONSOLE_OT_autocomplete)
-