2023-08-16 00:20:26 +10:00
|
|
|
# SPDX-FileCopyrightText: 2009-2023 Blender Authors
|
2023-06-15 13:09:04 +10:00
|
|
|
#
|
2022-02-11 09:07:11 +11:00
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
2023-06-15 13:09:04 +10:00
|
|
|
|
2021-02-21 21:21:18 +11:00
|
|
|
from __future__ import annotations
|
2011-09-22 19:50:41 +00:00
|
|
|
|
|
|
|
|
import bpy
|
|
|
|
|
from bpy.types import Operator
|
2015-01-27 17:46:07 +11:00
|
|
|
from bpy.props import (
|
2017-11-29 18:00:41 +11:00
|
|
|
BoolProperty,
|
|
|
|
|
StringProperty,
|
|
|
|
|
)
|
2023-09-04 16:16:26 +02:00
|
|
|
from bpy.app.translations import contexts as i18n_contexts
|
2011-09-22 19:50:41 +00:00
|
|
|
|
|
|
|
|
|
2012-04-15 14:51:37 +00:00
|
|
|
def _lang_module_get(sc):
|
2025-01-14 12:46:40 +11:00
|
|
|
return __import__(
|
2025-10-13 09:35:09 +00:00
|
|
|
"_console_" + sc.language,
|
2025-01-14 12:46:40 +11:00
|
|
|
# for python 3.3, maybe a bug???
|
|
|
|
|
level=0,
|
|
|
|
|
)
|
2012-04-15 14:51:37 +00:00
|
|
|
|
|
|
|
|
|
2011-09-22 19:50:41 +00:00
|
|
|
class ConsoleExec(Operator):
|
2023-05-14 15:23:43 +02:00
|
|
|
"""Execute the current console line as a Python expression"""
|
2011-09-22 19:50:41 +00:00
|
|
|
bl_idname = "console.execute"
|
|
|
|
|
bl_label = "Console Execute"
|
2021-03-05 11:12:13 +01:00
|
|
|
bl_options = {'UNDO_GROUPED'}
|
2011-09-22 19:50:41 +00:00
|
|
|
|
2018-07-11 22:18:09 +02:00
|
|
|
interactive: BoolProperty(
|
2018-06-26 19:41:37 +02:00
|
|
|
options={'SKIP_SAVE'},
|
|
|
|
|
)
|
2013-05-24 01:04:37 +00:00
|
|
|
|
2013-04-26 02:44:21 +00:00
|
|
|
@classmethod
|
|
|
|
|
def poll(cls, context):
|
|
|
|
|
return (context.area and context.area.type == 'CONSOLE')
|
|
|
|
|
|
2011-09-22 19:50:41 +00:00
|
|
|
def execute(self, context):
|
|
|
|
|
sc = context.space_data
|
|
|
|
|
|
2012-04-15 14:51:37 +00:00
|
|
|
module = _lang_module_get(sc)
|
2011-09-22 19:50:41 +00:00
|
|
|
execute = getattr(module, "execute", None)
|
|
|
|
|
|
2013-05-24 01:04:37 +00:00
|
|
|
if execute is not None:
|
|
|
|
|
return execute(context, self.interactive)
|
2011-09-22 19:50:41 +00:00
|
|
|
else:
|
2024-04-27 16:02:37 +10:00
|
|
|
print("Error: bpy.ops.console.execute_{:s} - not found".format(sc.language))
|
2011-09-22 19:50:41 +00:00
|
|
|
return {'FINISHED'}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ConsoleAutocomplete(Operator):
|
2011-09-26 15:39:15 +00:00
|
|
|
"""Evaluate the namespace up until the cursor and give a list of """ \
|
2018-06-26 19:41:37 +02:00
|
|
|
"""options or complete the name if there is only one"""
|
2011-09-22 19:50:41 +00:00
|
|
|
bl_idname = "console.autocomplete"
|
|
|
|
|
bl_label = "Console Autocomplete"
|
|
|
|
|
|
2013-04-26 02:44:21 +00:00
|
|
|
@classmethod
|
|
|
|
|
def poll(cls, context):
|
|
|
|
|
return (context.area and context.area.type == 'CONSOLE')
|
|
|
|
|
|
2011-09-22 19:50:41 +00:00
|
|
|
def execute(self, context):
|
|
|
|
|
sc = context.space_data
|
2012-04-15 14:51:37 +00:00
|
|
|
module = _lang_module_get(sc)
|
2011-09-22 19:50:41 +00:00
|
|
|
autocomplete = getattr(module, "autocomplete", None)
|
|
|
|
|
|
|
|
|
|
if autocomplete:
|
|
|
|
|
return autocomplete(context)
|
|
|
|
|
else:
|
2024-04-27 16:02:37 +10:00
|
|
|
print("Error: bpy.ops.console.autocomplete_{:s} - not found".format(sc.language))
|
2011-09-22 19:50:41 +00:00
|
|
|
return {'FINISHED'}
|
|
|
|
|
|
|
|
|
|
|
2012-08-19 21:32:18 +00:00
|
|
|
class ConsoleCopyAsScript(Operator):
|
|
|
|
|
"""Copy the console contents for use in a script"""
|
|
|
|
|
bl_idname = "console.copy_as_script"
|
2020-10-24 11:42:17 -07:00
|
|
|
bl_label = "Copy to Clipboard (as Script)"
|
2012-08-19 21:32:18 +00:00
|
|
|
|
2013-04-26 02:44:21 +00:00
|
|
|
@classmethod
|
|
|
|
|
def poll(cls, context):
|
|
|
|
|
return (context.area and context.area.type == 'CONSOLE')
|
|
|
|
|
|
2012-08-19 21:32:18 +00:00
|
|
|
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:
|
2024-04-27 16:02:36 +10:00
|
|
|
print("Error: copy_as_script - not found for {!r}".format(sc.language))
|
2012-08-19 21:32:18 +00:00
|
|
|
return {'FINISHED'}
|
|
|
|
|
|
|
|
|
|
|
2011-09-22 19:50:41 +00:00
|
|
|
class ConsoleBanner(Operator):
|
2012-04-15 14:51:37 +00:00
|
|
|
"""Print a message when the terminal initializes"""
|
2011-09-22 19:50:41 +00:00
|
|
|
bl_idname = "console.banner"
|
|
|
|
|
bl_label = "Console Banner"
|
|
|
|
|
|
2013-04-26 02:44:21 +00:00
|
|
|
@classmethod
|
|
|
|
|
def poll(cls, context):
|
|
|
|
|
return (context.area and context.area.type == 'CONSOLE')
|
|
|
|
|
|
2011-09-22 19:50:41 +00:00
|
|
|
def execute(self, context):
|
|
|
|
|
sc = context.space_data
|
|
|
|
|
|
|
|
|
|
# default to python
|
|
|
|
|
if not sc.language:
|
2012-06-19 22:17:19 +00:00
|
|
|
sc.language = "python"
|
2011-09-22 19:50:41 +00:00
|
|
|
|
2012-04-15 14:51:37 +00:00
|
|
|
module = _lang_module_get(sc)
|
2011-09-22 19:50:41 +00:00
|
|
|
banner = getattr(module, "banner", None)
|
|
|
|
|
|
|
|
|
|
if banner:
|
|
|
|
|
return banner(context)
|
|
|
|
|
else:
|
2024-04-27 16:02:37 +10:00
|
|
|
print("Error: bpy.ops.console.banner_{:s} - not found".format(sc.language))
|
2011-09-22 19:50:41 +00:00
|
|
|
return {'FINISHED'}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ConsoleLanguage(Operator):
|
2012-04-15 14:51:37 +00:00
|
|
|
"""Set the current language for this console"""
|
2011-09-22 19:50:41 +00:00
|
|
|
bl_idname = "console.language"
|
|
|
|
|
bl_label = "Console Language"
|
|
|
|
|
|
2018-07-11 22:18:09 +02:00
|
|
|
language: StringProperty(
|
2018-06-26 19:41:37 +02:00
|
|
|
name="Language",
|
2023-09-04 16:16:26 +02:00
|
|
|
translation_context=i18n_contexts.editor_python_console,
|
2018-06-26 19:41:37 +02:00
|
|
|
maxlen=32,
|
|
|
|
|
)
|
2011-09-22 19:50:41 +00:00
|
|
|
|
2013-04-26 02:44:21 +00:00
|
|
|
@classmethod
|
|
|
|
|
def poll(cls, context):
|
|
|
|
|
return (context.area and context.area.type == 'CONSOLE')
|
|
|
|
|
|
2011-09-22 19:50:41 +00:00
|
|
|
def execute(self, context):
|
|
|
|
|
sc = context.space_data
|
|
|
|
|
|
2011-10-17 06:58:07 +00:00
|
|
|
# default to python
|
2011-09-22 19:50:41 +00:00
|
|
|
sc.language = self.language
|
|
|
|
|
|
|
|
|
|
bpy.ops.console.banner()
|
|
|
|
|
|
|
|
|
|
# insert a new blank line
|
2024-03-15 10:04:03 +11:00
|
|
|
bpy.ops.console.history_append(text="", current_character=0, remove_duplicates=True)
|
2011-09-22 19:50:41 +00:00
|
|
|
|
|
|
|
|
return {'FINISHED'}
|
2017-03-18 20:03:24 +11:00
|
|
|
|
|
|
|
|
|
|
|
|
|
classes = (
|
|
|
|
|
ConsoleAutocomplete,
|
|
|
|
|
ConsoleBanner,
|
|
|
|
|
ConsoleCopyAsScript,
|
|
|
|
|
ConsoleExec,
|
|
|
|
|
ConsoleLanguage,
|
2017-11-29 18:00:41 +11:00
|
|
|
)
|