author | haftmann |
Tue, 05 Jun 2012 07:05:56 +0200 | |
changeset 48072 | ace701efe203 |
parent 45095 | bf7a8906c0cb |
child 48631 | 81c81f13d152 |
permissions | -rw-r--r-- |
29136 | 1 |
#!/bin/bash |
2 |
# |
|
3 |
# Author: Makarius |
|
4 |
# |
|
5 |
# Isabelle application wrapper |
|
6 |
||
7 |
THIS="$(cd "$(dirname "$0")"; pwd)" |
|
29149
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
8 |
THIS_APP="$(cd "$THIS/../.."; pwd)" |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
9 |
SUPER_APP="$(cd "$THIS/../../.."; pwd)" |
29136 | 10 |
|
29173
c14c9a41f1ac
PATH: /opt/local/bin is back again (required for latex etc.);
wenzelm
parents:
29149
diff
changeset
|
11 |
|
c14c9a41f1ac
PATH: /opt/local/bin is back again (required for latex etc.);
wenzelm
parents:
29149
diff
changeset
|
12 |
# sane environment defaults |
41643
10b0d338d99e
default UTF-8 locale, to work with funny base directory (e.g. Chinese);
wenzelm
parents:
41642
diff
changeset
|
13 |
|
29136 | 14 |
cd "$HOME" |
44985
272e8e4e4fc7
imitate Apple in setting initial shell PATH -- especially relevant for MacTeX, MacPorts etc.;
wenzelm
parents:
44948
diff
changeset
|
15 |
if [ -x /usr/libexec/path_helper ]; then |
272e8e4e4fc7
imitate Apple in setting initial shell PATH -- especially relevant for MacTeX, MacPorts etc.;
wenzelm
parents:
44948
diff
changeset
|
16 |
eval $(/usr/libexec/path_helper -s) |
272e8e4e4fc7
imitate Apple in setting initial shell PATH -- especially relevant for MacTeX, MacPorts etc.;
wenzelm
parents:
44948
diff
changeset
|
17 |
fi |
29136 | 18 |
|
41643
10b0d338d99e
default UTF-8 locale, to work with funny base directory (e.g. Chinese);
wenzelm
parents:
41642
diff
changeset
|
19 |
[ -z "$LANG" ] && export LANG=en_US.UTF-8 |
10b0d338d99e
default UTF-8 locale, to work with funny base directory (e.g. Chinese);
wenzelm
parents:
41642
diff
changeset
|
20 |
|
29136 | 21 |
|
29149
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
22 |
# settings support |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
23 |
|
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
24 |
function choosefrom () |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
25 |
{ |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
26 |
local RESULT="" |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
27 |
local FILE="" |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
28 |
|
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
29 |
for FILE in "$@" |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
30 |
do |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
31 |
[ -z "$RESULT" -a -e "$FILE" ] && RESULT="$FILE" |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
32 |
done |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
33 |
|
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
34 |
[ -z "$RESULT" ] && RESULT="$FILE" |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
35 |
echo "$RESULT" |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
36 |
} |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
37 |
|
29136 | 38 |
|
29149
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
39 |
# Isabelle |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
40 |
|
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
41 |
ISABELLE_TOOL="$(choosefrom \ |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
42 |
"$THIS/Isabelle/bin/isabelle" \ |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
43 |
"$SUPER_APP/Isabelle/bin/isabelle" \ |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
44 |
"$HOME/bin/isabelle" \ |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
45 |
isabelle)" |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
46 |
|
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
47 |
|
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
48 |
# Proof General / Emacs |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
49 |
|
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
50 |
PROOFGENERAL_EMACS="$(choosefrom \ |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
51 |
"$THIS/Emacs.app/Contents/MacOS/Emacs" \ |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
52 |
"$SUPER_APP/Emacs.app/Contents/MacOS/Emacs" \ |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
53 |
/Applications/Emacs.app/Contents/MacOS/Emacs \ |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
54 |
"")" |
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
55 |
|
33912 | 56 |
declare -a EMACS_OPTIONS=() |
29149
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
57 |
if [ -n "$PROOFGENERAL_EMACS" ]; then |
33912 | 58 |
EMACS_OPTIONS=(-p "$PROOFGENERAL_EMACS") |
29136 | 59 |
fi |
60 |
||
61 |
||
41642 | 62 |
# enforce fonts |
63 |
||
41644
a6c45c8d52fc
enforce STIXGeneral, which is preferred by PG 4.1;
wenzelm
parents:
41643
diff
changeset
|
64 |
if [ ! -f "$HOME/Library/Fonts/STIXGeneral.ttf" -a ! -f "$HOME/Library/Fonts/STIXGeneral.otf" ] |
41642 | 65 |
then |
41644
a6c45c8d52fc
enforce STIXGeneral, which is preferred by PG 4.1;
wenzelm
parents:
41643
diff
changeset
|
66 |
cp -f "$THIS/STIXv1.0.0/Fonts"/STIXGeneral* "$HOME/Library/Fonts/" |
41642 | 67 |
sleep 3 |
68 |
fi |
|
69 |
||
70 |
EMACS_OPTIONS["${#EMACS_OPTIONS[@]}"]="-x" |
|
71 |
EMACS_OPTIONS["${#EMACS_OPTIONS[@]}"]="true" |
|
72 |
||
73 |
||
29149
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
74 |
# run interface with error feedback |
29136 | 75 |
|
44881 | 76 |
ISABELLE_INTERFACE_CHOICE="$("$ISABELLE_TOOL" getenv -b ISABELLE_INTERFACE_CHOICE)" |
77 |
if [ "$ISABELLE_INTERFACE_CHOICE" != emacs -a "$ISABELLE_INTERFACE_CHOICE" != jedit ] |
|
78 |
then |
|
79 |
declare -a CHOICE |
|
80 |
CHOICE=($("$THIS/CocoaDialog.app/Contents/MacOS/CocoaDialog" dropdown \ |
|
81 |
--title Isabelle \ |
|
82 |
--text "Which Isabelle interface?" \ |
|
83 |
--items "Emacs / Proof General" "Isabelle/jEdit PIDE" \ |
|
84 |
--button2 "OK, do not ask again" --button1 "OK")) |
|
85 |
if [ "${CHOICE[1]}" = 0 ]; then |
|
86 |
ISABELLE_INTERFACE_CHOICE=emacs |
|
87 |
else |
|
88 |
ISABELLE_INTERFACE_CHOICE=jedit |
|
89 |
fi |
|
90 |
if [ "${CHOICE[0]}" = 2 ]; then |
|
91 |
ISABELLE_HOME_USER="$("$ISABELLE_TOOL" getenv -b ISABELLE_HOME_USER)" |
|
92 |
mkdir -p "$ISABELLE_HOME_USER/etc" |
|
93 |
( echo; echo "ISABELLE_INTERFACE_CHOICE=$ISABELLE_INTERFACE_CHOICE"; ) \ |
|
94 |
>> "$ISABELLE_HOME_USER/etc/settings" |
|
95 |
"$THIS/CocoaDialog.app/Contents/MacOS/CocoaDialog" ok-msgbox \ |
|
96 |
--title Isabelle \ |
|
97 |
--text Note \ |
|
98 |
--informative-text "ISABELLE_INTERFACE_CHOICE stored in $ISABELLE_HOME_USER/etc/settings" \ |
|
99 |
--no-cancel |
|
100 |
fi |
|
101 |
fi |
|
102 |
||
29136 | 103 |
OUTPUT="/tmp/isabelle$$.out" |
104 |
||
44881 | 105 |
if [ "$ISABELLE_INTERFACE_CHOICE" = emacs ]; then |
44880 | 106 |
( "$ISABELLE_TOOL" emacs "${EMACS_OPTIONS[@]}" "$@" ) > "$OUTPUT" 2>&1 |
107 |
RC=$? |
|
108 |
else |
|
45095
bf7a8906c0cb
retain output, which is required for non-existent JRE, for example (cf. b455e4f42c04);
wenzelm
parents:
44985
diff
changeset
|
109 |
( "$ISABELLE_TOOL" jedit "$@" ) > "$OUTPUT" 2>&1 |
44880 | 110 |
RC=$? |
111 |
fi |
|
29136 | 112 |
|
113 |
if [ "$RC" != 0 ]; then |
|
114 |
echo >> "$OUTPUT" |
|
115 |
echo "Return code: $RC" >> "$OUTPUT" |
|
116 |
fi |
|
117 |
||
29149
eae45c2a6811
more sophisticated MacOS interface script (mostly for Carbon Emacs);
wenzelm
parents:
29136
diff
changeset
|
118 |
if [ $(stat -f "%z" "$OUTPUT") != 0 ]; then |
29136 | 119 |
"$THIS/CocoaDialog.app/Contents/MacOS/CocoaDialog" textbox \ |
120 |
--title "Isabelle" \ |
|
121 |
--informative-text "Isabelle output" \ |
|
122 |
--text-from-file "$OUTPUT" \ |
|
123 |
--button1 "OK" |
|
124 |
fi |
|
125 |
||
126 |
rm -f "$OUTPUT" |
|
127 |
||
128 |
exit "$RC" |