From c7e0d4b1e5fe8fb4b1b7ac2310846a5cd05268f9 Mon Sep 17 00:00:00 2001 From: Tastaturtaste <31124715+Tastaturtaste@users.noreply.github.com> Date: Fri, 15 Mar 2024 14:59:21 +0100 Subject: [PATCH] Use the system clipboard only for explicit copy/paste operations. Addresses issue 11907 (#12179) # Description With the introduction of the system clipboard to nushell, many commands changed their behavior from using a local cut buffer to the system clipboard, perhaps surprisingly for many users. (See #11907) This PR changes most of them back to using the local cut buffer and introduces three commands (`CutSelectionSystem`, `CopySelectionSystem` and `PasteSystem`) to explicitly use the system clipboard. # User-Facing Changes Users who in the meantime already used the system clipboard now default back to the local clipboard. To be able to use the system clipboard again they have to append the suffix `system` to their current edit command specified in their keybindings. # Tests + Formatting The commands themselves are tested in `reedline`. The changes introduces in nushell are minimal and simply forward from a match on the keybinding name to the command. # After Submitting --------- Co-authored-by: Darren Schroeder <343840+fdncred@users.noreply.github.com> --- Cargo.lock | 2 +- Cargo.toml | 2 +- crates/nu-cli/Cargo.toml | 1 + crates/nu-cli/src/reedline_config.rs | 7 +++++++ .../nu-utils/src/sample_config/default_config.nu | 15 +++++++++------ 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 053bc099e0..1a03df41fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4503,7 +4503,7 @@ dependencies = [ [[package]] name = "reedline" version = "0.30.0" -source = "git+https://github.com/nushell/reedline?branch=main#0698712701418a7212ebf75d5724d72eccc4b43f" +source = "git+https://github.com/nushell/reedline?branch=main#dc7063ea4260b7a74ad055f9c34ed14a70333afe" dependencies = [ "arboard", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 0cbe2e91f2..956b52cb31 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -158,7 +158,7 @@ wasi = ["nu-cmd-lang/wasi"] static-link-openssl = ["dep:openssl", "nu-cmd-lang/static-link-openssl"] mimalloc = ["nu-cmd-lang/mimalloc", "dep:mimalloc"] -system-clipboard = ["reedline/system_clipboard"] +system-clipboard = ["reedline/system_clipboard", "nu-cli/system-clipboard"] # Stable (Default) which-support = ["nu-command/which-support", "nu-cmd-lang/which-support"] diff --git a/crates/nu-cli/Cargo.toml b/crates/nu-cli/Cargo.toml index a0e8421608..2d41435abb 100644 --- a/crates/nu-cli/Cargo.toml +++ b/crates/nu-cli/Cargo.toml @@ -45,3 +45,4 @@ which = { workspace = true } [features] plugin = [] +system-clipboard = ["reedline/system_clipboard"] diff --git a/crates/nu-cli/src/reedline_config.rs b/crates/nu-cli/src/reedline_config.rs index 65938dab8f..a3c929a381 100644 --- a/crates/nu-cli/src/reedline_config.rs +++ b/crates/nu-cli/src/reedline_config.rs @@ -1276,7 +1276,14 @@ fn edit_from_record( } "complete" => EditCommand::Complete, "cutselection" => EditCommand::CutSelection, + #[cfg(feature = "system-clipboard")] + "cutselectionsystem" => EditCommand::CutSelectionSystem, "copyselection" => EditCommand::CopySelection, + #[cfg(feature = "system-clipboard")] + "copyselectionsystem" => EditCommand::CopySelectionSystem, + "paste" => EditCommand::Paste, + #[cfg(feature = "system-clipboard")] + "pastesystem" => EditCommand::PasteSystem, "selectall" => EditCommand::SelectAll, e => { return Err(ShellError::UnsupportedConfigValue { diff --git a/crates/nu-utils/src/sample_config/default_config.nu b/crates/nu-utils/src/sample_config/default_config.nu index 911f7adb98..411825e775 100644 --- a/crates/nu-utils/src/sample_config/default_config.nu +++ b/crates/nu-utils/src/sample_config/default_config.nu @@ -824,19 +824,22 @@ $env.config = { mode: emacs event: { edit: capitalizechar } } + # The *_system keybindings require terminal support to pass these + # keybindings through to nushell and nushell compiled with the + # `system-clipboard` feature { - name: copy_selection + name: copy_selection_system modifier: control_shift keycode: char_c mode: emacs - event: { edit: copyselection } + event: { edit: copyselectionsystem } } { - name: cut_selection + name: cut_selection_system modifier: control_shift keycode: char_x mode: emacs - event: { edit: cutselection } + event: { edit: cutselectionsystem } } { name: select_all @@ -846,11 +849,11 @@ $env.config = { event: { edit: selectall } } { - name: paste + name: paste_system modifier: control_shift keycode: char_v mode: emacs - event: { edit: pastecutbufferbefore } + event: { edit: pastesystem } } ] }