Skip to content

Commit

Permalink
Squashed commit of the following:
Browse files Browse the repository at this point in the history
commit 4e18938
Merge: ea31a5b 8c68074
Author: TornaxO7 <[email protected]>
Date:   Sat Nov 25 15:21:53 2023 +0100

    Merge branch 'master' of github.com:helix-editor/helix into md/global-status-line

commit ea31a5b
Author: Matouš Dzivjak <[email protected]>
Date:   Sat Oct 22 12:44:52 2022 +0200

    feat(view): global status line option

    Add option to render single glboal status line instead of rendering
    status line per view.

    Fixes: helix-editor#2254
  • Loading branch information
nyawox committed Feb 5, 2025
1 parent f415ccc commit 4dee2ec
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 11 deletions.
57 changes: 46 additions & 11 deletions helix-term/src/ui/editor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ use helix_core::{
};
use helix_view::{
annotations::diagnostics::DiagnosticFilter,
document::{Mode, SCRATCH_BUFFER_NAME},
editor::{CompleteAction, CursorShapeConfig},
document::{Mode, SavePoint, SCRATCH_BUFFER_NAME},
editor::{CompleteAction, CursorShapeConfig, StatusLineRenderConfig},
graphics::{Color, CursorKind, Modifier, Rect, Style},
input::{KeyEvent, MouseButton, MouseEvent, MouseEventKind},
keyboard::{KeyCode, KeyModifiers},
Expand Down Expand Up @@ -84,7 +84,10 @@ impl EditorView {
is_focused: bool,
) {
let inner = view.inner_area(doc);
let area = view.area;
let area = match editor.config().statusline.render {
StatusLineRenderConfig::Single => view.area.clip_bottom(1),
StatusLineRenderConfig::PerView => view.area,
};
let theme = &editor.theme;
let config = editor.config();

Expand Down Expand Up @@ -219,7 +222,6 @@ impl EditorView {
for y in area.top()..area.bottom() {
surface[(x, y)]
.set_symbol(tui::symbols::line::VERTICAL)
//.set_symbol(" ")
.set_style(border_style);
}
}
Expand All @@ -230,15 +232,31 @@ impl EditorView {
Self::render_diagnostics(doc, view, inner, surface, theme);
}

let statusline_area = view
.area
.clip_top(view.area.height.saturating_sub(1))
.clip_bottom(1); // -1 from bottom to remove commandline
match editor.config().statusline.render {
StatusLineRenderConfig::PerView => {
let statusline_area = view
.area
.clip_top(view.area.height.saturating_sub(1))
.clip_bottom(1); // -1 from bottom to remove commandline

let mut context =
statusline::RenderContext::new(editor, doc, view, is_focused, &self.spinners);
let mut context =
statusline::RenderContext::new(editor, doc, view, is_focused, &self.spinners);

statusline::render(&mut context, statusline_area, surface);
statusline::render(&mut context, statusline_area, surface);
}
StatusLineRenderConfig::Single => {
// -1 for command line
if viewport.bottom() - 1 != view.area.bottom() {
let y = area.bottom();
let border_style = theme.get("ui.window");
for x in area.left()..area.right() {
surface[(x, y)]
.set_symbol(tui::symbols::line::HORIZONTAL)
.set_style(border_style);
}
}
}
};
}

pub fn render_rulers(
Expand Down Expand Up @@ -1563,6 +1581,23 @@ impl Component for EditorView {
self.render_view(cx.editor, doc, view, area, surface, is_focused);
}

if config.statusline.render == StatusLineRenderConfig::Single {
if let Some((view, is_focused)) =
cx.editor.tree.views().find(|&(_, is_focused)| is_focused)
{
let doc = cx.editor.document(view.doc).unwrap();
let mut context = statusline::RenderContext::new(
cx.editor,
doc,
view,
is_focused,
&self.spinners,
);
let statusline_area = area.clip_top(area.height.saturating_sub(2)).clip_bottom(1); // -1 from bottom to remove commandline
statusline::render(&mut context, statusline_area, surface);
}
}

if config.auto_info {
if let Some(mut info) = cx.editor.autoinfo.take() {
info.render(area, surface, cx);
Expand Down
9 changes: 9 additions & 0 deletions helix-view/src/editor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,7 @@ pub struct StatusLineConfig {
pub right: Vec<StatusLineElement>,
pub separator: String,
pub mode: ModeConfig,
pub render: StatusLineRenderConfig,
}

impl Default for StatusLineConfig {
Expand All @@ -509,6 +510,7 @@ impl Default for StatusLineConfig {
],
separator: String::from("│"),
mode: ModeConfig::default(),
render: StatusLineRenderConfig::PerView,
}
}
}
Expand All @@ -531,6 +533,13 @@ impl Default for ModeConfig {
}
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum StatusLineRenderConfig {
Single,
PerView,
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum StatusLineElement {
Expand Down

0 comments on commit 4dee2ec

Please sign in to comment.