diff --git a/stdlib-candidate/std-rfc/clip/mod.nu b/stdlib-candidate/std-rfc/clip/mod.nu index 170b8eb..dd96afe 100644 --- a/stdlib-candidate/std-rfc/clip/mod.nu +++ b/stdlib-candidate/std-rfc/clip/mod.nu @@ -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 @@ -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' +}