Added undo, redo, go-to, and duplicate lines commands; updated styles for line highlight color; cleanup

This commit is contained in:
2025-12-29 02:20:55 -06:00
parent 5ee587e205
commit 79375d34b1
15 changed files with 260 additions and 8 deletions

View File

@@ -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("Buffer Redo Command")
buffer = view.get_buffer()
undo_manager = buffer.get_undo_manager()
if undo_manager.can_redo():
buffer.redo()

View File

@@ -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("Buffer Undo Command")
buffer = view.get_buffer()
undo_manager = buffer.get_undo_manager()
if undo_manager.can_undo():
buffer.undo()

View File

@@ -0,0 +1,53 @@
# 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("Duplicate Line Command")
buffer = view.get_buffer()
if not buffer.get_has_selection():
had_selection = False
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()
else:
had_selection = True
start_itr, end_itr = buffer.get_selection_bounds()
sline = start_itr.get_line()
eline = end_itr.get_line()
start_line = eline + 1
start_char = start_itr.get_line_offset()
end_char = end_itr.get_line_offset()
range_line_size = eline - sline
start_itr.backward_visible_line()
start_itr.forward_line()
end_itr.forward_line()
end_itr.backward_char()
line_str = buffer.get_slice(start_itr, end_itr, True)
end_itr.forward_char()
buffer.insert(end_itr, f"{line_str}\n", -1)
if not had_selection:
new_itr = buffer.get_iter_at_line_offset(start_line, start_char)
buffer.place_cursor(new_itr)
else:
new_itr = buffer.get_iter_at_line_offset(start_line, start_char)
new_end_itr = buffer.get_iter_at_line_offset((start_line + range_line_size), end_char)
buffer.select_range(new_itr, new_end_itr)

View File

@@ -17,4 +17,3 @@ def execute(
logger.debug("Focus Left Sibling Command")
if not view.sibling_left: return
view.sibling_left.grab_focus()
view.sibling_left.command.exec("set_miniview")

View File

@@ -17,4 +17,3 @@ def execute(
logger.debug("Focus Right Sibling Command")
if not view.sibling_right: return
view.sibling_right.grab_focus()
view.sibling_right.command.exec("set_miniview")

View File

@@ -0,0 +1,20 @@
# 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("Get Current File Command")
buffer = view.get_buffer()
return view.files_manager.get_file(buffer)

View File

@@ -0,0 +1,21 @@
# 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("Get Text Command")
buffer = view.get_buffer()
start_itr, end_itr = buffer.get_bounds()
return buffer.get_text(start_itr, end_itr, True)

View File

@@ -0,0 +1,31 @@
# 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("Go-To Command")
file = view.command.exec("get_current_file")
gfile = file.get_location()
uri = gfile.get_uri()
buffer = view.get_buffer()
iter = buffer.get_iter_at_mark( buffer.get_insert() )
line = iter.get_line()
offset = iter.get_line_offset()
event_system.emit(
"textDocument/definition",
(view, file.ftype, uri, line, offset,)
)

View File

@@ -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,
language: str
):
logger.debug("Set Buffer Language Command")
buffer = editor.get_buffer()
buffer.set_language(
view.language_manager.get_language(language)
)

View File

@@ -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,
style: str
):
logger.debug("Set Buffer Style Command")
buffer = editor.get_buffer()
buffer.set_style_scheme(
view.style_scheme_manager.get_scheme(style)
)

View File

@@ -0,0 +1,21 @@
# 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("Get File Type Command")
buffer = view.get_buffer()
file = view.files_manager.get_file(buffer)
return file.ftype

View File

@@ -86,9 +86,8 @@ class SourceFile(GtkSource.File, ObservableMixin):
if not gfile: return
with open(gfile.get_path(), 'w') as f:
start_itr = self.buffer.get_start_iter()
end_itr = self.buffer.get_end_iter()
text = self.buffer.get_text(start_itr, end_itr, True)
start_itr, end_itr = self.buffer.get_bounds()
text = self.buffer.get_text(start_itr, end_itr, True)
f.write(text)
@@ -99,9 +98,12 @@ class SourceFile(GtkSource.File, ObservableMixin):
if not gfile: return
self.set_path(gfile)
data = gfile.load_bytes()[0].get_data().decode("UTF-8")
data = gfile.load_bytes()[0].get_data().decode("UTF-8")
undo_manager = self.buffer.get_undo_manager()
undo_manager.begin_not_undoable_action()
self.buffer.insert_at_cursor(data)
undo_manager.end_not_undoable_action()
def set_path(self, gfile: Gio.File):
if not gfile: return

View File

@@ -18,12 +18,24 @@
"cut_to_temp_buffer": {
"held": "<Control>k"
},
"duplicate_line": {
"held": "<Control>d"
},
"go_to": {
"released": "<Control>g"
},
"paste_temp_buffer": {
"held": "<Control>u"
},
"new_file": {
"released": "<Control>t"
},
"buffer_undo": {
"held": "<Control>z"
},
"buffer_redo": {
"held": "<Control>y"
},
"open_files": {
"released": "<Control>o"
},

View File

@@ -2,7 +2,8 @@
<author> ITDominator</author>
<description>An attempted clone of Dayle Rees' Peacocks In Space theme.</description>
<style name="current-line" background="#2b303b" />
<!--<style name="current-line" background="#2b303b" />-->
<style name="current-line" background="#44475a" />
<style name="current-line-number" background="#f7b83d" />
<style name="draw-spaces" foreground="#babdb6" />
<style name="background-pattern" background="#6e7a94" />

View File

@@ -2,7 +2,8 @@
<author> ITDominator</author>
<description>An homage to Dayle Rees' Peacocks In Space theme.</description>
<style name="current-line" background="#2b303b" />
<!--<style name="current-line" background="#2b303b" />-->
<style name="current-line" background="#44475a" />
<style name="current-line-number" background="#f7b83d" />
<style name="draw-spaces" foreground="#babdb6" />
<style name="background-pattern" background="#6e7a94" />