@@ -376,6 +376,7 @@ impl MappableCommand {
376 later, "Move forward in history",
376 later, "Move forward in history",
377 commit_undo_checkpoint, "Commit changes to new checkpoint",
377 commit_undo_checkpoint, "Commit changes to new checkpoint",
378 yank, "Yank selection",
378 yank, "Yank selection",
379+ yank_joined, "Join and yank selections",
379 yank_joined_to_clipboard, "Join and yank selections to clipboard",
380 yank_joined_to_clipboard, "Join and yank selections to clipboard",
380 yank_main_selection_to_clipboard, "Yank main selection to clipboard",
381 yank_main_selection_to_clipboard, "Yank main selection to clipboard",
381 yank_joined_to_primary_clipboard, "Join and yank selections to primary clipboard",
382 yank_joined_to_primary_clipboard, "Join and yank selections to primary clipboard",
@@ -3724,6 +3725,38 @@ fn yank(cx: &mut Context) {
3724 exit_select_mode(cx);
3725 exit_select_mode(cx);
3728+fn yank_joined_impl(editor: &mut Editor, separator: &str, register: char) {
3729+ let (view, doc) = current!(editor);
3730+ let text = doc.text().slice(..);
3732+ let selection = doc.selection(view.id);
3733+ let joined = selection
3735+ .fold(String::new(), |mut acc, fragment| {
3736+ if !acc.is_empty() {
3737+ acc.push_str(separator);
3739+ acc.push_str(&fragment);
3744+ "joined and yanked {} selection(s) to register {}",
3749+ editor.registers.write(register, vec![joined]);
3750+ editor.set_status(msg);
3753+fn yank_joined(cx: &mut Context) {
3754+ let line_ending = doc!(cx.editor).line_ending;
3755+ let register = cx.register.unwrap_or('"');
3756+ yank_joined_impl(cx.editor, line_ending.as_str(), register);
3757+ exit_select_mode(cx);
3727fn yank_joined_to_clipboard_impl(
3760fn yank_joined_to_clipboard_impl(
3728 editor: &mut Editor,
3761 editor: &mut Editor,
3729 separator: &str,
3762 separator: &str,