feat(commands): add `selection` variable expansion

pull/13467/head
rolo 2025-05-03 18:45:04 -07:00 committed by Michael Davis
parent ac3c6ebaff
commit ed2903b929
No known key found for this signature in database
2 changed files with 9 additions and 0 deletions

View File

@ -48,6 +48,7 @@ The following variables are supported:
| `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 primary selection of the currently focused document. |
Aside from editor variables, the following expansions may be used:

View File

@ -35,6 +35,8 @@ pub enum Variable {
LineEnding,
// The name of current buffers language as set in `languages.toml`
Language,
// Primary selection
Selection,
}
impl Variable {
@ -44,6 +46,7 @@ impl Variable {
Self::BufferName,
Self::LineEnding,
Self::Language,
Self::Selection,
];
pub const fn as_str(&self) -> &'static str {
@ -53,6 +56,7 @@ impl Variable {
Self::BufferName => "buffer_name",
Self::LineEnding => "line_ending",
Self::Language => "language",
Self::Selection => "selection",
}
}
@ -63,6 +67,7 @@ impl Variable {
"buffer_name" => Some(Self::BufferName),
"line_ending" => Some(Self::LineEnding),
"language" => Some(Self::Language),
"selection" => Some(Self::Selection),
_ => None,
}
}
@ -224,5 +229,8 @@ fn expand_variable(editor: &Editor, variable: Variable) -> Result<Cow<'static, s
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(),
)),
}
}