diff --git a/helix-term/src/ui/statusline.rs b/helix-term/src/ui/statusline.rs index 117483e26..4d4b9f2fe 100644 --- a/helix-term/src/ui/statusline.rs +++ b/helix-term/src/ui/statusline.rs @@ -1,3 +1,5 @@ +use std::borrow::Cow; + use helix_core::{coords_at_pos, encoding, Position}; use helix_lsp::lsp::DiagnosticSeverity; use helix_view::document::DEFAULT_LANGUAGE_NAME; @@ -58,25 +60,16 @@ pub fn render(context: &mut RenderContext, viewport: Rect, surface: &mut Surface surface.set_style(viewport.with_height(1), base_style); - let write_left = |context: &mut RenderContext, text, style| { - append(&mut context.parts.left, text, &base_style, style) - }; - let write_center = |context: &mut RenderContext, text, style| { - append(&mut context.parts.center, text, &base_style, style) - }; - let write_right = |context: &mut RenderContext, text, style| { - append(&mut context.parts.right, text, &base_style, style) - }; - // Left side of the status line. let config = context.editor.config(); - let element_ids = &config.statusline.left; - element_ids - .iter() - .map(|element_id| get_render_function(*element_id)) - .for_each(|render| render(context, write_left)); + for element_id in &config.statusline.left { + let render = get_render_function(*element_id); + (render)(context, |context, span| { + append(&mut context.parts.left, span, base_style) + }); + } surface.set_spans( viewport.x, @@ -87,11 +80,12 @@ pub fn render(context: &mut RenderContext, viewport: Rect, surface: &mut Surface // Right side of the status line. - let element_ids = &config.statusline.right; - element_ids - .iter() - .map(|element_id| get_render_function(*element_id)) - .for_each(|render| render(context, write_right)); + for element_id in &config.statusline.right { + let render = get_render_function(*element_id); + (render)(context, |context, span| { + append(&mut context.parts.right, span, base_style) + }) + } surface.set_spans( viewport.x @@ -105,11 +99,12 @@ pub fn render(context: &mut RenderContext, viewport: Rect, surface: &mut Surface // Center of the status line. - let element_ids = &config.statusline.center; - element_ids - .iter() - .map(|element_id| get_render_function(*element_id)) - .for_each(|render| render(context, write_center)); + for element_id in &config.statusline.center { + let render = get_render_function(*element_id); + (render)(context, |context, span| { + append(&mut context.parts.center, span, base_style) + }) + } // Width of the empty space between the left and center area and between the center and right area. let spacing = 1u16; @@ -126,16 +121,14 @@ pub fn render(context: &mut RenderContext, viewport: Rect, surface: &mut Surface ); } -fn append(buffer: &mut Spans, text: String, base_style: &Style, style: Option