aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Vegdahl2021-06-13 23:35:05 +0000
committerNathan Vegdahl2021-06-15 01:32:23 +0000
commit8648e483f772b4791e5618c4c8b3db8926ae356d (patch)
tree6d2b1cb23adca37576c90efb315493747f858b26
parent5ca043c17a28323bebe7517f9bcdea8a293bcfab (diff)
Render indent-style status in status line.
Also cleaned up the status line code a little.
-rw-r--r--helix-term/src/ui/editor.rs56
-rw-r--r--helix-view/src/document.rs4
2 files changed, 43 insertions, 17 deletions
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index dd385ac9..65b114a6 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -11,7 +11,10 @@ use helix_core::{
syntax::{self, HighlightEvent},
Position, Range,
};
-use helix_view::{document::Mode, Document, Editor, Theme, View};
+use helix_view::{
+ document::{IndentStyle, Mode},
+ Document, Editor, Theme, View,
+};
use std::borrow::Cow;
use crossterm::{
@@ -455,6 +458,10 @@ impl EditorView {
theme: &Theme,
is_focused: bool,
) {
+ //-------------------------------
+ // Left side of the status line.
+ //-------------------------------
+
let mode = match doc.mode() {
Mode::Insert => "INS",
Mode::Select => "SEL",
@@ -487,24 +494,41 @@ impl EditorView {
);
}
- surface.set_stringn(
- viewport.x + viewport.width.saturating_sub(15),
- viewport.y,
- format!("{}", doc.diagnostics().len()),
- 4,
- text_color,
- );
-
- // render line:col
- let pos = coords_at_pos(doc.text().slice(..), doc.selection(view.id).cursor());
-
- let text = format!("{}:{}", pos.row + 1, pos.col + 1); // convert to 1-indexing
- let len = text.len();
+ //-------------------------------
+ // Right side of the status line.
+ //-------------------------------
+
+ // Compute the individual info strings.
+ let diag_count = format!("{}", doc.diagnostics().len());
+ let indent_info = match doc.indent_style {
+ IndentStyle::Tabs => "tab",
+ IndentStyle::Spaces(1) => "spaces:1",
+ IndentStyle::Spaces(2) => "spaces:2",
+ IndentStyle::Spaces(3) => "spaces:3",
+ IndentStyle::Spaces(4) => "spaces:4",
+ IndentStyle::Spaces(5) => "spaces:5",
+ IndentStyle::Spaces(6) => "spaces:6",
+ IndentStyle::Spaces(7) => "spaces:7",
+ IndentStyle::Spaces(8) => "spaces:8",
+ _ => "indent:ERROR",
+ };
+ let position_info = {
+ let pos = coords_at_pos(doc.text().slice(..), doc.selection(view.id).cursor());
+ format!("{}:{}", pos.row + 1, pos.col + 1) // convert to 1-indexing
+ };
+ // Render them to the status line together.
+ let right_side_text = format!(
+ "{} {} {} ",
+ &diag_count[..diag_count.len().min(4)],
+ indent_info,
+ position_info
+ );
+ let text_len = right_side_text.len() as u16;
surface.set_string(
- viewport.x + viewport.width.saturating_sub(len as u16 + 1),
+ viewport.x + viewport.width.saturating_sub(text_len),
viewport.y,
- text,
+ right_side_text,
text_color,
);
}
diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs
index 86dee16f..d5ab1425 100644
--- a/helix-view/src/document.rs
+++ b/helix-view/src/document.rs
@@ -32,7 +32,6 @@ pub struct Document {
pub(crate) id: DocumentId,
text: Rope,
pub(crate) selections: HashMap<ViewId, Selection>,
- pub(crate) indent_style: IndentStyle,
path: Option<PathBuf>,
@@ -40,6 +39,9 @@ pub struct Document {
pub mode: Mode,
pub restore_cursor: bool,
+ /// Current indent style.
+ pub indent_style: IndentStyle,
+
syntax: Option<Syntax>,
// /// Corresponding language scope name. Usually `source.<lang>`.
pub(crate) language: Option<Arc<LanguageConfiguration>>,