# 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' }