Jesús Pérez d9ef2f0d5b
Some checks failed
Build and Test / Validate Setup (push) Has been cancelled
Build and Test / Build (darwin-amd64) (push) Has been cancelled
Build and Test / Build (darwin-arm64) (push) Has been cancelled
Build and Test / Build (linux-amd64) (push) Has been cancelled
Build and Test / Build (windows-amd64) (push) Has been cancelled
Build and Test / Build (linux-arm64) (push) Has been cancelled
Build and Test / Security Audit (push) Has been cancelled
Build and Test / Package Results (push) Has been cancelled
Build and Test / Quality Gate (push) Has been cancelled
Nightly Build / Check for Changes (push) Has been cancelled
Nightly Build / Validate Setup (push) Has been cancelled
Nightly Build / Nightly Build (darwin-amd64) (push) Has been cancelled
Nightly Build / Nightly Build (darwin-arm64) (push) Has been cancelled
Nightly Build / Nightly Build (linux-amd64) (push) Has been cancelled
Nightly Build / Nightly Build (windows-amd64) (push) Has been cancelled
Nightly Build / Nightly Build (linux-arm64) (push) Has been cancelled
Nightly Build / Create Nightly Pre-release (push) Has been cancelled
Nightly Build / Notify Build Status (push) Has been cancelled
Nightly Build / Nightly Maintenance (push) Has been cancelled
chore: update all plugins to Nushell 0.111.0
- Bump all 18 plugins from 0.110.0 to 0.111.0
  - Update rust-toolchain.toml channel to 1.93.1 (nu 0.111.0 requires ≥1.91.1)

  Fixes:
  - interprocess pin =2.2.x → ^2.3.1 in nu_plugin_mcp, nu_plugin_nats, nu_plugin_typedialog
    (required by nu-plugin-core 0.111.0)
  - nu_plugin_typedialog: BackendType::Web initializer — add open_browser: false field
  - nu_plugin_auth: implement missing user_info_to_value helper referenced in tests

  Scripts:
  - update_all_plugins.nu: fix [package].version update on minor bumps; add [dev-dependencies]
    pass; add nu-plugin-test-support to managed crates
  - download_nushell.nu: rustup override unset before rm -rf on nushell dir replace;
    fix unclosed ) in string interpolation
2026-03-11 03:22:42 +00:00

76 lines
2.3 KiB
Rust

use crate::ClipboardPlugins;
use crate::clipboard::clipboard::Clipboard;
use crate::{clipboard::clipboard::create_clipboard, utils::json};
use nu_plugin::{EngineInterface, EvaluatedCall, PluginCommand};
use nu_protocol::{Category, IntoPipelineData, LabeledError, PipelineData, Signature, Type, Value};
pub struct ClipboardCopy;
impl ClipboardCopy {
pub fn new() -> ClipboardCopy {
ClipboardCopy {}
}
fn format_json(input: &Value) -> Result<String, LabeledError> {
let json_value =
json::value_to_json_value(input).map(|v| nu_json::to_string_with_indent(&v, 4));
match json_value {
Ok(Ok(text)) => Ok(text.to_owned()), // Return the owned String
Ok(Err(err)) => Err(LabeledError::new(format!(
"JSON Serialization Error: {}",
err,
))),
Err(err) => Err(LabeledError::new(format!("JSON Conversion Error: {}", err))),
}
}
fn copy(engine: &EngineInterface, input: &Value) -> Result<(), LabeledError> {
let text: Result<String, LabeledError> = match input {
Value::String { val, .. } => Ok(val.to_owned()),
_ => Self::format_json(input),
};
match text.map(|text| {
create_clipboard(engine.get_plugin_config().ok().unwrap_or(None))
.copy_text(text.as_str())
}) {
Ok(Ok(_)) => Ok(()),
Err(err) | Ok(Err(err)) => Err(err),
}
}
}
impl PluginCommand for ClipboardCopy {
type Plugin = ClipboardPlugins;
fn name(&self) -> &str {
"clipboard copy"
}
fn signature(&self) -> Signature {
Signature::build("clipboard copy")
.input_output_types(vec![(Type::Any, Type::Any)])
.category(Category::System)
}
fn run(
&self,
_plugin: &Self::Plugin,
engine: &EngineInterface,
call: &EvaluatedCall,
input: PipelineData,
) -> Result<PipelineData, LabeledError> {
let value = input.into_value(call.head);
match value {
Ok(value) => {
Self::copy(engine, &value)?;
Ok(value.into_pipeline_data())
}
Err(err) => Err(LabeledError::new(err.to_string())),
}
}
fn description(&self) -> &str {
"copy the input into the clipboard"
}
}