Added cmdcopy terminal output copy shortcut
This commit is contained in:
parent
e240e96f29
commit
1210661b02
|
@ -0,0 +1,71 @@
|
||||||
|
cmdcopy() { # Terminal output copying shortcut
|
||||||
|
#
|
||||||
|
# USAGE
|
||||||
|
#
|
||||||
|
# cmdcopy [-p <preamble>] <cmd>
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# Formats the output of <cmd> to include "$ <cmd>\n" on the
|
||||||
|
# first line for easy pasting. When -p is set, <preamble>
|
||||||
|
# is added to the beginning of every resulting line.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# OPTIONS
|
||||||
|
#
|
||||||
|
# -p <preamble> Add <preamble> as a string to the
|
||||||
|
# beginning of every line.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# ENVIRONMENT
|
||||||
|
#
|
||||||
|
# cmdcopy_clipprog Specify the clipboard management
|
||||||
|
# program to use. Program must
|
||||||
|
# accept content on stdin.
|
||||||
|
# Default: `wl-copy`
|
||||||
|
|
||||||
|
|
||||||
|
# Default clipboard management program
|
||||||
|
# NOTE: Must accept final output on stdin
|
||||||
|
default_clipprog="wl-copy"
|
||||||
|
|
||||||
|
# Set $clipprog to the contents of $cmdcopy_clipprog. If $cmdcopy_clipprog
|
||||||
|
# is empty or unset, set $clipprog to the contents of $default_clipprog instead.
|
||||||
|
clipprog="${cmdcopy_clipprog:-$default_clipprog}"
|
||||||
|
|
||||||
|
|
||||||
|
# Parse command line options
|
||||||
|
while getopts :p: opt; do
|
||||||
|
case $opt in
|
||||||
|
p)
|
||||||
|
preamble="$OPTARG"
|
||||||
|
;;
|
||||||
|
\?)
|
||||||
|
echo "E: Unknown option: -$OPTARG"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
:)
|
||||||
|
echo "E: Option -$OPTARG requires an argument"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Remove parsed options from $@
|
||||||
|
shift $((OPTIND -1))
|
||||||
|
|
||||||
|
|
||||||
|
# Run the command, capturing stdout and stderr
|
||||||
|
cmd_output="$("$@" 2>&1)"
|
||||||
|
|
||||||
|
# Add preamble
|
||||||
|
final_output="$(awk -v preamble="$preamble" '{print preamble $0}' <(printf '%s\n\n%s' "$ $*" "$cmd_output"))"
|
||||||
|
|
||||||
|
|
||||||
|
# Send final output to $clipprog
|
||||||
|
printf '%s' "$final_output" | $clipprog
|
||||||
|
|
||||||
|
# Print command output to the terminal for user feedback
|
||||||
|
printf '%s\n\ncmdcopy: Command output sent to: %s\n\n' "$final_output" "$clipprog"
|
||||||
|
}
|
Loading…
Reference in New Issue