diff --git a/zed/src/editor/buffer_view.rs b/zed/src/editor/buffer_view.rs index bd51be56f4a61b08614f47cef90c200621d1e045..792d009fcc97f119ff418fdf63017cf316402a5f 100644 --- a/zed/src/editor/buffer_view.rs +++ b/zed/src/editor/buffer_view.rs @@ -176,6 +176,11 @@ pub fn init(app: &mut MutableAppContext) { "buffer:select_smaller_syntax_node", Some("BufferView"), ), + Binding::new( + "ctrl-m", + "buffer:jump_to_enclosing_bracket", + Some("BufferView"), + ), Binding::new("pageup", "buffer:page_up", Some("BufferView")), Binding::new("pagedown", "buffer:page_down", Some("BufferView")), Binding::new("alt-cmd-[", "buffer:fold", Some("BufferView")), @@ -288,6 +293,10 @@ pub fn init(app: &mut MutableAppContext) { "buffer:select_smaller_syntax_node", BufferView::select_smaller_syntax_node, ); + app.add_action( + "buffer:move_to_enclosing_bracket", + BufferView::move_to_enclosing_bracket, + ); app.add_action("buffer:page_up", BufferView::page_up); app.add_action("buffer:page_down", BufferView::page_down); app.add_action("buffer:fold", BufferView::fold); @@ -1816,6 +1825,19 @@ impl BufferView { self.select_larger_syntax_node_stack = stack; } + pub fn move_to_enclosing_bracket(&mut self, _: &(), ctx: &mut ViewContext) { + use super::RangeExt as _; + + let buffer = self.buffer.read(ctx.as_ref()); + let mut selections = self.selections(ctx.as_ref()).to_vec(); + for selection in &mut selections { + let range = selection.range(buffer).sorted(); + if let Some((open_range, close_range)) = buffer.enclosing_bracket_ranges(range) {} + } + + self.update_selections(selections, true, ctx); + } + fn build_columnar_selection( &mut self, row: u32,