aboutsummaryrefslogtreecommitdiffhomepage
path: root/share/functions/psub.fish
diff options
context:
space:
mode:
authorGravatar axel <axel@liljencrantz.se>2006-02-17 20:13:39 +1000
committerGravatar axel <axel@liljencrantz.se>2006-02-17 20:13:39 +1000
commit343cafef346543282b5b6e825bc8f9dd10028a48 (patch)
tree1bcf221ecb525c7aeadc8325e7b780d3656e544b /share/functions/psub.fish
parent95a01f3c8f15034433ffce368d8f2d13d925139c (diff)
Redo installation file structure, move lots of things to $PREFIX/share/fish
darcs-hash:20060217101339-ac50b-d93d2c620a4b7f75f05ff461a6edbee001da7613.gz
Diffstat (limited to 'share/functions/psub.fish')
-rw-r--r--share/functions/psub.fish54
1 files changed, 54 insertions, 0 deletions
diff --git a/share/functions/psub.fish b/share/functions/psub.fish
new file mode 100644
index 00000000..fd59cd95
--- /dev/null
+++ b/share/functions/psub.fish
@@ -0,0 +1,54 @@
+
+
+function psub -d (_ "Read from stdin into a file and output the filename. Remove the file when the command that called psub exits.")
+
+ set -l filename
+ set -l funcname
+
+ if count $argv >/dev/null
+ switch $argv[1]
+ case '-h*' --h --he --hel --help
+
+ help psub
+ return 0
+
+ case '*'
+ printf (_ "%s: Unknown argument '%s'\n") psub $argv[1]
+ return 1
+ end
+ end
+
+ if not status --is-command-substitution
+ echo psub: Not inside of command substitution >&2
+ return
+ end
+
+ # Find unique file name for writing output to
+ while true
+ set filename /tmp/.psub.(echo %self).(random);
+ if not test -e $filename
+ break;
+ 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 &
+
+ # Write filename to stdout
+ echo $filename
+
+ # Find unique function name
+ while true
+ set funcname __fish_psub_(random);
+ if not functions $funcname >/dev/null ^/dev/null
+ break;
+ end
+ end
+
+ # Make sure we erase file when caller exits
+ eval function $funcname --on-job-exit caller\; rm $filename\; functions -e $funcname\; end
+
+end