From bab7845ed4e81c2cbd85d9d74fa5b1971fa82fb1 Mon Sep 17 00:00:00 2001 From: Douglas <32344964+NotTheDr01ds@users.noreply.github.com> Date: Fri, 31 Jan 2025 16:45:29 -0500 Subject: [PATCH] Additional `clip copy` options (#1028) 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. --- stdlib-candidate/std-rfc/clip/mod.nu | 40 ++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) 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' +}