Skip to content

Commit

Permalink
Additional clip copy options (#1028)
Browse files Browse the repository at this point in the history
Addition to `clip` module (#1009):

* Passes complex values through `table -e` to render properly
* By default, strips ansi codes, unless `--ansi (-a)` switch is used
* Adds a `clip prefex` command which can accept a prefix string like `# => ` to be added to the
beginning of each line.
  • Loading branch information
NotTheDr01ds authored Jan 31, 2025
1 parent 10b2262 commit bab7845
Showing 1 changed file with 38 additions and 2 deletions.
40 changes: 38 additions & 2 deletions stdlib-candidate/std-rfc/clip/mod.nu
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,29 @@
# ```nushell
# >_ "Hello" | clip copy
# ```
export def copy []: [string -> nothing] {
print -n $'(ansi osc)52;c;($in | encode base64)(ansi st)'
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 contenst of system clipboard
Expand All @@ -33,3 +54,18 @@ export def paste []: [nothing -> string] {
| decode base64
| decode
}

# Add a prefix to each line of the content to be copied
#
# # Example: Format output for Nushell doc
# 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'
}

0 comments on commit bab7845

Please sign in to comment.