refactor: run triggers on delete events
This commit is contained in:
parent
12159edfcf
commit
1b9bb31a59
1 changed files with 12 additions and 11 deletions
|
|
@ -2272,8 +2272,9 @@ pub const Editor = struct {
|
||||||
cursel.cursor = sel.begin;
|
cursel.cursor = sel.begin;
|
||||||
cursel.disable_selection_normal();
|
cursel.disable_selection_normal();
|
||||||
var size: usize = 0;
|
var size: usize = 0;
|
||||||
const root_ = try root.delete_range(sel, allocator, &size, self.metrics);
|
const root_, const trigger_char = try root.delete_range_char(sel, allocator, &size, self.metrics);
|
||||||
self.nudge_delete(sel, cursel, size);
|
self.nudge_delete(sel, cursel, size);
|
||||||
|
if (trigger_char) |char| self.run_triggers(char, .delete);
|
||||||
return root_;
|
return root_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2852,7 +2853,7 @@ pub const Editor = struct {
|
||||||
cursor.row, cursor.col, root_ = try root_.insert_chars(cursor.row, cursor.col, s, allocator, self.metrics);
|
cursor.row, cursor.col, root_ = try root_.insert_chars(cursor.row, cursor.col, s, allocator, self.metrics);
|
||||||
cursor.target = cursor.col;
|
cursor.target = cursor.col;
|
||||||
self.nudge_insert(.{ .begin = begin, .end = cursor.* }, cursel, s.len);
|
self.nudge_insert(.{ .begin = begin, .end = cursor.* }, cursel, s.len);
|
||||||
if (s.len == 1) self.run_insert_triggers(s[0]);
|
if (s.len == 1) self.run_triggers(s[0], .insert);
|
||||||
return root_;
|
return root_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -6214,19 +6215,19 @@ pub const Editor = struct {
|
||||||
self.need_render();
|
self.need_render();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_symbol_trigger(self: *Self, char: u8, command_: command.ID, event: TriggerEvent) error{OutOfMemory}!void {
|
fn get_event_triggers(self: *Self, event: TriggerEvent) *std.ArrayList(TriggerSymbol) {
|
||||||
const triggers = switch (event) {
|
return switch (event) {
|
||||||
.insert => &self.insert_triggers,
|
.insert => &self.insert_triggers,
|
||||||
.delete => &self.delete_triggers,
|
.delete => &self.delete_triggers,
|
||||||
};
|
};
|
||||||
(try triggers.addOne()).* = .{ char, command_ };
|
}
|
||||||
|
|
||||||
|
pub fn add_symbol_trigger(self: *Self, char: u8, command_: command.ID, event: TriggerEvent) error{OutOfMemory}!void {
|
||||||
|
(try self.get_event_triggers(event).addOne()).* = .{ char, command_ };
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn remove_symbol_trigger(self: *Self, char: u8, command_: command.ID, event: TriggerEvent) bool {
|
pub fn remove_symbol_trigger(self: *Self, char: u8, command_: command.ID, event: TriggerEvent) bool {
|
||||||
const triggers = switch (event) {
|
const triggers = self.get_event_triggers(event);
|
||||||
.insert => &self.insert_triggers,
|
|
||||||
.delete => &self.delete_triggers,
|
|
||||||
};
|
|
||||||
for (triggers.items, 0..) |item, i| if (item.char == char and item.command == command_) {
|
for (triggers.items, 0..) |item, i| if (item.char == char and item.command == command_) {
|
||||||
_ = triggers.orderedRemove(i);
|
_ = triggers.orderedRemove(i);
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -6234,12 +6235,12 @@ pub const Editor = struct {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_insert_triggers(self: *Self, char: u8) void {
|
pub fn run_triggers(self: *Self, char: u8, event: TriggerEvent) void {
|
||||||
switch (char) {
|
switch (char) {
|
||||||
'\n', '\t', ' ' => return,
|
'\n', '\t', ' ' => return,
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
for (self.insert_triggers.items) |item| if (item.char == char)
|
for (self.get_event_triggers(event).items) |item| if (item.char == char)
|
||||||
tp.self_pid().send(.{ "cmd", item.command, .{[_]u8{char}} }) catch {};
|
tp.self_pid().send(.{ "cmd", item.command, .{[_]u8{char}} }) catch {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue