diff options
-rw-r--r-- | book/src/configuration.md | 1 | ||||
-rw-r--r-- | helix-term/src/ui/statusline.rs | 31 | ||||
-rw-r--r-- | helix-view/src/editor.rs | 2 |
3 files changed, 27 insertions, 7 deletions
diff --git a/book/src/configuration.md b/book/src/configuration.md index c7334af4..5372b9f0 100644 --- a/book/src/configuration.md +++ b/book/src/configuration.md @@ -78,6 +78,7 @@ The following elements can be configured: | `diagnostics` | The number of warnings and/or errors | | `selections` | The number of active selections | | `position` | The cursor position | +| `position-percentage` | The cursor position as a percentage of the total number of lines | | `spacer` | Inserts a space between elements (multiple/contiguous spacers may be specified) | ### `[editor.lsp]` Section diff --git a/helix-term/src/ui/statusline.rs b/helix-term/src/ui/statusline.rs index e9e478bf..df6d4800 100644 --- a/helix-term/src/ui/statusline.rs +++ b/helix-term/src/ui/statusline.rs @@ -1,4 +1,4 @@ -use helix_core::{coords_at_pos, encoding}; +use helix_core::{coords_at_pos, encoding, Position}; use helix_view::{ document::{Mode, SCRATCH_BUFFER_NAME}, graphics::Rect, @@ -143,6 +143,7 @@ where helix_view::editor::StatusLineElement::Diagnostics => render_diagnostics, helix_view::editor::StatusLineElement::Selections => render_selections, helix_view::editor::StatusLineElement::Position => render_position, + helix_view::editor::StatusLineElement::PositionPercentage => render_position_percentage, helix_view::editor::StatusLineElement::Spacer => render_spacer, } } @@ -251,19 +252,22 @@ where ); } -fn render_position<F>(context: &mut RenderContext, write: F) -where - F: Fn(&mut RenderContext, String, Option<Style>) + Copy, -{ - let position = coords_at_pos( +fn get_position(context: &RenderContext) -> Position { + coords_at_pos( context.doc.text().slice(..), context .doc .selection(context.view.id) .primary() .cursor(context.doc.text().slice(..)), - ); + ) +} +fn render_position<F>(context: &mut RenderContext, write: F) +where + F: Fn(&mut RenderContext, String, Option<Style>) + Copy, +{ + let position = get_position(context); write( context, format!(" {}:{} ", position.row + 1, position.col + 1), @@ -271,6 +275,19 @@ where ); } +fn render_position_percentage<F>(context: &mut RenderContext, write: F) +where + F: Fn(&mut RenderContext, String, Option<Style>) + Copy, +{ + let position = get_position(context); + let maxrows = context.doc.text().len_lines(); + write( + context, + format!("{}%", (position.row + 1) * 100 / maxrows), + None, + ); +} + fn render_file_encoding<F>(context: &mut RenderContext, write: F) where F: Fn(&mut RenderContext, String, Option<Style>) + Copy, diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index 5d82e0d4..f99924cf 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -247,6 +247,8 @@ pub enum StatusLineElement { /// The cursor position Position, + /// The cursor position as a percent of the total file + PositionPercentage, /// A single space Spacer, } |