@@ -331,24 +331,36 @@ impl Application {
331331
332332 let (view, doc) = current!(self.editor);
333333
334+ fn dap_pos_to_pos(
335+ doc: &helix_core::Rope,
336+ line: usize,
337+ column: usize,
338+ ) -> Option<usize> {
339+ // 1-indexing to 0 indexing
340+ let line = doc.try_line_to_char(line - 1).ok()?;
341+ let pos = line + column;
342+ // TODO: this is probably utf-16 offsets
343+ Some(pos)
344+ }
345+
334346 let text_end = doc.text().len_chars().saturating_sub(1);
335− let start = doc.text().try_line_to_char(line - 1).unwrap_or(0) + column;
336− if let Some(end_line) = end_line {
337− let end = doc.text().try_line_to_char(end_line - 1).unwrap_or(0)
338− + end_column.unwrap_or(0);
339− doc.set_selection(
340− view.id,
341− Selection::new(
342− helix_core::SmallVec::from_vec(vec![Range::new(
343− start.min(text_end),
344− end.min(text_end),
345− )]),
346− 0,
347− ),
348− );
347+ let start = dap_pos_to_pos(doc.text(), line, column).unwrap_or(0);
348+
349+ let selection = if let Some(end_line) = end_line {
350+ let end = dap_pos_to_pos(doc.text(), end_line, end_column.unwrap_or(0))
351+ .unwrap_or(0);
352+
353+ Selection::new(
354+ helix_core::SmallVec::from_vec(vec![Range::new(
355+ start.min(text_end),
356+ end.min(text_end),
357+ )]),
358+ 0,
359+ )
349360 } else {
350− doc.set_selection(view.id, Selection::point(start.min(text_end)));
351− }
361+ Selection::point(start.min(text_end))
362+ };
363+ doc.set_selection(view.id, selection);
352364 align_view(doc, view, Align::Center);
353365 }
354366 self.editor.set_status(status);