@@ -58,29 +58,31 @@ pub fn line_number<'doc>(
58 .char_to_line(doc.selection(view.id).primary().cursor(text));
58 .char_to_line(doc.selection(view.id).primary().cursor(text));
60 let config = config.line_number;
60 let config = config.line_number;
62 Box::new(move |line: usize, selected: bool, out: &mut String| {
63 Box::new(move |line: usize, selected: bool, out: &mut String| {
63 if line == last_line && !draw_last {
64 if line == last_line && !draw_last {
64 write!(out, "{:>1$}", '~', width).unwrap();
65 write!(out, "{:>1$}", '~', width).unwrap();
65 Some(linenr)
66 Some(linenr)
67− use crate::editor::LineNumber;
68+ use crate::{document::Mode, editor::LineNumber};
68− let line = match config {
69+
69− LineNumber::Absolute => line + 1,
70− LineNumber::Relative => {
70+ let relative = config == LineNumber::Relative
71− if current_line == line {
71+ && mode != Mode::Insert
72− line + 1
72+ && is_focused
73− } else {
73+ && current_line != line;
75+ let display_num = if relative {
74− abs_diff(current_line, line)
76+ abs_diff(current_line, line)
78 let style = if selected && is_focused {
80 let style = if selected && is_focused {
79 linenr_select
81 linenr_select
83− write!(out, "{:>1$}", line, width).unwrap();
85+ write!(out, "{:>1$}", display_num, width).unwrap();
84 Some(style)
86 Some(style)