diff --git a/share/functions/psub.fish b/share/functions/psub.fish index e6d3d0fb3..c40c90b10 100644 --- a/share/functions/psub.fish +++ b/share/functions/psub.fish @@ -4,17 +4,40 @@ function psub -d (N_ "Read from stdin into a file and output the filename. Remov set -l filename set -l funcname + set -l use_fifo 1 + set -l shortopt -o hf + set -l longopt -l help,file - if count $argv >/dev/null - switch $argv[1] - case '-h*' --h --he --hel --help + if getopt -T >/dev/null + set longopt + end + + if not getopt -n psub -Q $shortopt $longopt -- $argv + return 1 + end + + set -l tmp (getopt $shortopt $longopt -- $argv) + + eval set opt $tmp + + while count $opt >/dev/null + + switch $opt[1] + case -h --help __fish_print_help psub return 0 - case '*' - printf (_ "%s: Unknown argument '%s'\n") psub $argv[1] - return 1 + case -f --file + set use_fifo 0 + + case -- + set -e opt[1] + break + end + + set -e opt[1] + end if not status --is-command-substitution @@ -30,11 +53,15 @@ function psub -d (N_ "Read from stdin into a file and output the filename. Remov end end - # Write output to pipe. This needs to be done in the background so - # that the command substitution exits without needing to wait for - # all the commands to exit - mkfifo $filename - cat >$filename & + if test use_fifo = 1 + # Write output to pipe. This needs to be done in the background so + # that the command substitution exits without needing to wait for + # all the commands to exit + mkfifo $filename + cat >$filename & + else + cat >$filename + end # Write filename to stdout echo $filename