mirror of
https://github.com/nushell/nushell.git
synced 2025-04-24 05:08:29 +02:00
# Description Update examples with attributes. # User-Facing Changes `std-rfc` commands now have examples. # Tests + Formatting N/A # After Submitting N/A
75 lines
1.8 KiB
Plaintext
75 lines
1.8 KiB
Plaintext
# 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
|
|
let text = match ($input | describe -d | get type) {
|
|
$type if $type in [ table, record, list ] => {
|
|
$input | table -e
|
|
}
|
|
_ => {$input}
|
|
}
|
|
|
|
let do_strip_ansi = match $ansi {
|
|
true => {{||}}
|
|
false => {{|| ansi strip }}
|
|
}
|
|
|
|
let output = (
|
|
$text
|
|
| do $do_strip_ansi
|
|
| encode base64
|
|
)
|
|
|
|
print -n $'(ansi osc)52;c;($output)(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'
|
|
}
|