aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/commands.rs
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term/src/commands.rs')
-rw-r--r--helix-term/src/commands.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index b7a22c7b..5fb4a70e 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -376,6 +376,7 @@ impl MappableCommand {
later, "Move forward in history",
commit_undo_checkpoint, "Commit changes to new checkpoint",
yank, "Yank selection",
+ yank_joined, "Join and yank selections",
yank_joined_to_clipboard, "Join and yank selections to clipboard",
yank_main_selection_to_clipboard, "Yank main selection to clipboard",
yank_joined_to_primary_clipboard, "Join and yank selections to primary clipboard",
@@ -3724,6 +3725,38 @@ fn yank(cx: &mut Context) {
exit_select_mode(cx);
}
+fn yank_joined_impl(editor: &mut Editor, separator: &str, register: char) {
+ let (view, doc) = current!(editor);
+ let text = doc.text().slice(..);
+
+ let selection = doc.selection(view.id);
+ let joined = selection
+ .fragments(text)
+ .fold(String::new(), |mut acc, fragment| {
+ if !acc.is_empty() {
+ acc.push_str(separator);
+ }
+ acc.push_str(&fragment);
+ acc
+ });
+
+ let msg = format!(
+ "joined and yanked {} selection(s) to register {}",
+ selection.len(),
+ register,
+ );
+
+ editor.registers.write(register, vec![joined]);
+ editor.set_status(msg);
+}
+
+fn yank_joined(cx: &mut Context) {
+ let line_ending = doc!(cx.editor).line_ending;
+ let register = cx.register.unwrap_or('"');
+ yank_joined_impl(cx.editor, line_ending.as_str(), register);
+ exit_select_mode(cx);
+}
+
fn yank_joined_to_clipboard_impl(
editor: &mut Editor,
separator: &str,