Promote clip from std-rfc to std (#15877)

# Description
Promotes the clip module from `std-rfc` to `std`. Whether we want to
promote other modules as well (probably?) is up for discussion but I
thought I would get the ball rolling with this one.

# User-Facing Changes
* The `clip` module has been promoted from `std-rfc` to `std`. Using the
`std-rfc` version of clip modules will give a deprecation warning
instructing you to switch to the `std` version.

# Tests + Formatting
N/A

# After Submitting
N/A
This commit is contained in:
132ikl 2025-06-12 19:26:48 -04:00 committed by GitHub
parent f8b0af70ff
commit ebcb26f9d5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 88 additions and 33 deletions

View File

@ -64,6 +64,7 @@ pub fn load_standard_library(
"std/testing",
include_str!("../std/testing/mod.nu"),
),
("mod.nu", "std/clip", include_str!("../std/clip/mod.nu")),
];
for (filename, std_subdir_name, content) in std_submodules.drain(..) {

View File

@ -1,48 +1,38 @@
# The clip module has been added to std. This std-rfc module is deprecated and will be removed.
#
# Commands for interacting with the system clipboard
#
# > These commands require your terminal to support OSC 52
# > Terminal multiplexers such as screen, tmux, zellij etc may interfere with this command
module std-clip {
export use std/clip *
}
use std-clip
# Copy input to system clipboard
@deprecated "The clip module has been moved to std. Please use the std version instead of the std-rfc version." --since 0.105.0 --remove 0.107.0
@example "Copy a string to the clipboard" {
"Hello" | clip copy
}
export def copy [
--ansi (-a) # Copy ansi formatting
]: any -> nothing {
let input = $in | collect
if not $ansi {
$env.config.use_ansi_coloring = false
}
let text = match ($input | describe -d | get type) {
$type if $type in [ table, record, list ] => {
$input | table -e
}
_ => {$input}
}
print -n $'(ansi osc)52;c;($text | encode base64)(ansi st)'
std-clip copy --ansi=$ansi
}
# Paste contents of system clipboard
@deprecated "The clip module has been moved to std. Please use the std version instead of the std-rfc version." --since 0.105.0 --remove 0.107.0
@example "Paste a string from the clipboard" {
clip paste
} --result "Hello"
export def paste []: [nothing -> string] {
try {
term query $'(ansi osc)52;c;?(ansi st)' -p $'(ansi osc)52;c;' -t (ansi st)
} catch {
error make -u {
msg: "Terminal did not responds to OSC 52 paste request."
help: $"Check if your terminal supports OSC 52."
}
}
| decode
| decode base64
| decode
std-clip paste
}
# Add a prefix to each line of the content to be copied
@deprecated "The clip module has been moved to std. Please use the std version instead of the std-rfc version." --since 0.105.0 --remove 0.107.0
@example "Format output for Nushell doc" {
[1 2 3] | clip prefix '# => '
} --result "# => ╭───┬───╮
@ -55,12 +45,5 @@ export def paste []: [nothing -> string] {
ls | clip prefix '# => ' | clip copy
}
export def prefix [prefix: string]: any -> string {
let input = $in | collect
match ($input | describe -d | get type) {
$type if $type in [ table, record, list ] => {
$input | table -e
}
_ => {$input}
}
| str replace -r --all '(?m)(.*)' $'($prefix)$1'
std-clip prefix $prefix
}

View File

@ -0,0 +1,66 @@
# Commands for interacting with the system clipboard
#
# > These commands require your terminal to support OSC 52
# > Terminal multiplexers such as screen, tmux, zellij etc may interfere with this command
# Copy input to system clipboard
@example "Copy a string to the clipboard" {
"Hello" | clip copy
}
export def copy [
--ansi (-a) # Copy ansi formatting
]: any -> nothing {
let input = $in | collect
if not $ansi {
$env.config.use_ansi_coloring = false
}
let text = match ($input | describe -d | get type) {
$type if $type in [ table, record, list ] => {
$input | table -e
}
_ => {$input}
}
print -n $'(ansi osc)52;c;($text | encode base64)(ansi st)'
}
# Paste contents of system clipboard
@example "Paste a string from the clipboard" {
clip paste
} --result "Hello"
export def paste []: [nothing -> string] {
try {
term query $'(ansi osc)52;c;?(ansi st)' -p $'(ansi osc)52;c;' -t (ansi st)
} catch {
error make -u {
msg: "Terminal did not responds to OSC 52 paste request."
help: $"Check if your terminal supports OSC 52."
}
}
| decode
| decode base64
| decode
}
# Add a prefix to each line of the content to be copied
@example "Format output for Nushell doc" {
[1 2 3] | clip prefix '# => '
} --result "# => ╭───┬───╮
# => │ 0 │ 1 │
# => │ 1 │ 2 │
# => │ 2 │ 3 │
# => ╰───┴───╯
# => "
@example "Format output for Nushell doc and copy it" {
ls | clip prefix '# => ' | clip copy
}
export def prefix [prefix: string]: any -> string {
let input = $in | collect
match ($input | describe -d | get type) {
$type if $type in [ table, record, list ] => {
$input | table -e
}
_ => {$input}
}
| str replace -r --all '(?m)(.*)' $'($prefix)$1'
}

View File

@ -37,11 +37,16 @@ def get-annotated [
source `($file)`
scope commands
| select name attributes
| where attributes != []
| to nuon
'
| from nuon
| update attributes { get name | each {|x| $valid_annotations | get -i $x } | first }
| each {|e|
# filter commands with test attributes, and map attributes to annotation name
let test_attributes = $e.attributes.name | each {|x| $valid_annotations | get -i $x }
if ($test_attributes | is-not-empty) {
$e | update attributes $test_attributes.0
}
}
| rename function_name annotation
}