From a036dc428b1f83ec2958579a1ad366eeb93f164b Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Sun, 18 Jan 2026 22:39:52 -0600 Subject: [PATCH] Wiring plugins to controller messages; importing plugin controller to code base; fixed VTE widget adding to bash history --- plugins/template/plugin.py | 7 ++++- src/core/controllers/base_controller_data.py | 5 ++-- src/core/widgets/code/code_base.py | 4 ++- src/core/widgets/vte_widget.py | 27 ++++++++++--------- src/plugins/__init__.py | 2 ++ .../{plugins_controller.py => controller.py} | 4 +-- src/plugins/plugin_base.py | 2 +- 7 files changed, 31 insertions(+), 20 deletions(-) rename src/plugins/{plugins_controller.py => controller.py} (97%) diff --git a/plugins/template/plugin.py b/plugins/template/plugin.py index 58d5593..0133dc7 100644 --- a/plugins/template/plugin.py +++ b/plugins/template/plugin.py @@ -6,15 +6,20 @@ gi.require_version('Gtk', '3.0') from gi.repository import Gtk # Application imports +from libs.dto.base_event import BaseEvent + from plugins.plugin_base import PluginBase class Plugin(PluginBase): def __init__(self): - super().__init__() + super(Plugin, self).__init__() + def _controller_message(self, event: BaseEvent): + ... + def load(self): ui_element = self.requests_ui_element("plugin_control_list") ui_element.add( self.generate_plugin_element() ) diff --git a/src/core/controllers/base_controller_data.py b/src/core/controllers/base_controller_data.py index 8b85498..fd35897 100644 --- a/src/core/controllers/base_controller_data.py +++ b/src/core/controllers/base_controller_data.py @@ -6,7 +6,8 @@ from shutil import which # Lib imports # Application imports -from plugins.plugins_controller import PluginsController +from plugins import plugins_controller + from ..builder_wrapper import BuilderWrapper @@ -17,7 +18,7 @@ class BaseControllerData: def _setup_controller_data(self) -> None: self.window = settings_manager.get_main_window() self.builder = BuilderWrapper() - self.plugins_controller = PluginsController() + self.plugins_controller = plugins_controller self.base_container = None self.was_midified_key = False diff --git a/src/core/widgets/code/code_base.py b/src/core/widgets/code/code_base.py index bc6a247..5980ba7 100644 --- a/src/core/widgets/code/code_base.py +++ b/src/core/widgets/code/code_base.py @@ -3,6 +3,8 @@ # Lib imports # Application imports +from plugins import plugins_controller + from libs.controllers.controller_manager import ControllerManager from .controllers.files_controller import FilesController @@ -38,7 +40,7 @@ class CodeBase: self.controller_manager.register_controller("commands", commands_controller) self.controller_manager.register_controller("completion", completion_controller) self.controller_manager.register_controller("source_views", source_views_controller) - # self.controller_manager.register_controller("plugins", plugins_controller) + self.controller_manager.register_controller("plugins", plugins_controller) def get_tabs_widget(self): return self.controller_manager["tabs"].get_tabs_widget() diff --git a/src/core/widgets/vte_widget.py b/src/core/widgets/vte_widget.py index 0e742ae..0325fa7 100644 --- a/src/core/widgets/vte_widget.py +++ b/src/core/widgets/vte_widget.py @@ -58,28 +58,29 @@ class VteWidget(Vte.Terminal): ... def _do_session_spawn(self): + env = [ + "DISPLAY=:0", + "LC_ALL=C", + "TERM='xterm-256color'", + f"HOME='{settings_manager.path_manager.get_home_path()}'", + "XDG_RUNTIME_DIR='/run/user/1000'", + f"XAUTHORITY='{settings_manager.path_manager.get_home_path()}/.Xauthority'", + "HISTFILE=/dev/null", + "HISTSIZE=0", + "HISTFILESIZE=0", + "PS1=\\h@\\u \\W -->: ", + ] + self.spawn_sync( Vte.PtyFlags.DEFAULT, settings_manager.path_manager.get_home_path(), ["/bin/bash"], - [], + env, GLib.SpawnFlags.DEFAULT, None, None, ) - # Note: '-->:' is used as a delimiter to split on to get command actual. - # !!! DO NOT REMOVE UNLESS CODE UPDATED ACCORDINGLY !!! - # Also, KEEP the prefix in commands to keep from inserting to bash history. startup_cmds = [ - " env -i /bin/bash --noprofile --norc\n", - " export TERM='xterm-256color'\n", - " export LC_ALL=C\n", - " export XDG_RUNTIME_DIR='/run/user/1000'\n", - " export DISPLAY=:0\n", - f" export XAUTHORITY='{settings_manager.path_manager.get_home_path()}/.Xauthority'\n", - f" \nexport HOME='{settings_manager.path_manager.get_home_path()}'\n", - " export PS1='\\h@\\u \\W -->: '\n", - " clear\n" ] for i in startup_cmds: diff --git a/src/plugins/__init__.py b/src/plugins/__init__.py index 5624b32..8fde4dc 100644 --- a/src/plugins/__init__.py +++ b/src/plugins/__init__.py @@ -1,3 +1,5 @@ """ Gtk Bound Plugins Module """ + +from .controller import plugins_controller diff --git a/src/plugins/plugins_controller.py b/src/plugins/controller.py similarity index 97% rename from src/plugins/plugins_controller.py rename to src/plugins/controller.py index d6bed15..588798c 100644 --- a/src/plugins/plugins_controller.py +++ b/src/plugins/controller.py @@ -47,7 +47,8 @@ class PluginsController(ControllerBase, PluginsControllerMixin, PluginReloadMixi def _controller_message(self, event: BaseEvent): - ... + for manifest_meta in self._plugin_collection: + manifest_meta.instance._controller_message(event) def _collect_search_locations(self, path: str, locations: list): locations.append(path) @@ -121,7 +122,6 @@ class PluginsController(ControllerBase, PluginsControllerMixin, PluginReloadMixi def execute_plugin(self, module: type, manifest_meta: ManifestMeta): plugin = module.Plugin() plugin.plugin_context: PluginContext = self.create_plugin_context() - plugin._controller_message: callable = self._controller_message manifest = manifest_meta.manifest manifest_meta.instance = plugin diff --git a/src/plugins/plugin_base.py b/src/plugins/plugin_base.py index eed6463..08a1ccc 100644 --- a/src/plugins/plugin_base.py +++ b/src/plugins/plugin_base.py @@ -21,7 +21,7 @@ class PluginBase: self.plugin_context: PluginContext = None - def _controller_message(self): + def _controller_message(self, event: BaseEvent): raise PluginBaseException("Plugin Base '_controller_message' must be overriden by Plugin") def load(self):