generated from itdominator/Python-With-Gtk-Template
Fixed new line indenting logic
This commit is contained in:
parent
d90ed2fdc8
commit
a449ca6807
@ -94,12 +94,19 @@ class MarkEventsMixin:
|
|||||||
self.end_user_action(buffer)
|
self.end_user_action(buffer)
|
||||||
|
|
||||||
def _new_line_on_multi_line_markers(self, buffer):
|
def _new_line_on_multi_line_markers(self, buffer):
|
||||||
self.insert_indent_handler(buffer)
|
self.freeze_multi_line_insert = True
|
||||||
|
|
||||||
|
iter = buffer.get_iter_at_mark( buffer.get_insert() )
|
||||||
|
|
||||||
|
self._base_indent(buffer, iter)
|
||||||
|
self.insert_indent_handler(buffer, iter)
|
||||||
|
|
||||||
for mark in self._multi_insert_marks:
|
for mark in self._multi_insert_marks:
|
||||||
iter = buffer.get_iter_at_mark(mark)
|
iter = buffer.get_iter_at_mark(mark)
|
||||||
|
self._base_indent(buffer, iter)
|
||||||
self.insert_indent_handler(buffer, iter)
|
self.insert_indent_handler(buffer, iter)
|
||||||
|
|
||||||
|
self.freeze_multi_line_insert = False
|
||||||
self.end_user_action(buffer)
|
self.end_user_action(buffer)
|
||||||
|
|
||||||
def insert_indent_handler(self, buffer, iter = None):
|
def insert_indent_handler(self, buffer, iter = None):
|
||||||
@ -107,17 +114,20 @@ class MarkEventsMixin:
|
|||||||
iter = buffer.get_iter_at_mark( buffer.get_insert() )
|
iter = buffer.get_iter_at_mark( buffer.get_insert() )
|
||||||
|
|
||||||
iter_copy = iter.copy()
|
iter_copy = iter.copy()
|
||||||
iter_moved = iter_copy.backward_char()
|
iter_copy.backward_sentence_start()
|
||||||
|
iter_copy.forward_sentence_end()
|
||||||
|
iter_copy.backward_char()
|
||||||
|
|
||||||
if iter_moved:
|
|
||||||
_char = iter_copy.get_char()
|
_char = iter_copy.get_char()
|
||||||
self._base_indent(buffer, iter, iter_copy)
|
|
||||||
if _char in ["{", ":"]:
|
if _char in ["{", ":"]:
|
||||||
self._indent_deeper(buffer, iter)
|
self._indent_deeper(buffer, iter)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _base_indent(self, buffer, iter, iter_copy):
|
def _base_indent(self, buffer, iter, iter_copy = None):
|
||||||
|
if not iter_copy:
|
||||||
|
iter_copy = iter.copy()
|
||||||
|
|
||||||
line_num = iter_copy.get_line()
|
line_num = iter_copy.get_line()
|
||||||
iter_copy = buffer.get_iter_at_line(line_num)
|
iter_copy = buffer.get_iter_at_line(line_num)
|
||||||
|
|
||||||
|
@ -83,6 +83,7 @@ class SourceView(SourceViewEventsMixin, GtkSource.View):
|
|||||||
|
|
||||||
self.connect("drag-data-received", self._on_drag_data_received)
|
self.connect("drag-data-received", self._on_drag_data_received)
|
||||||
self.connect("key-press-event", self._key_press_event)
|
self.connect("key-press-event", self._key_press_event)
|
||||||
|
self.connect("key-release-event", self._key_release_event)
|
||||||
self.connect("button-press-event", self._button_press_event)
|
self.connect("button-press-event", self._button_press_event)
|
||||||
self.connect("scroll-event", self._scroll_event)
|
self.connect("scroll-event", self._scroll_event)
|
||||||
|
|
||||||
@ -182,21 +183,31 @@ class SourceView(SourceViewEventsMixin, GtkSource.View):
|
|||||||
with buffer.freeze_notify():
|
with buffer.freeze_notify():
|
||||||
GLib.idle_add(self._delete_on_multi_line_markers, *(buffer,))
|
GLib.idle_add(self._delete_on_multi_line_markers, *(buffer,))
|
||||||
|
|
||||||
if keyname in {"Return", "Enter"}:
|
|
||||||
self.begin_user_action(buffer)
|
|
||||||
with buffer.freeze_notify():
|
|
||||||
GLib.idle_add(self._new_line_on_multi_line_markers, *(buffer,))
|
|
||||||
else:
|
|
||||||
...
|
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if keyname in {"Return", "Enter"}:
|
|
||||||
return self.insert_indent_handler(buffer)
|
|
||||||
|
|
||||||
# NOTE: if a plugin recieves the call and handles, it will be the final decider for propigation
|
# NOTE: if a plugin recieves the call and handles, it will be the final decider for propigation
|
||||||
return event_system.emit_and_await("autopairs", (keyname, is_control, is_alt, is_shift))
|
return event_system.emit_and_await("autopairs", (keyname, is_control, is_alt, is_shift))
|
||||||
|
|
||||||
|
def _key_release_event(self, widget, eve):
|
||||||
|
if self.freeze_multi_line_insert: return
|
||||||
|
|
||||||
|
keyname = Gdk.keyval_name(eve.keyval)
|
||||||
|
modifiers = Gdk.ModifierType(eve.get_state() & ~Gdk.ModifierType.LOCK_MASK)
|
||||||
|
is_control = True if modifiers & Gdk.ModifierType.CONTROL_MASK else False
|
||||||
|
is_shift = True if modifiers & Gdk.ModifierType.SHIFT_MASK else False
|
||||||
|
buffer = self.get_buffer()
|
||||||
|
|
||||||
|
if keyname in {"Return", "Enter"}:
|
||||||
|
if len(self._multi_insert_marks) > 0:
|
||||||
|
self.begin_user_action(buffer)
|
||||||
|
with buffer.freeze_notify():
|
||||||
|
GLib.idle_add(self._new_line_on_multi_line_markers, *(buffer,))
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
has_selection = buffer.get_has_selection()
|
||||||
|
if not has_selection:
|
||||||
|
return self.insert_indent_handler(buffer)
|
||||||
|
|
||||||
def _button_press_event(self, widget = None, eve = None, user_data = None):
|
def _button_press_event(self, widget = None, eve = None, user_data = None):
|
||||||
if eve.type == Gdk.EventType.BUTTON_PRESS and eve.button == 1 : # l-click
|
if eve.type == Gdk.EventType.BUTTON_PRESS and eve.button == 1 : # l-click
|
||||||
@ -286,3 +297,6 @@ class SourceView(SourceViewEventsMixin, GtkSource.View):
|
|||||||
gfile = Gio.File.new_for_path(uri)
|
gfile = Gio.File.new_for_path(uri)
|
||||||
|
|
||||||
event_system.emit('create_view', (gfile,))
|
event_system.emit('create_view', (gfile,))
|
||||||
|
|
||||||
|
def get_filetype(self):
|
||||||
|
return self._current_filetype
|
Loading…
Reference in New Issue
Block a user