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