From 3d05a95c0163381f50246e5c358fe653ae03a5c5 Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Tue, 13 Oct 2026 16:21:34 -0500 Subject: [PATCH] feat: improve code completion, terminal setup, and plugin events Add interactive LSP completion with debounced requests and cancellation Support C source files in Tree-sitter parsing and code folding Fix search-and-replace selection handling Improve split-pane expansion and terminal initialization Configure custom Bash startup files and script paths Update WebKit2 requirements to version 4.1 Unify application event registration and preserve controller message results Rename the UI plugin exception and clean up event emission APIs Refine 'code' plugin 'search' field limits and related widget behavior --- src/__builtins__.py | 4 ++-- src/__main__.py | 2 +- .../code/command_system/commands/set_miniview.py | 2 +- .../code/controllers/completion_controller.py | 1 - src/core/widgets/vte_widget.py | 2 +- src/core/widgets/webkit/webkit_ui.py | 2 +- src/libs/controllers/controller_base.py | 4 +++- src/libs/event_factory.py | 7 ++++--- src/libs/mixins/ipc_signals_mixin.py | 8 ++++---- src/libs/settings/webkit/webkit_ui_settings.py | 2 +- src/plugins/plugin_types/plugin_code.py | 6 +++--- src/plugins/plugin_types/plugin_ui.py | 14 +++++++------- 12 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/__builtins__.py b/src/__builtins__.py index ecdfe3c..4aafda5 100644 --- a/src/__builtins__.py +++ b/src/__builtins__.py @@ -70,7 +70,7 @@ def custom_except_hook(exc_type, exc_value, exc_traceback): sys.__excepthook__(exc_type, exc_value, exc_traceback) sys.__excepthook__(exc_type, exc_value, exc_traceback) return -# + logger.error("Uncaught exception", exc_info = (exc_type, exc_value, exc_traceback)) -# + sys.excepthook = custom_except_hook \ No newline at end of file diff --git a/src/__main__.py b/src/__main__.py index c7db4e4..0feb1a9 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -4,12 +4,12 @@ import argparse import faulthandler import traceback -from setproctitle import setproctitle import tracemalloc tracemalloc.start() # Lib imports +from setproctitle import setproctitle # Application imports from __builtins__ import * diff --git a/src/core/widgets/code/command_system/commands/set_miniview.py b/src/core/widgets/code/command_system/commands/set_miniview.py index 67396a5..2a064c8 100644 --- a/src/core/widgets/code/command_system/commands/set_miniview.py +++ b/src/core/widgets/code/command_system/commands/set_miniview.py @@ -17,4 +17,4 @@ def execute( **kwargs ): logger.debug("Command: Set MiniView") - event_system.emit("set-mini-view", (view,)) + event_system.emit("set-mini-view", (view, )) diff --git a/src/core/widgets/code/controllers/completion_controller.py b/src/core/widgets/code/controllers/completion_controller.py index f714511..2f478d5 100644 --- a/src/core/widgets/code/controllers/completion_controller.py +++ b/src/core/widgets/code/controllers/completion_controller.py @@ -4,7 +4,6 @@ import gi gi.require_version('GtkSource', '4') -from gi.repository import GLib from gi.repository import GtkSource # Application imports diff --git a/src/core/widgets/vte_widget.py b/src/core/widgets/vte_widget.py index 888c75d..6fbde45 100644 --- a/src/core/widgets/vte_widget.py +++ b/src/core/widgets/vte_widget.py @@ -88,7 +88,7 @@ class VteWidget(Vte.Terminal): self.spawn_async( Vte.PtyFlags.DEFAULT, settings_manager.path_manager.get_home_path(), - ["/bin/bash"], + ["/bin/bash", "--rcfile", f"{settings_manager.path_manager.get_home_path()}/.bashrc", "-i"], env, GLib.SpawnFlags.DEFAULT, None, None, -1, None, None, diff --git a/src/core/widgets/webkit/webkit_ui.py b/src/core/widgets/webkit/webkit_ui.py index 69d7faf..4f52bd9 100644 --- a/src/core/widgets/webkit/webkit_ui.py +++ b/src/core/widgets/webkit/webkit_ui.py @@ -5,7 +5,7 @@ import json # Lib imports import gi gi.require_version('Gdk', '3.0') -gi.require_version('WebKit2', '4.0') +gi.require_version('WebKit2', '4.1') from gi.repository import Gdk from gi.repository import Gtk from gi.repository import Gio diff --git a/src/libs/controllers/controller_base.py b/src/libs/controllers/controller_base.py index 3997ba6..53ce236 100644 --- a/src/libs/controllers/controller_base.py +++ b/src/libs/controllers/controller_base.py @@ -37,8 +37,10 @@ class ControllerBase(Singleton, EmitDispatcher): return self.controller_message_bus.message_to(name, event) def message_to_selected(self, names: list[str], event: BaseEvent): - for name in names: + return [ self.controller_message_bus.message_to_selected(name, event) + for name in names + ] def register_controller(self, name: str, controller): self.controller_message_bus.register_controller(name, controller) diff --git a/src/libs/event_factory.py b/src/libs/event_factory.py index e8ccc43..5dc1e93 100644 --- a/src/libs/event_factory.py +++ b/src/libs/event_factory.py @@ -31,7 +31,7 @@ class EventFactory(Singleton): event_type = self._class_name_to_event_type(name) self._event_classes[event_type] = obj - Code_Event_Types.add_event_class(name, obj) + App_Event_Types.add_event_class(name, obj) i += 1 logger.debug(f"Registered {i} event types:") @@ -44,7 +44,7 @@ class EventFactory(Singleton): event_type = self._class_name_to_event_type(name) del self._event_classes[event_type] - Code_Event_Types.remove_event_class(name) + App_Event_Types.remove_event_class(name) i += 1 logger.debug(f"Unregistered {i} event types:") @@ -98,6 +98,7 @@ class EventNamespace: -Code_Event_Types = EventNamespace() +App_Event_Types = EventNamespace() +Code_Event_Types = App_Event_Types Event_Factory = EventFactory() diff --git a/src/libs/mixins/ipc_signals_mixin.py b/src/libs/mixins/ipc_signals_mixin.py index 30bd167..024ecf4 100644 --- a/src/libs/mixins/ipc_signals_mixin.py +++ b/src/libs/mixins/ipc_signals_mixin.py @@ -18,20 +18,20 @@ class IPCSignalsMixin: def handle_file_from_ipc(self, fpath: str) -> None: logger.debug(f"File From IPC: {fpath}") GLib.idle_add( - self.broadcast_message, "handle-file", (fpath,) + self.broadcast_message, "handle-file", (fpath, ) ) def handle_files_from_ipc(self, uris: list) -> None: logger.debug(f"Files From IPC: {uris}") GLib.idle_add( - self.broadcast_message, "handle-files", (uris,) + self.broadcast_message, "handle-files", (uris, ) ) def handle_dir_from_ipc(self, fpath: str) -> None: logger.debug(f"Dir From IPC: {fpath}") GLib.idle_add( - self.broadcast_message, "handle-folder", (fpath,) + self.broadcast_message, "handle-folder", (fpath, ) ) def broadcast_message(self, message_type: str = "none", data: () = ()) -> None: - event_system.emit(message_type, data) \ No newline at end of file + event_system.emit(message_type, data) diff --git a/src/libs/settings/webkit/webkit_ui_settings.py b/src/libs/settings/webkit/webkit_ui_settings.py index 0351fc6..ae03366 100644 --- a/src/libs/settings/webkit/webkit_ui_settings.py +++ b/src/libs/settings/webkit/webkit_ui_settings.py @@ -2,7 +2,7 @@ # Lib imports import gi -gi.require_version('WebKit2', '4.0') +gi.require_version('WebKit2', '4.1') from gi.repository import WebKit2 # Application imports diff --git a/src/plugins/plugin_types/plugin_code.py b/src/plugins/plugin_types/plugin_code.py index 3c6188d..3106eaf 100644 --- a/src/plugins/plugin_types/plugin_code.py +++ b/src/plugins/plugin_types/plugin_code.py @@ -41,10 +41,10 @@ class PluginCode(PluginBase): return self.plugin_context.request_ui_element(element_id) def emit(self, event: BaseEvent): - return self.plugin_context.emit(event) + self.plugin_context.emit(event) def emit_to(self, name: str, event: BaseEvent): - return self.plugin_context.emit_to(name, event) + self.plugin_context.emit_to(name, event) def emit_to_selected(self, names: list[str], event: BaseEvent): - return self.plugin_context.emit_to_selected(names, event) + self.plugin_context.emit_to_selected(names, event) diff --git a/src/plugins/plugin_types/plugin_ui.py b/src/plugins/plugin_types/plugin_ui.py index f09e09f..46ae04a 100644 --- a/src/plugins/plugin_types/plugin_ui.py +++ b/src/plugins/plugin_types/plugin_ui.py @@ -10,7 +10,7 @@ from .plugin_base import PluginBase -class PluginCodeException(Exception): +class PluginUIException(Exception): ... @@ -23,22 +23,22 @@ class PluginUI(PluginBase): def _controller_message(self, event: BaseEvent): - raise PluginCodeException("Plugin UI '_controller_message' must be overriden by Plugin") + raise PluginUIException("Plugin UI '_controller_message' must be overriden by Plugin") def load(self): - raise PluginCodeException("Plugin UI 'load' must be overriden by Plugin") + raise PluginUIException("Plugin UI 'load' must be overriden by Plugin") def run(self): - raise PluginCodeException("Plugin UI 'run' must be overriden by Plugin") + raise PluginUIException("Plugin UI 'run' must be overriden by Plugin") def request_ui_element(self, element_id: str): return self.plugin_context.request_ui_element(element_id) def emit(self, event: BaseEvent): - return self.plugin_context.emit(event) + self.plugin_context.emit(event) def emit_to(self, name: str, event: BaseEvent): - return self.plugin_context.emit_to(name, event) + self.plugin_context.emit_to(name, event) def emit_to_selected(self, names: list[str], event: BaseEvent): - return self.plugin_context.emit_to_selected(names, event) + self.plugin_context.emit_to_selected(names, event)