Use the system clipboard only for explicit copy/paste operations. Addresses issue 11907 (#12179)

<!--
if this PR closes one or more issues, you can automatically link the PR
with
them by using one of the [*linking
keywords*](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword),
e.g.
- this PR should close #xxxx
- fixes #xxxx

you can also mention related issues, PRs or discussions!
-->

# Description
<!--
Thank you for improving Nushell. Please, check our [contributing
guide](../CONTRIBUTING.md) and talk to the core team before making major
changes.

Description of your pull request goes here. **Provide examples and/or
screenshots** if your changes affect the user experience.
-->
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
<!-- List of all changes that impact the user experience here. This
helps us keep track of breaking 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
<!--
Don't forget to add tests that cover your changes.

Make sure you've run and fixed any issues with these commands:

- `cargo fmt --all -- --check` to check standard code formatting (`cargo
fmt --all` applies these changes)
- `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used` to
check that you're using the standard code style
- `cargo test --workspace` to check that all tests pass (on Windows make
sure to [enable developer
mode](https://learn.microsoft.com/en-us/windows/apps/get-started/developer-mode-features-and-debugging))
- `cargo run -- -c "use std testing; testing run-tests --path
crates/nu-std"` to run the tests for the standard library

> **Note**
> from `nushell` you can also use the `toolkit` as follows
> ```bash
> use toolkit.nu # or use an `env_change` hook to activate it
automatically
> toolkit check pr
> ```
-->
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
<!-- If your PR had any user-facing changes, update [the
documentation](https://github.com/nushell/nushell.github.io) after the
PR is merged, if necessary. This will help us keep the docs up to date.
-->

---------

Co-authored-by: Darren Schroeder <343840+fdncred@users.noreply.github.com>
This commit is contained in:
Tastaturtaste 2024-03-15 14:59:21 +01:00 committed by GitHub
parent f6faf73e02
commit c7e0d4b1e5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 19 additions and 8 deletions

2
Cargo.lock generated
View file

@ -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",

View file

@ -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"]

View file

@ -45,3 +45,4 @@ which = { workspace = true }
[features]
plugin = []
system-clipboard = ["reedline/system_clipboard"]

View file

@ -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 {

View file

@ -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 }
}
]
}