Merge branch 'master' into zig-0.14
This commit is contained in:
commit
8f9b2d15f7
1 changed files with 25 additions and 10 deletions
|
@ -1974,21 +1974,29 @@ pub const Editor = struct {
|
|||
return false;
|
||||
}
|
||||
|
||||
fn is_white_space(c: []const u8) bool {
|
||||
fn is_whitespace(c: []const u8) bool {
|
||||
return (c.len == 0) or (c[0] == ' ') or (c[0] == '\t');
|
||||
}
|
||||
|
||||
fn is_white_space_at_cursor(root: Buffer.Root, cursor: *const Cursor, metrics: Buffer.Metrics) bool {
|
||||
return cursor.test_at(root, is_white_space, metrics);
|
||||
fn is_whitespace_or_eol(c: []const u8) bool {
|
||||
return is_whitespace(c) or c[0] == '\n';
|
||||
}
|
||||
|
||||
fn is_whitespace_at_cursor(root: Buffer.Root, cursor: *const Cursor, metrics: Buffer.Metrics) bool {
|
||||
return cursor.test_at(root, is_whitespace, metrics);
|
||||
}
|
||||
|
||||
fn is_non_whitespace_at_cursor(root: Buffer.Root, cursor: *const Cursor, metrics: Buffer.Metrics) bool {
|
||||
return !cursor.test_at(root, is_whitespace_or_eol, metrics);
|
||||
}
|
||||
|
||||
fn is_word_boundary_left_vim(root: Buffer.Root, cursor: *const Cursor, metrics: Buffer.Metrics) bool {
|
||||
if (is_white_space_at_cursor(root, cursor, metrics)) return false;
|
||||
if (is_whitespace_at_cursor(root, cursor, metrics)) return false;
|
||||
var next = cursor.*;
|
||||
next.move_left(root, metrics) catch return true;
|
||||
|
||||
const next_is_white_space = is_white_space_at_cursor(root, &next, metrics);
|
||||
if (next_is_white_space) return true;
|
||||
const next_is_whitespace = is_whitespace_at_cursor(root, &next, metrics);
|
||||
if (next_is_whitespace) return true;
|
||||
|
||||
const curr_is_non_word = is_non_word_char_at_cursor(root, cursor, metrics);
|
||||
const next_is_non_word = is_non_word_char_at_cursor(root, &next, metrics);
|
||||
|
@ -2021,12 +2029,12 @@ pub const Editor = struct {
|
|||
}
|
||||
|
||||
fn is_word_boundary_right_vim(root: Buffer.Root, cursor: *const Cursor, metrics: Buffer.Metrics) bool {
|
||||
if (is_white_space_at_cursor(root, cursor, metrics)) return false;
|
||||
if (is_whitespace_at_cursor(root, cursor, metrics)) return false;
|
||||
var next = cursor.*;
|
||||
next.move_right(root, metrics) catch return true;
|
||||
|
||||
const next_is_white_space = is_white_space_at_cursor(root, &next, metrics);
|
||||
if (next_is_white_space) return true;
|
||||
const next_is_whitespace = is_whitespace_at_cursor(root, &next, metrics);
|
||||
if (next_is_whitespace) return true;
|
||||
|
||||
const curr_is_non_word = is_non_word_char_at_cursor(root, cursor, metrics);
|
||||
const next_is_non_word = is_non_word_char_at_cursor(root, &next, metrics);
|
||||
|
@ -2824,7 +2832,10 @@ pub const Editor = struct {
|
|||
pub fn join_next_line(self: *Self, _: Context) Result {
|
||||
const b = try self.buf_for_update();
|
||||
try self.with_cursors_const(b.root, move_cursor_end);
|
||||
const root = try self.delete_to(move_cursor_right, b.root, b.allocator);
|
||||
var root = try self.delete_to(move_cursor_right_until_non_whitespace, b.root, b.allocator);
|
||||
for (self.cursels.items) |*cursel_| if (cursel_.*) |*cursel| {
|
||||
root = try self.insert(root, cursel, " ", b.allocator);
|
||||
};
|
||||
try self.update_buf(root);
|
||||
self.clamp();
|
||||
}
|
||||
|
@ -2935,6 +2946,10 @@ pub const Editor = struct {
|
|||
try move_cursor_right(root, cursor, metrics);
|
||||
}
|
||||
|
||||
pub fn move_cursor_right_until_non_whitespace(root: Buffer.Root, cursor: *Cursor, metrics: Buffer.Metrics) error{Stop}!void {
|
||||
move_cursor_right_until(root, cursor, is_non_whitespace_at_cursor, metrics);
|
||||
}
|
||||
|
||||
pub fn move_word_left(self: *Self, _: Context) Result {
|
||||
const root = try self.buf_root();
|
||||
self.with_cursors_const(root, move_cursor_word_left) catch {};
|
||||
|
|
Loading…
Add table
Reference in a new issue