[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50029] trunk/blender: copy as script operator for the console, so you can copy input from a console for use in a textblock.

Campbell Barton ideasman42 at gmail.com
Sun Aug 19 23:32:18 CEST 2012


Revision: 50029
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50029
Author:   campbellbarton
Date:     2012-08-19 21:32:18 +0000 (Sun, 19 Aug 2012)
Log Message:
-----------
copy as script operator for the console, so you can copy input from a console for use in a textblock.

Modified Paths:
--------------
    trunk/blender/release/scripts/modules/console_python.py
    trunk/blender/release/scripts/startup/bl_operators/console.py
    trunk/blender/release/scripts/startup/bl_ui/space_console.py
    trunk/blender/source/blender/editors/space_console/space_console.c
    trunk/blender/source/blender/makesrna/intern/rna_space.c

Modified: trunk/blender/release/scripts/modules/console_python.py
===================================================================
--- trunk/blender/release/scripts/modules/console_python.py	2012-08-19 21:28:42 UTC (rev 50028)
+++ trunk/blender/release/scripts/modules/console_python.py	2012-08-19 21:32:18 UTC (rev 50029)
@@ -290,6 +290,40 @@
     return {'FINISHED'}
 
 
+def copy_as_script(context):
+    sc = context.space_data
+    lines = [
+        "import bpy",
+        "import bpy.context as C",
+        "import bpy.data as D",
+        "from mathutils import *",
+        "from math import *",
+        "",
+    ]
+
+    for line in sc.scrollback:
+        text = line.body
+        type = line.type
+        
+        if type == 'INFO':  # ignore autocomp.
+            continue
+        if type == 'INPUT':
+            if text.startswith(PROMPT):
+                text = text[len(PROMPT):]
+            elif text.startswith(PROMPT_MULTI):
+                text = text[len(PROMPT_MULTI):]
+        elif type == 'OUTPUT':
+            text = "#~ " + text
+        elif type == 'ERROR':
+            text = "#! " + text
+
+        lines.append(text)
+
+    context.window_manager.clipboard = "\n".join(lines)
+
+    return {'FINISHED'}
+
+
 def banner(context):
     sc = context.space_data
     version_string = sys.version.strip().replace('\n', ' ')

Modified: trunk/blender/release/scripts/startup/bl_operators/console.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_operators/console.py	2012-08-19 21:28:42 UTC (rev 50028)
+++ trunk/blender/release/scripts/startup/bl_operators/console.py	2012-08-19 21:32:18 UTC (rev 50029)
@@ -67,6 +67,25 @@
             return {'FINISHED'}
 
 
+class ConsoleCopyAsScript(Operator):
+    """Copy the console contents for use in a script"""
+    bl_idname = "console.copy_as_script"
+    bl_label = "Copy to Clipboard (as script)"
+
+    def execute(self, context):
+        sc = context.space_data
+
+        module = _lang_module_get(sc)
+        copy_as_script = getattr(module, "copy_as_script", None)
+
+        if copy_as_script:
+            return copy_as_script(context)
+        else:
+            print("Error: copy_as_script - not found for %r" %
+                  sc.language)
+            return {'FINISHED'}
+
+
 class ConsoleBanner(Operator):
     """Print a message when the terminal initializes"""
     bl_idname = "console.banner"

Modified: trunk/blender/release/scripts/startup/bl_ui/space_console.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_console.py	2012-08-19 21:28:42 UTC (rev 50028)
+++ trunk/blender/release/scripts/startup/bl_ui/space_console.py	2012-08-19 21:32:18 UTC (rev 50029)
@@ -51,6 +51,7 @@
 
         layout.separator()
 
+        layout.operator("console.copy_as_script")
         layout.operator("console.copy")
         layout.operator("console.paste")
         layout.menu("CONSOLE_MT_language")

Modified: trunk/blender/source/blender/editors/space_console/space_console.c
===================================================================
--- trunk/blender/source/blender/editors/space_console/space_console.c	2012-08-19 21:28:42 UTC (rev 50028)
+++ trunk/blender/source/blender/editors/space_console/space_console.c	2012-08-19 21:32:18 UTC (rev 50029)
@@ -326,6 +326,7 @@
 	WM_keymap_add_item(keymap, "CONSOLE_OT_autocomplete", SPACEKEY, KM_PRESS, KM_CTRL, 0); /* python operator - space_text.py */
 #endif
 
+	WM_keymap_add_item(keymap, "CONSOLE_OT_copy_as_script", CKEY, KM_PRESS, KM_CTRL | KM_SHIFT, 0);
 	WM_keymap_add_item(keymap, "CONSOLE_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0);
 	WM_keymap_add_item(keymap, "CONSOLE_OT_paste", VKEY, KM_PRESS, KM_CTRL, 0);
 #ifdef __APPLE__

Modified: trunk/blender/source/blender/makesrna/intern/rna_space.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_space.c	2012-08-19 21:28:42 UTC (rev 50028)
+++ trunk/blender/source/blender/makesrna/intern/rna_space.c	2012-08-19 21:32:18 UTC (rev 50029)
@@ -2656,6 +2656,14 @@
 
 static void rna_def_console_line(BlenderRNA *brna)
 {
+	static EnumPropertyItem console_line_type_items[] = {
+		{CONSOLE_LINE_OUTPUT, "OUTPUT", 0, "Output", ""},
+		{CONSOLE_LINE_INPUT, "INPUT", 0, "Input", ""},
+		{CONSOLE_LINE_INFO, "INFO", 0, "Info", ""},
+		{CONSOLE_LINE_ERROR, "ERROR", 0, "Error", ""},
+		{0, NULL, 0, NULL, NULL}
+	};
+
 	StructRNA *srna;
 	PropertyRNA *prop;
 	
@@ -2673,6 +2681,11 @@
 	RNA_def_property_int_sdna(prop, NULL, "cursor");
 	RNA_def_property_int_funcs(prop, NULL, NULL, "rna_ConsoleLine_cursor_index_range");
 	RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CONSOLE, NULL);
+
+	prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "type");
+	RNA_def_property_enum_items(prop, console_line_type_items);
+	RNA_def_property_ui_text(prop, "Type", "Console line type when used in scrollback");
 }
 	
 static void rna_def_space_console(BlenderRNA *brna)




More information about the Bf-blender-cvs mailing list