summaryrefslogtreecommitdiffstats
path: root/noise
diff options
context:
space:
mode:
Diffstat (limited to 'noise')
-rwxr-xr-xnoise36
1 files changed, 26 insertions, 10 deletions
diff --git a/noise b/noise
index 11976f68..cb4b8531 100755
--- a/noise
+++ b/noise
@@ -29,6 +29,12 @@ noise_set() { # set a variable
eval "export noise_$1='$2' ; $echo \
\"$1 changed from $old to $2\""
fi
+ ## write variable to $env
+ if grep -q "^$1=" "$env" ; then
+ sed -ri "s'^($1)=(.*)\$'\1=\'$2\''" $env
+ else
+ echo "$1='$2'" >>$env
+ fi
;;
esac
}
@@ -44,27 +50,35 @@ fail() {
}
cleanup() {
- rm -f $linefeed
kill $jobs
+ rm -f $linefeed $env
+ rmdir /tmp/noise/$$ 2>/dev/null
+ rmdir /tmp/noise 2>/dev/null
}
qname="`readlink -f "$0"`"
dirname="`dirname "$qname"`"
+export HOME='/home/shack'
if test -d "$dirname/modules" ; then
export NOISE_PATH="${NOISE_PATH+$NOISE_PATH:}$dirname/modules"
export NOISE_PATH="${NOISE_PATH+$NOISE_PATH:}$HOME/noise/modules"
fi
-linefeed="/tmp/noise-client-$$"
+mkdir -vp /tmp/noise/$$
+linefeed="/tmp/noise/$$/linefeed"
+env="/tmp/noise/$$/environment"
trap cleanup EXIT
mkfifo $linefeed
+touch $env
##
##
##
readline() {
{ read && echo "$REPLY" ; } | sed -rn "
s/[']//g
- s:^/([a-z]+)([[:space:]]+(.*))?$:command=\1; args='\3';:p;t
+ s/~%/\n/g
+ s/([^\\])([#<>])/\1\\\\\2/g
+ s:^/([a-z_]+)([[:space:]]+(.*))?$:command=\1; args='\3';:p;t
s@^([[:alnum:]_/+-]+):[[:space:]]*(.*)@command=lang; args='\1 \2';@p;t
s@^\![[:space:]]*(.*)@command=play; args='\1';@p;t
s:.*:command='$noise_default_command'; args='&';:p;t
@@ -73,19 +87,13 @@ readline() {
##
##
##
-export noise_prompt="READY.
-"
-export noise_default_command=espeak
-##
-##
-##
while echo -n "$noise_prompt" && eval "`readline`" ; do
## modcall
for dir in `echo "$NOISE_PATH" | tr : \ ` ; do
module="$dir/$command"
if test -x "$module" ; then
shift
- eval 'NOISE="$0" NOISE_linefeed="$linefeed" "$module"' "$args"
+ eval 'NOISE="$0" NOISE_pid="$$" NOISE_linefeed="$linefeed" "$module"' "$args"
continue 2
fi
done
@@ -110,6 +118,14 @@ EOF
##
##
exec >>$linefeed
+##
+##
+##
+echo '/set prompt "READY.~%"'
+echo '/set default_command espeak'
+##
+##
+##
while read ; do
case $REPLY in
(/quit) echo /quit ; exit ;;