Merge branch 'master' into zig-0.14
This commit is contained in:
		
						commit
						64ccbd3c14
					
				
					 2 changed files with 203 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -2030,6 +2030,14 @@ pub const Editor = struct {
 | 
			
		|||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn is_eol_vim(root: Buffer.Root, cursor: *const Cursor, metrics: Buffer.Metrics) bool {
 | 
			
		||||
        const line_width = root.line_width(cursor.row, metrics) catch return true;
 | 
			
		||||
        if (line_width == 0) return true;
 | 
			
		||||
        if (cursor.col >= line_width)
 | 
			
		||||
            return true;
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn move_cursor_left(root: Buffer.Root, cursor: *Cursor, metrics: Buffer.Metrics) error{Stop}!void {
 | 
			
		||||
        try cursor.move_left(root, metrics);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -2071,14 +2079,28 @@ pub const Editor = struct {
 | 
			
		|||
        cursor.move_end(root, metrics);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn move_cursor_end_vim(root: Buffer.Root, cursor: *Cursor, metrics: Buffer.Metrics) !void {
 | 
			
		||||
        move_cursor_right_until(root, cursor, is_eol_vim, metrics);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn move_cursor_up(root: Buffer.Root, cursor: *Cursor, metrics: Buffer.Metrics) !void {
 | 
			
		||||
        try cursor.move_up(root, metrics);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn move_cursor_up_vim(root: Buffer.Root, cursor: *Cursor, metrics: Buffer.Metrics) !void {
 | 
			
		||||
        try cursor.move_up(root, metrics);
 | 
			
		||||
        if(is_eol_vim(root, cursor, metrics)) try move_cursor_left_vim(root, cursor, metrics);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn move_cursor_down(root: Buffer.Root, cursor: *Cursor, metrics: Buffer.Metrics) !void {
 | 
			
		||||
        try cursor.move_down(root, metrics);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn move_cursor_down_vim(root: Buffer.Root, cursor: *Cursor, metrics: Buffer.Metrics) !void {
 | 
			
		||||
        try cursor.move_down(root, metrics);
 | 
			
		||||
        if(is_eol_vim(root, cursor, metrics)) try move_cursor_left_vim(root, cursor, metrics);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn move_cursor_buffer_begin(_: Buffer.Root, cursor: *Cursor, _: Buffer.Metrics) !void {
 | 
			
		||||
        cursor.move_buffer_begin();
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -2099,10 +2121,20 @@ pub const Editor = struct {
 | 
			
		|||
        cursor.move_half_page_up(root, view, metrics);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn move_cursor_half_page_up_vim(root: Buffer.Root, cursor: *Cursor, view: *const View, metrics: Buffer.Metrics) !void {
 | 
			
		||||
        cursor.move_half_page_up(root, view, metrics);
 | 
			
		||||
        if(is_eol_vim(root, cursor, metrics)) try move_cursor_left_vim(root, cursor, metrics);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn move_cursor_half_page_down(root: Buffer.Root, cursor: *Cursor, view: *const View, metrics: Buffer.Metrics) !void {
 | 
			
		||||
        cursor.move_half_page_down(root, view, metrics);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn move_cursor_half_page_down_vim(root: Buffer.Root, cursor: *Cursor, view: *const View, metrics: Buffer.Metrics) !void {
 | 
			
		||||
        cursor.move_half_page_down(root, view, metrics);
 | 
			
		||||
        if(is_eol_vim(root, cursor, metrics)) try move_cursor_left_vim(root, cursor, metrics);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn primary_click(self: *Self, y: c_int, x: c_int) !void {
 | 
			
		||||
        const root = self.buf_root() catch return;
 | 
			
		||||
        if (self.fast_scroll) {
 | 
			
		||||
| 
						 | 
				
			
			@ -2739,6 +2771,15 @@ pub const Editor = struct {
 | 
			
		|||
    }
 | 
			
		||||
    pub const delete_to_end_meta: Meta = .{ .description = "Delete to end of line" };
 | 
			
		||||
 | 
			
		||||
    pub fn cut_to_end_vim(self: *Self, _: Context) Result {
 | 
			
		||||
        const b = try self.buf_for_update();
 | 
			
		||||
        const text, const root = try self.cut_to(move_cursor_end_vim, b.root);
 | 
			
		||||
        self.set_clipboard_internal(text);
 | 
			
		||||
        try self.update_buf(root);
 | 
			
		||||
        self.clamp();
 | 
			
		||||
    }
 | 
			
		||||
    pub const cut_to_end_vim_meta = .{ .description = "Cut to end of line (vim)" };
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
| 
						 | 
				
			
			@ -2939,6 +2980,13 @@ pub const Editor = struct {
 | 
			
		|||
    }
 | 
			
		||||
    pub const move_up_meta: Meta = .{ .description = "Move cursor up" };
 | 
			
		||||
 | 
			
		||||
    pub fn move_up_vim(self: *Self, _: Context) Result {
 | 
			
		||||
        const root = try self.buf_root();
 | 
			
		||||
        self.with_cursors_const(root, move_cursor_up_vim) catch {};
 | 
			
		||||
        self.clamp();
 | 
			
		||||
    }
 | 
			
		||||
    pub const move_up_vim_meta = .{ .description = "Move cursor up (vim)" };
 | 
			
		||||
 | 
			
		||||
    pub fn add_cursor_up(self: *Self, _: Context) Result {
 | 
			
		||||
        try self.push_cursor();
 | 
			
		||||
        const primary = self.get_primary();
 | 
			
		||||
| 
						 | 
				
			
			@ -2955,6 +3003,13 @@ pub const Editor = struct {
 | 
			
		|||
    }
 | 
			
		||||
    pub const move_down_meta: Meta = .{ .description = "Move cursor down" };
 | 
			
		||||
 | 
			
		||||
    pub fn move_down_vim(self: *Self, _: Context) Result {
 | 
			
		||||
        const root = try self.buf_root();
 | 
			
		||||
        self.with_cursors_const(root, move_cursor_down_vim) catch {};
 | 
			
		||||
        self.clamp();
 | 
			
		||||
    }
 | 
			
		||||
    pub const move_down_vim_meta = .{ .description = "Move cursor down (vim)" };
 | 
			
		||||
 | 
			
		||||
    pub fn add_cursor_down(self: *Self, _: Context) Result {
 | 
			
		||||
        try self.push_cursor();
 | 
			
		||||
        const primary = self.get_primary();
 | 
			
		||||
| 
						 | 
				
			
			@ -3305,6 +3360,18 @@ pub const Editor = struct {
 | 
			
		|||
    }
 | 
			
		||||
    pub const move_scroll_half_page_up_meta: Meta = .{ .description = "Move and scroll half a page up" };
 | 
			
		||||
 | 
			
		||||
    pub fn move_scroll_half_page_up_vim(self: *Self, _: Context) Result {
 | 
			
		||||
        if (self.screen_cursor(&self.get_primary().cursor)) |cursor| {
 | 
			
		||||
            const root = try self.buf_root();
 | 
			
		||||
            self.with_cursors_and_view_const(root, move_cursor_half_page_up_vim, &self.view) catch {};
 | 
			
		||||
            const new_cursor_row = self.get_primary().cursor.row;
 | 
			
		||||
            self.update_scroll_dest_abs(if (cursor.row > new_cursor_row) 0 else new_cursor_row - cursor.row);
 | 
			
		||||
        } else {
 | 
			
		||||
            return self.move_half_page_up(.{});
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    pub const move_scroll_half_page_up_vim_meta = .{ .description = "Move and scroll half a page up (vim)" };
 | 
			
		||||
 | 
			
		||||
    pub fn move_scroll_half_page_down(self: *Self, _: Context) Result {
 | 
			
		||||
        if (self.screen_cursor(&self.get_primary().cursor)) |cursor| {
 | 
			
		||||
            const root = try self.buf_root();
 | 
			
		||||
| 
						 | 
				
			
			@ -3317,6 +3384,18 @@ pub const Editor = struct {
 | 
			
		|||
    }
 | 
			
		||||
    pub const move_scroll_half_page_down_meta: Meta = .{ .description = "Move and scroll half a page down" };
 | 
			
		||||
 | 
			
		||||
    pub fn move_scroll_half_page_down_vim(self: *Self, _: Context) Result {
 | 
			
		||||
        if (self.screen_cursor(&self.get_primary().cursor)) |cursor| {
 | 
			
		||||
            const root = try self.buf_root();
 | 
			
		||||
            self.with_cursors_and_view_const(root, move_cursor_half_page_down_vim, &self.view) catch {};
 | 
			
		||||
            const new_cursor_row = self.get_primary().cursor.row;
 | 
			
		||||
            self.update_scroll_dest_abs(if (cursor.row > new_cursor_row) 0 else new_cursor_row - cursor.row);
 | 
			
		||||
        } else {
 | 
			
		||||
            return self.move_half_page_down(.{});
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    pub const move_scroll_half_page_down_vim_meta = .{ .description = "Move and scroll half a page down (vim)" };
 | 
			
		||||
 | 
			
		||||
    pub fn smart_move_begin(self: *Self, _: Context) Result {
 | 
			
		||||
        const root = try self.buf_root();
 | 
			
		||||
        try self.with_cursors_const(root, smart_move_cursor_begin);
 | 
			
		||||
| 
						 | 
				
			
			@ -3397,6 +3476,16 @@ pub const Editor = struct {
 | 
			
		|||
    }
 | 
			
		||||
    pub const cancel_meta: Meta = .{ .description = "Cancel current action" };
 | 
			
		||||
 | 
			
		||||
    pub fn select_line_vim(self: *Self, _: Context) Result {
 | 
			
		||||
        self.selection_mode = .line;
 | 
			
		||||
        for (self.cursels.items) |*cursel_| if (cursel_.*) |*cursel|
 | 
			
		||||
            try self.select_line_around_cursor(cursel);
 | 
			
		||||
        self.collapse_cursors();
 | 
			
		||||
 
 | 
			
		||||
        self.clamp();
 | 
			
		||||
    }
 | 
			
		||||
    pub const select_line_vim_meta = .{ .description = "Select the line around the cursor (vim)" };
 | 
			
		||||
 | 
			
		||||
    pub fn select_up(self: *Self, _: Context) Result {
 | 
			
		||||
        const root = try self.buf_root();
 | 
			
		||||
        try self.with_selections_const(root, move_cursor_up);
 | 
			
		||||
| 
						 | 
				
			
			@ -3448,6 +3537,13 @@ pub const Editor = struct {
 | 
			
		|||
    }
 | 
			
		||||
    pub const select_word_left_meta: Meta = .{ .description = "Select left by word" };
 | 
			
		||||
 | 
			
		||||
    pub fn select_word_left_vim(self: *Self, _: Context) Result {
 | 
			
		||||
        const root = try self.buf_root();
 | 
			
		||||
        try self.with_selections_const(root, move_cursor_word_left_vim);
 | 
			
		||||
        self.clamp();
 | 
			
		||||
    }
 | 
			
		||||
    pub const select_word_left_vim_meta = .{ .description = "Select left by word (vim)" };
 | 
			
		||||
 | 
			
		||||
    pub fn select_word_right(self: *Self, _: Context) Result {
 | 
			
		||||
        const root = try self.buf_root();
 | 
			
		||||
        try self.with_selections_const(root, move_cursor_word_right);
 | 
			
		||||
| 
						 | 
				
			
			@ -3455,6 +3551,20 @@ pub const Editor = struct {
 | 
			
		|||
    }
 | 
			
		||||
    pub const select_word_right_meta: Meta = .{ .description = "Select right by word" };
 | 
			
		||||
 | 
			
		||||
    pub fn select_word_right_vim(self: *Self, _: Context) Result {
 | 
			
		||||
        const root = try self.buf_root();
 | 
			
		||||
        try self.with_selections_const(root, move_cursor_word_right_vim);
 | 
			
		||||
        self.clamp();
 | 
			
		||||
    }
 | 
			
		||||
    pub const select_word_right_vim_meta = .{ .description = "Select right by word (vim)" };
 | 
			
		||||
 | 
			
		||||
    pub fn select_word_right_end_vim(self: *Self, _: Context) Result {
 | 
			
		||||
        const root = try self.buf_root();
 | 
			
		||||
        try self.with_selections_const(root, move_cursor_word_right_end_vim);
 | 
			
		||||
        self.clamp();
 | 
			
		||||
    }
 | 
			
		||||
    pub const select_word_right_end_vim_meta = .{ .description = "Select right by end of word (vim)" };
 | 
			
		||||
 | 
			
		||||
    pub fn select_word_begin(self: *Self, _: Context) Result {
 | 
			
		||||
        const root = try self.buf_root();
 | 
			
		||||
        try self.with_selections_const(root, move_cursor_word_begin);
 | 
			
		||||
| 
						 | 
				
			
			@ -3591,6 +3701,14 @@ pub const Editor = struct {
 | 
			
		|||
        cursel.cursor = sel.end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn select_line_around_cursor(self: *Self, cursel: *CurSel) !void {
 | 
			
		||||
        const root = try self.buf_root();
 | 
			
		||||
        const sel = try cursel.enable_selection(root, self.metrics);
 | 
			
		||||
        sel.normalize();
 | 
			
		||||
        try move_cursor_begin(root, &sel.begin, self.metrics);
 | 
			
		||||
        try move_cursor_end(root, &sel.end, self.metrics);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn selection_reverse(_: Buffer.Root, cursel: *CurSel) !void {
 | 
			
		||||
        if (cursel.selection) |*sel| {
 | 
			
		||||
            sel.reverse();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue