aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeth Bromberger2022-07-26 06:05:12 +0000
committerGitHub2022-07-26 06:05:12 +0000
commit3dd2196e4f42b23fd30b4e028b96d5b1862603d6 (patch)
tree5214b9f213a224da2f8e0e428d86fb99d8259308
parentde8ade896771875482fed0a4da6c9cc62410edf5 (diff)
add position-percentage as a statusline indicator (#3168)
* added position-pct as a statusline indicator * removed unnecessary mutable reference * pct -> percent * percent -> percentage
-rw-r--r--book/src/configuration.md1
-rw-r--r--helix-term/src/ui/statusline.rs31
-rw-r--r--helix-view/src/editor.rs2
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,
}