diff --git a/src/core/widgets/code/commands/cut_to_temp_buffer.py b/src/core/widgets/code/commands/cut_to_temp_buffer.py new file mode 100644 index 0000000..572e190 --- /dev/null +++ b/src/core/widgets/code/commands/cut_to_temp_buffer.py @@ -0,0 +1,36 @@ +# Python imports + +# Lib imports +import gi + +gi.require_version('GtkSource', '4') + +from gi.repository import GtkSource + +# Application imports + + + +def execute( + view: GtkSource.View = None +): + logger.debug("Cut to Temp Buffer Command") + + view.clear_temp_cut_buffer_delayed() + + buffer = view.get_buffer() + itr = buffer.get_iter_at_mark( buffer.get_insert() ) + start_itr = itr.copy() + end_itr = itr.copy() + start_line = itr.get_line() + 1 + start_char = itr.get_line_offset() + + start_itr.backward_visible_line() + start_itr.forward_line() + end_itr.forward_line() + + line_str = buffer.get_slice(start_itr, end_itr, True) + view._cut_buffer += f"{line_str}" + buffer.delete(start_itr, end_itr) + + view.set_temp_cut_buffer_delayed() diff --git a/src/core/widgets/code/commands/paste_temp_buffer.py b/src/core/widgets/code/commands/paste_temp_buffer.py new file mode 100644 index 0000000..30d28ed --- /dev/null +++ b/src/core/widgets/code/commands/paste_temp_buffer.py @@ -0,0 +1,28 @@ +# Python imports + +# Lib imports +import gi + +gi.require_version('GtkSource', '4') + +from gi.repository import GLib +from gi.repository import GtkSource + +# Application imports + + + +def execute( + view: GtkSource.View = None +): + logger.debug("Paste Temp Buffer Command") + + view.clear_temp_cut_buffer_delayed() + + buffer = view.get_buffer() + itr = buffer.get_iter_at_mark( buffer.get_insert() ) + insert_itr = itr.copy() + + buffer.insert(insert_itr, view._cut_buffer, -1) + + view.set_temp_cut_buffer_delayed() diff --git a/src/core/widgets/code/commands/zoom_in.py b/src/core/widgets/code/commands/zoom_in.py new file mode 100644 index 0000000..2590bd5 --- /dev/null +++ b/src/core/widgets/code/commands/zoom_in.py @@ -0,0 +1,23 @@ +# Python imports + +# Lib imports +import gi + +gi.require_version('GtkSource', '4') + +from gi.repository import GtkSource + +# Application imports + + + +def execute( + view: GtkSource.View = None +): + logger.debug("Zoom In Command") + + ctx = view.get_style_context() + if view.zoom_level < 99: + ctx.remove_class(f"px{view.zoom_level}") + view.zoom_level += 1 + ctx.add_class(f"px{view.zoom_level}") \ No newline at end of file diff --git a/src/core/widgets/code/commands/zoom_out.py b/src/core/widgets/code/commands/zoom_out.py new file mode 100644 index 0000000..611905d --- /dev/null +++ b/src/core/widgets/code/commands/zoom_out.py @@ -0,0 +1,23 @@ +# Python imports + +# Lib imports +import gi + +gi.require_version('GtkSource', '4') + +from gi.repository import GtkSource + +# Application imports + + + +def execute( + view: GtkSource.View = None +): + logger.debug("Zoom Out Command") + + ctx = view.get_style_context() + if view.zoom_level > 1: + ctx.remove_class(f"px{view.zoom_level}") + view.zoom_level -= 1 + ctx.add_class(f"px{view.zoom_level}") \ No newline at end of file diff --git a/src/core/widgets/code/tab_widget.py b/src/core/widgets/code/tab_widget.py index 8e5ea63..cb3ab07 100644 --- a/src/core/widgets/code/tab_widget.py +++ b/src/core/widgets/code/tab_widget.py @@ -13,8 +13,7 @@ class TabWidget(Gtk.Box): def __init__(self): super(TabWidget, self).__init__() - self._handler_ids: list = [] - self.file = None + self.file = None self._setup_styling() self._setup_signals() @@ -51,14 +50,12 @@ class TabWidget(Gtk.Box): self.add(self.close_btn) def __del__(self): - for handle_id in self._handler_ids: - self.disconnect(handle_id) del self.file + self._label_eve_box.disconnect(self._label_eve_box_id) + self.close_btn.disconnect(self.close_btn_id) def set_select_signal(self, callback): - _id = self._label_eve_box.connect('button-release-event', callback, self.file) - self._handler_ids.append(_id) + self._label_eve_box_id = self._label_eve_box.connect('button-release-event', callback, self.file) def set_close_signal(self, callback): - _id = self.close_btn.connect('button-release-event', callback, self.file) - self._handler_ids.append(_id) + self.close_btn_id = self.close_btn.connect('button-release-event', callback, self.file) diff --git a/src/core/widgets/code/view.py b/src/core/widgets/code/view.py index e21f359..6fdfd99 100644 --- a/src/core/widgets/code/view.py +++ b/src/core/widgets/code/view.py @@ -26,7 +26,9 @@ class SourceView(GtkSource.View, ObservableMixin, SourceViewEventsMixin, SourceV def __init__(self): super(SourceView, self).__init__() - self.observers = [] + self.observers = [] + self._cut_temp_timeout_id = None + self._cut_buffer = "" self.sibling_right = None self.sibling_left = None @@ -38,8 +40,11 @@ class SourceView(GtkSource.View, ObservableMixin, SourceViewEventsMixin, SourceV def _setup_styles(self): - ctx = self.get_style_context() + self.zoom_level = settings_manager.settings.theming.default_zoom + ctx = self.get_style_context() + ctx.add_class("source-view") + ctx.add_class(f"px{self.zoom_level}") self.set_vexpand(True) self.set_bottom_margin(800) @@ -111,3 +116,15 @@ class SourceView(GtkSource.View, ObservableMixin, SourceViewEventsMixin, SourceV def set_files_manager(self, files_manager: SourceFilesManager): self.files_manager = files_manager self.files_manager.add_observer(self) + + def clear_temp_cut_buffer_delayed(self): + if self._cut_temp_timeout_id: + GLib.source_remove(self._cut_temp_timeout_id) + + def set_temp_cut_buffer_delayed(self): + def clear_temp_buffer(): + self._cut_buffer = "" + self._cut_temp_timeout_id = None + return False + + self._cut_temp_timeout_id = GLib.timeout_add(15000, clear_temp_buffer) diff --git a/user_config/usr/share/app_name/code-key-bindings.json b/user_config/usr/share/app_name/code-key-bindings.json index 549b02a..bd790a1 100644 --- a/user_config/usr/share/app_name/code-key-bindings.json +++ b/user_config/usr/share/app_name/code-key-bindings.json @@ -9,6 +9,18 @@ "line_down": { "held": "Down" }, + "zoom_in": { + "held": "equal" + }, + "zoom_out": { + "held": "minus" + }, + "cut_to_temp_buffer": { + "held": "k" + }, + "paste_temp_buffer": { + "held": "u" + }, "new_file": { "released": "t" },