@@ -1051,22 +1051,33 @@ impl EditorView {
10511051 cxt: &mut commands::Context,
10521052 ) -> EventResult {
10531053 let config = cxt.editor.config();
1054− match event {
1055− MouseEvent {
1056− kind: MouseEventKind::Down(MouseButton::Left),
1057− row,
1058− column,
1059− modifiers,
1060− ..
1061− } => {
1062− let editor = &mut cxt.editor;
1054+ let MouseEvent {
1055+ kind,
1056+ row,
1057+ column,
1058+ modifiers,
1059+ ..
1060+ } = event;
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))
1066+ })
1067+ };
1068+
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))
1073+ })
1074+ };
10631075
1064− let result = editor.tree.views().find_map(|(view, _focus)| {
1065− view.pos_at_screen_coords(&editor.documents[&view.doc], row, column)
1066− .map(|pos| (pos, view.id))
1067− });
1076+ match kind {
1077+ MouseEventKind::Down(MouseButton::Left) => {
1078+ let editor = &mut cxt.editor;
10681079
1069− if let Some((pos, view_id)) = result {
1080+ if let Some((pos, view_id)) = pos_and_view(editor, row, column) {
10701081 let doc = editor.document_mut(editor.tree.get(view_id).doc).unwrap();
10711082
10721083 if modifiers == crossterm::event::KeyModifiers::ALT {
@@ -1081,12 +1092,7 @@ impl EditorView {
10811092 return EventResult::Consumed(None);
10821093 }
10831094
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))
1087− });
1088−
1089− if let Some((coords, view_id)) = result {
1095+ if let Some((coords, view_id)) = gutter_coords_and_view(editor, row, column) {
10901096 editor.tree.focus = view_id;
10911097
10921098 let view = editor.tree.get(view_id);
@@ -1107,12 +1113,7 @@ impl EditorView {
11071113 EventResult::Ignored(None)
11081114 }
11091115
1110− MouseEvent {
1111− kind: MouseEventKind::Drag(MouseButton::Left),
1112− row,
1113− column,
1114− ..
1115− } => {
1116+ MouseEventKind::Drag(MouseButton::Left) => {
11161117 let (view, doc) = current!(cxt.editor);
11171118
11181119 let pos = match view.pos_at_screen_coords(doc, row, column) {
@@ -1124,15 +1125,11 @@ impl EditorView {
11241125 let primary = selection.primary_mut();
11251126 *primary = primary.put_cursor(doc.text().slice(..), pos, true);
11261127 doc.set_selection(view.id, selection);
1128+
11271129 EventResult::Consumed(None)
11281130 }
11291131
1130− MouseEvent {
1131− kind: MouseEventKind::ScrollUp | MouseEventKind::ScrollDown,
1132− row,
1133− column,
1134− ..
1135− } => {
1132+ MouseEventKind::ScrollUp | MouseEventKind::ScrollDown => {
11361133 let current_view = cxt.editor.tree.focus;
11371134
11381135 let direction = match event.kind {
@@ -1141,13 +1138,8 @@ impl EditorView {
11411138 _ => unreachable!(),
11421139 };
11431140
1144− let result = cxt.editor.tree.views().find_map(|(view, _focus)| {
1145− view.pos_at_screen_coords(&cxt.editor.documents[&view.doc], row, column)
1146− .map(|_| view.id)
1147− });
1148−
1149− match result {
1150− Some(view_id) => cxt.editor.tree.focus = view_id,
1141+ match pos_and_view(cxt.editor, row, column) {
1142+ Some((_, view_id)) => cxt.editor.tree.focus = view_id,
11511143 None => return EventResult::Ignored(None),
11521144 }
11531145
@@ -1159,10 +1151,7 @@ impl EditorView {
11591151 EventResult::Consumed(None)
11601152 }
11611153
1162− MouseEvent {
1163− kind: MouseEventKind::Up(MouseButton::Left),
1164− ..
1165− } => {
1154+ MouseEventKind::Up(MouseButton::Left) => {
11661155 if !config.middle_click_paste {
11671156 return EventResult::Ignored(None);
11681157 }
@@ -1184,19 +1173,8 @@ impl EditorView {
11841173 EventResult::Consumed(None)
11851174 }
11861175
1187− MouseEvent {
1188− kind: MouseEventKind::Up(MouseButton::Right),
1189− row,
1190− column,
1191− modifiers,
1192− ..
1193− } => {
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))
1197− });
1198−
1199− if let Some((coords, view_id)) = result {
1176+ MouseEventKind::Up(MouseButton::Right) => {
1177+ if let Some((coords, view_id)) = gutter_coords_and_view(cxt.editor, row, column) {
12001178 cxt.editor.tree.focus = view_id;
12011179
12021180 let view = cxt.editor.tree.get(view_id);
@@ -1213,16 +1191,11 @@ impl EditorView {
12131191 return EventResult::Consumed(None);
12141192 }
12151193 }
1194+
12161195 EventResult::Ignored(None)
12171196 }
12181197
1219− MouseEvent {
1220− kind: MouseEventKind::Up(MouseButton::Middle),
1221− row,
1222− column,
1223− modifiers,
1224− ..
1225− } => {
1198+ MouseEventKind::Up(MouseButton::Middle) => {
12261199 let editor = &mut cxt.editor;
12271200 if !config.middle_click_paste {
12281201 return EventResult::Ignored(None);
@@ -1235,16 +1208,12 @@ impl EditorView {
12351208 return EventResult::Consumed(None);
12361209 }
12371210
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))
1241− });
1242−
1243− if let Some((pos, view_id)) = result {
1211+ if let Some((pos, view_id)) = pos_and_view(editor, row, column) {
12441212 let doc = editor.document_mut(editor.tree.get(view_id).doc).unwrap();
12451213 doc.set_selection(view_id, Selection::point(pos));
12461214 editor.tree.focus = view_id;
12471215 commands::MappableCommand::paste_primary_clipboard_before.execute(cxt);
1216+
12481217 return EventResult::Consumed(None);
12491218 }
12501219