Shell script for editing mathematica input on Unix
- To: mathgroup at smc.vnet.net
- Subject: [mg13837] Shell script for editing mathematica input on Unix
- From: Tobias Oed <tobias at physics.odu.edu>
- Date: Sat, 29 Aug 1998 04:41:15 -0400
- Organization: Old Dominion University
- Sender: owner-wri-mathgroup at wolfram.com
Hello all,
This is for those of you who do not like notebooks and run mathematica
in a terminal window. On the Unix machine I use, it is impossible to
edit the input you type using the arrow keys which is pretty anoying,
so I wrote this little shell script (bash) which you may like.
Some comments first:
-) on your system the bash code probably resides in another place than
/opt/hppd/bin/bash, so you may have to edit the first line.
-) the input to mathematica goes through the named pipe
$HOME/Tmp/PipeToMath,
so you need the right to create named pipes (as far as I know, anybody
can do
this on HP and DEC Alpha machines) and create the Tmp directory. The
reason for
this state of affairs is that in this way you can SEND STUFF TO
MATHEMATICA
either by TYPING IN THE TERMINAL WINDOW (with editing possibilities -
arrow
keys only, no history yet...) OR FROM SOMEWHERE ELSE, for example NEDIT
via
KEY SHORT-CUTS.
-) The file .inputrc.math contains one single line to switch off the
completion
feature of read -er (bind "set disable-completion on" does not work in
the script).
This is it:
set disable-completion on
-) mathematica runs in a loop so you can restart the kernel in a sane
state by typing Quit. To exit the whole thing send an <EOF> character.
(Ctrl-D for standard terminal settings).
-) When you change the size of the window mathematica automatically
knows it.
-) I had to cheat a little around the input querry of mathematica, and
it's
identation; it is not perfect and you will see the problem if you type
multiline
input... (starting mathematica with the option -batchoutup may be a walk
arround but then it complains on startup:" Cannot initialize Motif
graphics ",
but I don't know what this means )
Here is the shell anyway:
#!/opt/hppd/bin/bash
# Tobias Oed and Old Dominion University 1998 if [ ! -p
$HOME/Tmp/PipeToMath ]; then
mknod $HOME/Tmp/PipeToMath p
while [ -p $HOME/Tmp/PipeToMath ]; do
math -runfirst '$BatchInput=False;
Unprotect[In];
HoldPattern[Format[In[l_]]]:= ColumnForm[{
"=:======================",
StringForm["In[``]:=\n",l]}];
Protect[In];
SetOptions["stdout",PageWidth->'$(($COLUMNS-1))']'
<$HOME/Tmp/PipeToMath
done &
echo $(tty) >$HOME/Tmp/PipeToMathTty
(
# Ignore ^C
trap "" SIGINT
# Let Mathematica know when the window size changes
trap 'echo SetOptions[\"stdout\",PageWidth-\>$(($COLUMNS-1))]\;'
SIGWINCH
# Disable Completion
INPUTRC=$HOME/.inputrc.math
while read -er ; do
echo "$REPLY"
done
rm $HOME/Tmp/PipeToMath
rm $HOME/Tmp/PipeToMathTty
) > $HOME/Tmp/PipeToMath
else
echo "Another mathpipe is already running starting standard
mathematica"
echo ""
math
fi
hope some of you will enjoy it, Tobias