parent
6d3cf2df06
commit
9e381c4d1a
5 changed files with 58 additions and 15 deletions
|
@ -2522,6 +2522,28 @@ pub const Editor = struct {
|
|||
self.clamp();
|
||||
}
|
||||
|
||||
pub fn smart_insert_line_before(self: *Self, _: command.Context) tp.result {
|
||||
const b = self.buf_for_update() catch |e| return tp.exit_error(e);
|
||||
var root = b.root;
|
||||
for (self.cursels.items) |*cursel_| if (cursel_.*) |*cursel| {
|
||||
var leading_ws = @min(find_first_non_ws(root, cursel.cursor.row), cursel.cursor.col);
|
||||
move_cursor_begin(root, &cursel.cursor) catch |e| return tp.exit_error(e);
|
||||
root = self.insert(root, cursel, "\n", b.a) catch |e| return tp.exit_error(e);
|
||||
move_cursor_left(root, &cursel.cursor) catch |e| return tp.exit_error(e);
|
||||
var sfa = std.heap.stackFallback(512, self.a);
|
||||
const a = sfa.get();
|
||||
var stream = std.ArrayList(u8).init(a);
|
||||
defer stream.deinit();
|
||||
var writer = stream.writer();
|
||||
while (leading_ws > 0) : (leading_ws -= 1)
|
||||
_ = writer.write(" ") catch |e| return tp.exit_error(e);
|
||||
if (stream.items.len > 0)
|
||||
root = self.insert(root, cursel, stream.items, b.a) catch |e| return tp.exit_error(e);
|
||||
};
|
||||
self.update_buf(root) catch |e| return tp.exit_error(e);
|
||||
self.clamp();
|
||||
}
|
||||
|
||||
pub fn insert_line_after(self: *Self, _: command.Context) tp.result {
|
||||
const b = self.buf_for_update() catch |e| return tp.exit_error(e);
|
||||
var root = b.root;
|
||||
|
@ -2533,6 +2555,27 @@ pub const Editor = struct {
|
|||
self.clamp();
|
||||
}
|
||||
|
||||
pub fn smart_insert_line_after(self: *Self, _: command.Context) tp.result {
|
||||
const b = self.buf_for_update() catch |e| return tp.exit_error(e);
|
||||
var root = b.root;
|
||||
for (self.cursels.items) |*cursel_| if (cursel_.*) |*cursel| {
|
||||
var leading_ws = @min(find_first_non_ws(root, cursel.cursor.row), cursel.cursor.col);
|
||||
move_cursor_end(root, &cursel.cursor) catch |e| return tp.exit_error(e);
|
||||
var sfa = std.heap.stackFallback(512, self.a);
|
||||
const a = sfa.get();
|
||||
var stream = std.ArrayList(u8).init(a);
|
||||
defer stream.deinit();
|
||||
var writer = stream.writer();
|
||||
_ = writer.write("\n") catch |e| return tp.exit_error(e);
|
||||
while (leading_ws > 0) : (leading_ws -= 1)
|
||||
_ = writer.write(" ") catch |e| return tp.exit_error(e);
|
||||
if (stream.items.len > 0)
|
||||
root = self.insert(root, cursel, stream.items, b.a) catch |e| return tp.exit_error(e);
|
||||
};
|
||||
self.update_buf(root) catch |e| return tp.exit_error(e);
|
||||
self.clamp();
|
||||
}
|
||||
|
||||
pub fn enable_fast_scroll(self: *Self, _: command.Context) tp.result {
|
||||
self.fast_scroll = true;
|
||||
}
|
||||
|
|
|
@ -97,7 +97,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
'A' => self.cmd("select_all", .{}),
|
||||
'I' => self.insert_bytes("\t"),
|
||||
'/' => self.cmd("toggle_comment", .{}),
|
||||
key.ENTER => self.cmd("insert_line_after", .{}),
|
||||
key.ENTER => self.cmd("smart_insert_line_after", .{}),
|
||||
key.SPACE => self.cmd("selections_reverse", .{}),
|
||||
key.END => self.cmd("move_buffer_end", .{}),
|
||||
key.HOME => self.cmd("move_buffer_begin", .{}),
|
||||
|
@ -120,7 +120,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
'L' => self.cmd_async("toggle_logview"),
|
||||
'I' => self.cmd_async("toggle_inputview"),
|
||||
'/' => self.cmd("log_widgets", .{}),
|
||||
key.ENTER => self.cmd("insert_line_before", .{}),
|
||||
key.ENTER => self.cmd("smart_insert_line_before", .{}),
|
||||
key.END => self.cmd("select_buffer_end", .{}),
|
||||
key.HOME => self.cmd("select_buffer_begin", .{}),
|
||||
key.UP => self.cmd("select_scroll_up", .{}),
|
||||
|
@ -169,7 +169,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
key.END => self.cmd("select_end", .{}),
|
||||
key.PGUP => self.cmd("select_page_up", .{}),
|
||||
key.PGDOWN => self.cmd("select_page_down", .{}),
|
||||
key.ENTER => self.cmd("insert_line_before", .{}),
|
||||
key.ENTER => self.cmd("smart_insert_line_before", .{}),
|
||||
key.BACKSPACE => self.cmd("delete_backward", .{}),
|
||||
key.TAB => self.cmd("unindent", .{}),
|
||||
else => if (!key.synthesized_p(keypress))
|
||||
|
|
|
@ -98,7 +98,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
'A' => self.cmd("select_all", .{}),
|
||||
'I' => self.insert_bytes("\t"),
|
||||
'/' => self.cmd("toggle_comment", .{}),
|
||||
key.ENTER => self.cmd("insert_line_after", .{}),
|
||||
key.ENTER => self.cmd("smart_insert_line_after", .{}),
|
||||
key.SPACE => self.cmd("selections_reverse", .{}),
|
||||
key.END => self.cmd("move_buffer_end", .{}),
|
||||
key.HOME => self.cmd("move_buffer_begin", .{}),
|
||||
|
@ -121,7 +121,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
'L' => self.cmd_async("toggle_logview"),
|
||||
'I' => self.cmd_async("toggle_inputview"),
|
||||
'/' => self.cmd("log_widgets", .{}),
|
||||
key.ENTER => self.cmd("insert_line_before", .{}),
|
||||
key.ENTER => self.cmd("smart_insert_line_before", .{}),
|
||||
key.END => self.cmd("select_buffer_end", .{}),
|
||||
key.HOME => self.cmd("select_buffer_begin", .{}),
|
||||
key.UP => self.cmd("select_scroll_up", .{}),
|
||||
|
@ -168,7 +168,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
key.END => self.cmd("select_end", .{}),
|
||||
key.PGUP => self.cmd("select_page_up", .{}),
|
||||
key.PGDOWN => self.cmd("select_page_down", .{}),
|
||||
key.ENTER => self.cmd("insert_line_before", .{}),
|
||||
key.ENTER => self.cmd("smart_insert_line_before", .{}),
|
||||
key.BACKSPACE => self.cmd("delete_backward", .{}),
|
||||
key.TAB => self.cmd("unindent", .{}),
|
||||
else => if (!key.synthesized_p(keypress))
|
||||
|
|
|
@ -101,7 +101,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
'G' => self.cmd("enter_goto_mode", .{}),
|
||||
'A' => self.cmd("select_all", .{}),
|
||||
'/' => self.cmd("toggle_comment", .{}),
|
||||
key.ENTER => self.cmd("insert_line_after", .{}),
|
||||
key.ENTER => self.cmd("smart_insert_line_after", .{}),
|
||||
key.SPACE => self.cmd("selections_reverse", .{}),
|
||||
key.END => self.cmd("move_buffer_end", .{}),
|
||||
key.HOME => self.cmd("move_buffer_begin", .{}),
|
||||
|
@ -124,7 +124,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
'L' => self.cmd_async("toggle_logview"),
|
||||
'I' => self.cmd_async("toggle_inputview"),
|
||||
'/' => self.cmd("log_widgets", .{}),
|
||||
key.ENTER => self.cmd("insert_line_before", .{}),
|
||||
key.ENTER => self.cmd("smart_insert_line_before", .{}),
|
||||
key.END => self.cmd("select_buffer_end", .{}),
|
||||
key.HOME => self.cmd("select_buffer_begin", .{}),
|
||||
key.UP => self.cmd("select_scroll_up", .{}),
|
||||
|
@ -173,7 +173,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
key.END => self.cmd("select_end", .{}),
|
||||
key.PGUP => self.cmd("select_page_up", .{}),
|
||||
key.PGDOWN => self.cmd("select_page_down", .{}),
|
||||
key.ENTER => self.cmd("insert_line_before", .{}),
|
||||
key.ENTER => self.cmd("smart_insert_line_before", .{}),
|
||||
key.BACKSPACE => self.cmd("delete_backward", .{}),
|
||||
key.TAB => self.cmd("unindent", .{}),
|
||||
|
||||
|
@ -190,7 +190,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
try self.cmd_count("move_down", .{});
|
||||
},
|
||||
|
||||
'O' => self.seq(.{ "insert_line_before", "enter_mode" }, command.fmt(.{"vim/insert"})),
|
||||
'O' => self.seq(.{ "smart_insert_line_before", "enter_mode" }, command.fmt(.{"vim/insert"})),
|
||||
|
||||
else => {},
|
||||
},
|
||||
|
@ -252,7 +252,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
'y' => self.leader = .{ .keypress = keynormal, .modifiers = modifiers },
|
||||
|
||||
'p' => self.cmd("paste", .{}),
|
||||
'o' => self.seq(.{ "insert_line_after", "enter_mode" }, command.fmt(.{"vim/insert"})),
|
||||
'o' => self.seq(.{ "smart_insert_line_after", "enter_mode" }, command.fmt(.{"vim/insert"})),
|
||||
|
||||
key.LEFT => self.cmd("move_left", .{}),
|
||||
key.RIGHT => self.cmd("move_right", .{}),
|
||||
|
|
|
@ -101,7 +101,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
'G' => self.cmd("enter_goto_mode", .{}),
|
||||
'A' => self.cmd("select_all", .{}),
|
||||
'/' => self.cmd("toggle_comment", .{}),
|
||||
key.ENTER => self.cmd("insert_line_after", .{}),
|
||||
key.ENTER => self.cmd("smart_insert_line_after", .{}),
|
||||
key.SPACE => self.cmd("selections_reverse", .{}),
|
||||
key.END => self.cmd("select_buffer_end", .{}),
|
||||
key.HOME => self.cmd("select_buffer_begin", .{}),
|
||||
|
@ -124,7 +124,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
'L' => self.cmd_async("toggle_logview"),
|
||||
'I' => self.cmd_async("toggle_inputview"),
|
||||
'/' => self.cmd("log_widgets", .{}),
|
||||
key.ENTER => self.cmd("insert_line_before", .{}),
|
||||
key.ENTER => self.cmd("smart_insert_line_before", .{}),
|
||||
key.END => self.cmd("select_buffer_end", .{}),
|
||||
key.HOME => self.cmd("select_buffer_begin", .{}),
|
||||
key.UP => self.cmd("select_scroll_up", .{}),
|
||||
|
@ -169,7 +169,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
key.END => self.cmd("select_end", .{}),
|
||||
key.PGUP => self.cmd("select_page_up", .{}),
|
||||
key.PGDOWN => self.cmd("select_page_down", .{}),
|
||||
key.ENTER => self.cmd("insert_line_before", .{}),
|
||||
key.ENTER => self.cmd("smart_insert_line_before", .{}),
|
||||
key.BACKSPACE => self.cmd("delete_backward", .{}),
|
||||
key.TAB => self.cmd("unindent", .{}),
|
||||
|
||||
|
@ -186,7 +186,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result {
|
|||
try self.cmd_count("move_down", .{});
|
||||
},
|
||||
|
||||
'O' => self.seq(.{ "insert_line_before", "enter_mode" }, command.fmt(.{"vim/insert"})),
|
||||
'O' => self.seq(.{ "smart_insert_line_before", "enter_mode" }, command.fmt(.{"vim/insert"})),
|
||||
|
||||
else => {},
|
||||
},
|
||||
|
|
Loading…
Add table
Reference in a new issue