@@ -1051,22 +1051,33 @@ impl EditorView {
1051 cxt: &mut commands::Context,
1051 cxt: &mut commands::Context,
1052 ) -> EventResult {
1052 ) -> EventResult {
1053 let config = cxt.editor.config();
1053 let config = cxt.editor.config();
1055− MouseEvent {
1054+ let MouseEvent {
1056− kind: MouseEventKind::Down(MouseButton::Left),
1055+ kind,
1058− column,
1057+ column,
1059− modifiers,
1058+ modifiers,
1061− } => {
1060+ } = event;
1062− let editor = &mut cxt.editor;
1061+
1062+ let pos_and_view = |editor: &Editor, row, column| {
1063+ editor.tree.views().find_map(|(view, _focus)| {
1064+ view.pos_at_screen_coords(&editor.documents[&view.doc], row, column)
1065+ .map(|pos| (pos, view.id))
1069+ let gutter_coords_and_view = |editor: &Editor, row, column| {
1070+ editor.tree.views().find_map(|(view, _focus)| {
1071+ view.gutter_coords_at_screen_coords(row, column)
1072+ .map(|coords| (coords, view.id))
1064− let result = editor.tree.views().find_map(|(view, _focus)| {
1076+ match kind {
1065− view.pos_at_screen_coords(&editor.documents[&view.doc], row, column)
1077+ MouseEventKind::Down(MouseButton::Left) => {
1066− .map(|pos| (pos, view.id))
1078+ let editor = &mut cxt.editor;
1069− if let Some((pos, view_id)) = result {
1080+ if let Some((pos, view_id)) = pos_and_view(editor, row, column) {
1070 let doc = editor.document_mut(editor.tree.get(view_id).doc).unwrap();
1081 let doc = editor.document_mut(editor.tree.get(view_id).doc).unwrap();
1072 if modifiers == crossterm::event::KeyModifiers::ALT {
1083 if modifiers == crossterm::event::KeyModifiers::ALT {
@@ -1081,12 +1092,7 @@ impl EditorView {
1081 return EventResult::Consumed(None);
1092 return EventResult::Consumed(None);
1084− let result = editor.tree.views().find_map(|(view, _focus)| {
1085− view.gutter_coords_at_screen_coords(row, column)
1086− .map(|coords| (coords, view.id))
1089− if let Some((coords, view_id)) = result {
1095+ if let Some((coords, view_id)) = gutter_coords_and_view(editor, row, column) {
1090 editor.tree.focus = view_id;
1096 editor.tree.focus = view_id;
1092 let view = editor.tree.get(view_id);
1098 let view = editor.tree.get(view_id);
@@ -1107,12 +1113,7 @@ impl EditorView {
1107 EventResult::Ignored(None)
1113 EventResult::Ignored(None)
1111− kind: MouseEventKind::Drag(MouseButton::Left),
1116+ MouseEventKind::Drag(MouseButton::Left) => {
1116 let (view, doc) = current!(cxt.editor);
1117 let (view, doc) = current!(cxt.editor);
1118 let pos = match view.pos_at_screen_coords(doc, row, column) {
1119 let pos = match view.pos_at_screen_coords(doc, row, column) {
@@ -1124,15 +1125,11 @@ impl EditorView {
1124 let primary = selection.primary_mut();
1125 let primary = selection.primary_mut();
1125 *primary = primary.put_cursor(doc.text().slice(..), pos, true);
1126 *primary = primary.put_cursor(doc.text().slice(..), pos, true);
1126 doc.set_selection(view.id, selection);
1127 doc.set_selection(view.id, selection);
1127 EventResult::Consumed(None)
1129 EventResult::Consumed(None)
1131− kind: MouseEventKind::ScrollUp | MouseEventKind::ScrollDown,
1132+ MouseEventKind::ScrollUp | MouseEventKind::ScrollDown => {
1136 let current_view = cxt.editor.tree.focus;
1133 let current_view = cxt.editor.tree.focus;
1138 let direction = match event.kind {
1135 let direction = match event.kind {
@@ -1141,13 +1138,8 @@ impl EditorView {
1141 _ => unreachable!(),
1138 _ => unreachable!(),
1144− let result = cxt.editor.tree.views().find_map(|(view, _focus)| {
1141+ match pos_and_view(cxt.editor, row, column) {
1145− view.pos_at_screen_coords(&cxt.editor.documents[&view.doc], row, column)
1150− Some(view_id) => cxt.editor.tree.focus = view_id,
1142+ Some((_, view_id)) => cxt.editor.tree.focus = view_id,
1151 None => return EventResult::Ignored(None),
1143 None => return EventResult::Ignored(None),
@@ -1159,10 +1151,7 @@ impl EditorView {
1159 EventResult::Consumed(None)
1151 EventResult::Consumed(None)
1163− kind: MouseEventKind::Up(MouseButton::Left),
1154+ MouseEventKind::Up(MouseButton::Left) => {
1166 if !config.middle_click_paste {
1155 if !config.middle_click_paste {
1167 return EventResult::Ignored(None);
1156 return EventResult::Ignored(None);
@@ -1184,19 +1173,8 @@ impl EditorView {
1184 EventResult::Consumed(None)
1173 EventResult::Consumed(None)
1188− kind: MouseEventKind::Up(MouseButton::Right),
1176+ MouseEventKind::Up(MouseButton::Right) => {
1194− let result = cxt.editor.tree.views().find_map(|(view, _focus)| {
1195− view.gutter_coords_at_screen_coords(row, column)
1196− .map(|coords| (coords, view.id))
1199− if let Some((coords, view_id)) = result {
1177+ if let Some((coords, view_id)) = gutter_coords_and_view(cxt.editor, row, column) {
1200 cxt.editor.tree.focus = view_id;
1178 cxt.editor.tree.focus = view_id;
1202 let view = cxt.editor.tree.get(view_id);
1180 let view = cxt.editor.tree.get(view_id);
@@ -1213,16 +1191,11 @@ impl EditorView {
1213 return EventResult::Consumed(None);
1191 return EventResult::Consumed(None);
1216 EventResult::Ignored(None)
1195 EventResult::Ignored(None)
1220− kind: MouseEventKind::Up(MouseButton::Middle),
1198+ MouseEventKind::Up(MouseButton::Middle) => {
1226 let editor = &mut cxt.editor;
1199 let editor = &mut cxt.editor;
1227 if !config.middle_click_paste {
1200 if !config.middle_click_paste {
1228 return EventResult::Ignored(None);
1201 return EventResult::Ignored(None);
@@ -1235,16 +1208,12 @@ impl EditorView {
1235 return EventResult::Consumed(None);
1208 return EventResult::Consumed(None);
1238− let result = editor.tree.views().find_map(|(view, _focus)| {
1239− view.pos_at_screen_coords(&editor.documents[&view.doc], row, column)
1240− .map(|pos| (pos, view.id))
1243− if let Some((pos, view_id)) = result {
1211+ if let Some((pos, view_id)) = pos_and_view(editor, row, column) {
1244 let doc = editor.document_mut(editor.tree.get(view_id).doc).unwrap();
1212 let doc = editor.document_mut(editor.tree.get(view_id).doc).unwrap();
1245 doc.set_selection(view_id, Selection::point(pos));
1213 doc.set_selection(view_id, Selection::point(pos));
1246 editor.tree.focus = view_id;
1214 editor.tree.focus = view_id;
1247 commands::MappableCommand::paste_primary_clipboard_before.execute(cxt);
1215 commands::MappableCommand::paste_primary_clipboard_before.execute(cxt);
1248 return EventResult::Consumed(None);
1217 return EventResult::Consumed(None);