changeset 6760:5a70b8c5db07

feat(commands): add `selection` variable expansion (#13467)
author RoloEdits <RoloEdits@gmail.com>
date Sun, 04 May 2025 06:43:09 -0700
parents f939397387e8
children 472d6cf701bb
files book/src/command-line.md helix-view/src/expansion.rs
diffstat 2 files changed, 9 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/book/src/command-line.md	Sun May 04 06:35:58 2025 -0700
+++ b/book/src/command-line.md	Sun May 04 06:43:09 2025 -0700
@@ -48,6 +48,7 @@
 | `buffer_name` | The relative path of the currently focused document. `[scratch]` is expanded instead for scratch buffers. |
 | `line_ending` | A string containing the line ending of the currently focused document. For example on Unix systems this is usually a line-feed character (`\n`) but on Windows systems this may be a carriage-return plus a line-feed (`\r\n`). The line ending kind of the currently focused document can be inspected with the `:line-ending` command. |
 | `language` | A string containing the language name of the currently focused document.|
+| `selection` | A string containing the contents of the primary selection of the currently focused document. |
 
 Aside from editor variables, the following expansions may be used:
 
--- a/helix-view/src/expansion.rs	Sun May 04 06:35:58 2025 -0700
+++ b/helix-view/src/expansion.rs	Sun May 04 06:43:09 2025 -0700
@@ -35,6 +35,8 @@
     LineEnding,
     // The name of current buffers language as set in `languages.toml`
     Language,
+    // Primary selection
+    Selection,
 }
 
 impl Variable {
@@ -44,6 +46,7 @@
         Self::BufferName,
         Self::LineEnding,
         Self::Language,
+        Self::Selection,
     ];
 
     pub const fn as_str(&self) -> &'static str {
@@ -53,6 +56,7 @@
             Self::BufferName => "buffer_name",
             Self::LineEnding => "line_ending",
             Self::Language => "language",
+            Self::Selection => "selection",
         }
     }
 
@@ -63,6 +67,7 @@
             "buffer_name" => Some(Self::BufferName),
             "line_ending" => Some(Self::LineEnding),
             "language" => Some(Self::Language),
+            "selection" => Some(Self::Selection),
             _ => None,
         }
     }
@@ -224,5 +229,8 @@
             Some(lang) => Cow::Owned(lang.to_owned()),
             None => Cow::Borrowed("text"),
         }),
+        Variable::Selection => Ok(Cow::Owned(
+            doc.selection(view.id).primary().fragment(text).to_string(),
+        )),
     }
 }