summaryrefslogtreecommitdiff
path: root/helix-view/src/editor.rs
diff options
context:
space:
mode:
Diffstat (limited to 'helix-view/src/editor.rs')
-rw-r--r--helix-view/src/editor.rs41
1 files changed, 23 insertions, 18 deletions
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index ac19def1..8ef4413e 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -32,12 +32,12 @@ use anyhow::{bail, Error};
pub use helix_core::diagnostic::Severity;
pub use helix_core::register::Registers;
+use helix_core::Position;
use helix_core::{
auto_pairs::AutoPairs,
syntax::{self, AutoPairConfig},
Change,
};
-use helix_core::{Position, Selection};
use helix_dap as dap;
use serde::{ser::SerializeMap, Deserialize, Deserializer, Serialize, Serializer};
@@ -571,6 +571,20 @@ impl Editor {
self.status_msg = Some((error.into(), Severity::Error));
}
+ #[inline]
+ pub fn get_status(&self) -> Option<(&Cow<'static, str>, &Severity)> {
+ self.status_msg.as_ref().map(|(status, sev)| (status, sev))
+ }
+
+ /// Returns true if the current status is an error
+ #[inline]
+ pub fn is_err(&self) -> bool {
+ self.status_msg
+ .as_ref()
+ .map(|(_, sev)| *sev == Severity::Error)
+ .unwrap_or(false)
+ }
+
pub fn set_theme(&mut self, theme: Theme) {
// `ui.selection` is the only scope required to be able to render a theme.
if theme.find_scope_index("ui.selection").is_none() {
@@ -645,11 +659,8 @@ impl Editor {
view.offset = Position::default();
let doc = self.documents.get_mut(&doc_id).unwrap();
+ doc.ensure_view_init(view.id);
- // initialize selection for view
- doc.selections
- .entry(view.id)
- .or_insert_with(|| Selection::point(0));
// TODO: reuse align_view
let pos = doc
.selection(view.id)
@@ -719,9 +730,7 @@ impl Editor {
Action::Load => {
let view_id = view!(self).id;
let doc = self.documents.get_mut(&id).unwrap();
- if doc.selections().is_empty() {
- doc.set_selection(view_id, Selection::point(0));
- }
+ doc.ensure_view_init(view_id);
return;
}
Action::HorizontalSplit | Action::VerticalSplit => {
@@ -736,7 +745,7 @@ impl Editor {
);
// initialize selection for view
let doc = self.documents.get_mut(&id).unwrap();
- doc.set_selection(view_id, Selection::point(0));
+ doc.ensure_view_init(view_id);
}
}
@@ -769,8 +778,9 @@ impl Editor {
Ok(self.new_file_from_document(action, Document::from(rope, Some(encoding))))
}
- pub fn open(&mut self, path: PathBuf, action: Action) -> Result<DocumentId, Error> {
- let path = helix_core::path::get_canonicalized_path(&path)?;
+ // ??? possible use for integration tests
+ pub fn open(&mut self, path: &Path, action: Action) -> Result<DocumentId, Error> {
+ let path = helix_core::path::get_canonicalized_path(path)?;
let id = self.document_by_path(&path).map(|doc| doc.id);
let id = if let Some(id) = id {
@@ -790,12 +800,7 @@ impl Editor {
pub fn close(&mut self, id: ViewId) {
let view = self.tree.get(self.tree.focus);
// remove selection
- self.documents
- .get_mut(&view.doc)
- .unwrap()
- .selections
- .remove(&id);
-
+ self.documents.get_mut(&view.doc).unwrap().remove_view(id);
self.tree.remove(id);
self._refresh();
}
@@ -870,7 +875,7 @@ impl Editor {
let view = View::new(doc_id, self.config().gutters.clone());
let view_id = self.tree.insert(view);
let doc = self.documents.get_mut(&doc_id).unwrap();
- doc.set_selection(view_id, Selection::point(0));
+ doc.ensure_view_init(view_id);
}
self._refresh();