diff options
author | Dmitry Sharshakov | 2021-08-22 09:06:43 +0000 |
---|---|---|
committer | Dmitry Sharshakov | 2021-08-22 09:06:43 +0000 |
commit | d0b0c9b2ef1f26dbf7e5addf59d73b9634907af2 (patch) | |
tree | e9e8a65397c422c7d9a2477ae348c5a94b20e57d /helix-term | |
parent | 132198323ca8af409ecac56e14f8029c9d252621 (diff) |
editor: select a range if stack pointer has an end
Diffstat (limited to 'helix-term')
-rw-r--r-- | helix-term/Cargo.toml | 2 | ||||
-rw-r--r-- | helix-term/src/application.rs | 21 |
2 files changed, 19 insertions, 4 deletions
diff --git a/helix-term/Cargo.toml b/helix-term/Cargo.toml index c0b2cfe5..63856585 100644 --- a/helix-term/Cargo.toml +++ b/helix-term/Cargo.toml @@ -56,5 +56,7 @@ toml = "0.5" serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } +smallvec = "1.4" + [target.'cfg(not(windows))'.dependencies] # https://github.com/vorner/signal-hook/issues/100 signal-hook-tokio = { version = "0.3", features = ["futures-v0_3"] } diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index 0d10c9b5..6579cb51 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -1,4 +1,4 @@ -use helix_core::{syntax, Selection}; +use helix_core::{syntax, Range, Selection}; use helix_dap::Payload; use helix_lsp::{lsp, util::lsp_pos_to_pos, LspProgressMap}; use helix_view::{theme, Editor}; @@ -13,7 +13,7 @@ use crate::{ }; use log::error; - +use smallvec::smallvec; use std::{ io::{stdout, Write}, sync::Arc, @@ -309,19 +309,32 @@ impl Application { }), line, column, + end_line, + end_column, .. }) = &debugger.stack_pointer { let path = src.clone(); let line = *line; let column = *column; + let end_line = *end_line; + let end_column = *end_column; self.editor .open(path, helix_view::editor::Action::Replace) .unwrap(); let (view, doc) = current!(self.editor); - let pos = doc.text().line_to_char(line - 1) + column; - doc.set_selection(view.id, Selection::point(pos)); + let start = doc.text().line_to_char(line - 1) + column; + if let Some(end_line) = end_line { + let end = + doc.text().line_to_char(end_line - 1) + end_column.unwrap_or(0); + doc.set_selection( + view.id, + Selection::new(smallvec![Range::new(start, end)], 0), + ); + } else { + doc.set_selection(view.id, Selection::point(start)); + } align_view(doc, view, Align::Center); } self.editor.set_status(status); |