Render indent-style status in status line.

Also cleaned up the status line code a little.
pull/269/head
Nathan Vegdahl 3 years ago
parent 5ca043c17a
commit 8648e483f7

@ -11,7 +11,10 @@ use helix_core::{
syntax::{self, HighlightEvent}, syntax::{self, HighlightEvent},
Position, Range, 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 std::borrow::Cow;
use crossterm::{ use crossterm::{
@ -455,6 +458,10 @@ impl EditorView {
theme: &Theme, theme: &Theme,
is_focused: bool, is_focused: bool,
) { ) {
//-------------------------------
// Left side of the status line.
//-------------------------------
let mode = match doc.mode() { let mode = match doc.mode() {
Mode::Insert => "INS", Mode::Insert => "INS",
Mode::Select => "SEL", Mode::Select => "SEL",
@ -487,24 +494,41 @@ impl EditorView {
); );
} }
surface.set_stringn( //-------------------------------
viewport.x + viewport.width.saturating_sub(15), // Right side of the status line.
viewport.y, //-------------------------------
format!("{}", doc.diagnostics().len()),
4, // Compute the individual info strings.
text_color, let diag_count = format!("{}", doc.diagnostics().len());
); let indent_info = match doc.indent_style {
IndentStyle::Tabs => "tab",
// render line:col IndentStyle::Spaces(1) => "spaces:1",
let pos = coords_at_pos(doc.text().slice(..), doc.selection(view.id).cursor()); IndentStyle::Spaces(2) => "spaces:2",
IndentStyle::Spaces(3) => "spaces:3",
let text = format!("{}:{}", pos.row + 1, pos.col + 1); // convert to 1-indexing IndentStyle::Spaces(4) => "spaces:4",
let len = text.len(); 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( surface.set_string(
viewport.x + viewport.width.saturating_sub(len as u16 + 1), viewport.x + viewport.width.saturating_sub(text_len),
viewport.y, viewport.y,
text, right_side_text,
text_color, text_color,
); );
} }

@ -32,7 +32,6 @@ pub struct Document {
pub(crate) id: DocumentId, pub(crate) id: DocumentId,
text: Rope, text: Rope,
pub(crate) selections: HashMap<ViewId, Selection>, pub(crate) selections: HashMap<ViewId, Selection>,
pub(crate) indent_style: IndentStyle,
path: Option<PathBuf>, path: Option<PathBuf>,
@ -40,6 +39,9 @@ pub struct Document {
pub mode: Mode, pub mode: Mode,
pub restore_cursor: bool, pub restore_cursor: bool,
/// Current indent style.
pub indent_style: IndentStyle,
syntax: Option<Syntax>, syntax: Option<Syntax>,
// /// Corresponding language scope name. Usually `source.<lang>`. // /// Corresponding language scope name. Usually `source.<lang>`.
pub(crate) language: Option<Arc<LanguageConfiguration>>, pub(crate) language: Option<Arc<LanguageConfiguration>>,

Loading…
Cancel
Save