From 333c2949c2b036f8aafa77be2286eb3c135ea269 Mon Sep 17 00:00:00 2001 From: Andrew Neth Date: Tue, 25 Jan 2022 09:18:01 -0600 Subject: feat(helix-view): dynamic line numbers (#1522) * feat(helix-view): dynamic line numbers * docs: describe editor.line-number in more detail * Make dynamic numbers the default behavior of `relative`--- helix-view/src/editor.rs | 4 +++- helix-view/src/gutter.rs | 24 +++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) (limited to 'helix-view') diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index 82ef0cdc..aa2df6f7 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -170,7 +170,9 @@ impl Default for CursorShapeConfig { pub enum LineNumber { /// Show absolute line number Absolute, - /// Show relative line number to the primary cursor + + /// If focused and in normal/select mode, show relative line number to the primary cursor. + /// If unfocused or in insert mode, show absolute line number. Relative, } diff --git a/helix-view/src/gutter.rs b/helix-view/src/gutter.rs index af016c56..113da642 100644 --- a/helix-view/src/gutter.rs +++ b/helix-view/src/gutter.rs @@ -58,29 +58,31 @@ pub fn line_number<'doc>( .char_to_line(doc.selection(view.id).primary().cursor(text)); let config = config.line_number; + let mode = doc.mode; Box::new(move |line: usize, selected: bool, out: &mut String| { if line == last_line && !draw_last { write!(out, "{:>1$}", '~', width).unwrap(); Some(linenr) } else { - use crate::editor::LineNumber; - let line = match config { - LineNumber::Absolute => line + 1, - LineNumber::Relative => { - if current_line == line { - line + 1 - } else { - abs_diff(current_line, line) - } - } + use crate::{document::Mode, editor::LineNumber}; + + let relative = config == LineNumber::Relative + && mode != Mode::Insert + && is_focused + && current_line != line; + + let display_num = if relative { + abs_diff(current_line, line) + } else { + line + 1 }; let style = if selected && is_focused { linenr_select } else { linenr }; - write!(out, "{:>1$}", line, width).unwrap(); + write!(out, "{:>1$}", display_num, width).unwrap(); Some(style) } }) -- cgit v1.2.3-70-g09d2