on master help sign in
feat(helix-view): dynamic line numbers (#1522)
333c294Andrew Neth
book/src/configuration.md+1−1
@@ -34,7 +34,7 @@ hidden = false
34| `middle-click-paste` | Middle click paste support. | `true` |
34| `middle-click-paste` | Middle click paste support. | `true` |
35| `scroll-lines` | Number of lines to scroll per scroll wheel step. | `3` |
35| `scroll-lines` | Number of lines to scroll per scroll wheel step. | `3` |
36| `shell` | Shell to use when running external commands. | Unix: `["sh", "-c"]`<br/>Windows: `["cmd", "/C"]` |
36| `shell` | Shell to use when running external commands. | Unix: `["sh", "-c"]`<br/>Windows: `["cmd", "/C"]` |
37−| `line-number` | Line number display (`absolute`, `relative`) | `absolute` |
37+| `line-number` | Line number display: `absolute` simply shows each line's number, while `relative` shows the distance from the current line. When unfocused or in insert mode, `relative` will still show absolute line numbers. | `absolute` |
38| `smart-case` | Enable smart case regex searching (case insensitive unless pattern contains upper case characters) | `true` |
38| `smart-case` | Enable smart case regex searching (case insensitive unless pattern contains upper case characters) | `true` |
39| `auto-pairs` | Enable automatic insertion of pairs to parenthese, brackets, etc. | `true` |
39| `auto-pairs` | Enable automatic insertion of pairs to parenthese, brackets, etc. | `true` |
40| `auto-completion` | Enable automatic pop up of auto-completion. | `true` |
40| `auto-completion` | Enable automatic pop up of auto-completion. | `true` |
helix-view/src/editor.rs+3−1
@@ -170,7 +170,9 @@ impl Default for CursorShapeConfig {
170pub enum LineNumber {
170pub enum LineNumber {
171 /// Show absolute line number
171 /// Show absolute line number
172 Absolute,
172 Absolute,
173+
173− /// Show relative line number to the primary cursor
174+ /// If focused and in normal/select mode, show relative line number to the primary cursor.
175+ /// If unfocused or in insert mode, show absolute line number.
174 Relative,
176 Relative,
175}
177}
176
178
helix-view/src/gutter.rs+13−11
@@ -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));
59
59
60 let config = config.line_number;
60 let config = config.line_number;
61+ let mode = doc.mode;
61
62
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)
66 } else {
67 } else {
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;
74+
75+ let display_num = if relative {
74− abs_diff(current_line, line)
76+ abs_diff(current_line, line)
75− }
77+ } else {
76− }
78+ line + 1
77 };
79 };
78 let style = if selected && is_focused {
80 let style = if selected && is_focused {
79 linenr_select
81 linenr_select
80 } else {
82 } else {
81 linenr
83 linenr
82 };
84 };
83− write!(out, "{:>1$}", line, width).unwrap();
85+ write!(out, "{:>1$}", display_num, width).unwrap();
84 Some(style)
86 Some(style)
85 }
87 }
86 })
88 })