aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwes adams2022-11-12 17:31:09 +0000
committerGitHub2022-11-12 17:31:09 +0000
commitfd585c1ee4ae0ac541f99b5e69a40833f5e3246d (patch)
treefdc6975abf46a54ad257571a5bb6bb29de4d834b
parent1f72d342493206b83ed82efd402aca712eaffbf8 (diff)
Statusline indicator to show number of selected chars (#4682)
Co-authored-by: wes adams <wadams@grayshift.com>
-rw-r--r--book/src/configuration.md1
-rw-r--r--helix-term/src/ui/statusline.rs15
-rw-r--r--helix-view/src/editor.rs3
3 files changed, 19 insertions, 0 deletions
diff --git a/book/src/configuration.md b/book/src/configuration.md
index 20abeba5..8713c3ff 100644
--- a/book/src/configuration.md
+++ b/book/src/configuration.md
@@ -103,6 +103,7 @@ The following statusline elements can be configured:
| `file-type` | The type of the opened file |
| `diagnostics` | The number of warnings and/or errors |
| `selections` | The number of active selections |
+| `primary-selection-length` | The number of characters currently in primary selection |
| `position` | The cursor position |
| `position-percentage` | The cursor position as a percentage of the total number of lines |
| `separator` | The string defined in `editor.statusline.separator` (defaults to `"│"`) |
diff --git a/helix-term/src/ui/statusline.rs b/helix-term/src/ui/statusline.rs
index b0e8ec5d..47bb1129 100644
--- a/helix-term/src/ui/statusline.rs
+++ b/helix-term/src/ui/statusline.rs
@@ -142,6 +142,9 @@ where
helix_view::editor::StatusLineElement::FileType => render_file_type,
helix_view::editor::StatusLineElement::Diagnostics => render_diagnostics,
helix_view::editor::StatusLineElement::Selections => render_selections,
+ helix_view::editor::StatusLineElement::PrimarySelectionLength => {
+ render_primary_selection_length
+ }
helix_view::editor::StatusLineElement::Position => render_position,
helix_view::editor::StatusLineElement::PositionPercentage => render_position_percentage,
helix_view::editor::StatusLineElement::TotalLineNumbers => render_total_line_numbers,
@@ -254,6 +257,18 @@ where
);
}
+fn render_primary_selection_length<F>(context: &mut RenderContext, write: F)
+where
+ F: Fn(&mut RenderContext, String, Option<Style>) + Copy,
+{
+ let tot_sel = context.doc.selection(context.view.id).primary().len();
+ write(
+ context,
+ format!(" {} char{} ", tot_sel, if tot_sel == 1 { "" } else { "s" }),
+ None,
+ );
+}
+
fn get_position(context: &RenderContext) -> Position {
coords_at_pos(
context.doc.text().slice(..),
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index db97cbb1..213141ff 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -328,6 +328,9 @@ pub enum StatusLineElement {
/// The number of selections (cursors)
Selections,
+ /// The number of characters currently in primary selection
+ PrimarySelectionLength,
+
/// The cursor position
Position,