Admin/ProofGeneral/interface
author wenzelm
Thu, 26 Nov 2009 14:54:56 +0100
changeset 33919 14ff44e21bec
parent 33918 ea0e7ac4aaad
permissions -rwxr-xr-x
adhoc delay after font installation -- increases chance that Emacs will actually see them;
wenzelm@33917
     1
#!/usr/bin/env bash
wenzelm@33917
     2
#
wenzelm@33917
     3
# interface,v 9.1 2008/02/06 15:40:45 makarius Exp
wenzelm@33917
     4
#
wenzelm@33917
     5
# Proof General interface wrapper for Isabelle.
wenzelm@33917
     6
wenzelm@33917
     7
wenzelm@33917
     8
## self references
wenzelm@33917
     9
wenzelm@33917
    10
THIS="$(cd "$(dirname "$0")"; pwd)"
wenzelm@33917
    11
SUPER="$(cd "$THIS/.."; pwd)"
wenzelm@33917
    12
wenzelm@33917
    13
wenzelm@33917
    14
## diagnostics
wenzelm@33917
    15
wenzelm@33917
    16
usage()
wenzelm@33917
    17
{
wenzelm@33917
    18
  echo
wenzelm@33917
    19
  echo "Usage: Isabelle [OPTIONS] [FILES ...]"
wenzelm@33917
    20
  echo
wenzelm@33917
    21
  echo "  Options are:"
wenzelm@33917
    22
  echo "    -I BOOL      use Isabelle/Isar (default: true, implied by -P true)"
wenzelm@33917
    23
  echo "    -L NAME      abbreviates -l NAME -k NAME"
wenzelm@33917
    24
  echo "    -P BOOL      actually start Proof General (default true), otherwise"
wenzelm@33917
    25
  echo "                 run plain tty session"
wenzelm@33917
    26
  echo "    -U BOOL      enable Unicode (UTF-8) communication (default true)"
wenzelm@33917
    27
  echo "    -X BOOL      configure the X-Symbol package on startup (default true)"
wenzelm@33917
    28
  echo "    -f SIZE      set X-Symbol font size (default 12)"
wenzelm@33917
    29
  echo "    -g GEOMETRY  specify Emacs geometry"
wenzelm@33917
    30
  echo "    -k NAME      use specific isar-keywords for named logic"
wenzelm@33917
    31
  echo "    -l NAME      logic image name (default \$ISABELLE_LOGIC=$ISABELLE_LOGIC)"
wenzelm@33917
    32
  echo "    -m MODE      add print mode for output"
wenzelm@33917
    33
  echo "    -p NAME      Emacs program name (default emacs)"
wenzelm@33917
    34
  echo "    -u BOOL      use personal .emacs file (default true)"
wenzelm@33917
    35
  echo "    -w BOOL      use window system (default true)"
wenzelm@33917
    36
  echo "    -x BOOL      enable the X-Symbol package on startup (default false)"
wenzelm@33917
    37
  echo
wenzelm@33917
    38
  echo "Starts Proof General for Isabelle with theory and proof FILES"
wenzelm@33917
    39
  echo "(default Scratch.thy)."
wenzelm@33917
    40
  echo
wenzelm@33917
    41
  echo "  PROOFGENERAL_OPTIONS=$PROOFGENERAL_OPTIONS"
wenzelm@33917
    42
  echo
wenzelm@33917
    43
  exit 1
wenzelm@33917
    44
}
wenzelm@33917
    45
wenzelm@33917
    46
fail()
wenzelm@33917
    47
{
wenzelm@33917
    48
  echo "$1" >&2
wenzelm@33917
    49
  exit 2
wenzelm@33917
    50
}
wenzelm@33917
    51
wenzelm@33917
    52
wenzelm@33917
    53
## process command line
wenzelm@33917
    54
wenzelm@33917
    55
# options
wenzelm@33917
    56
wenzelm@33917
    57
ISABELLE_OPTIONS=""
wenzelm@33917
    58
ISAR="true"
wenzelm@33917
    59
START_PG="true"
wenzelm@33917
    60
GEOMETRY=""
wenzelm@33917
    61
KEYWORDS=""
wenzelm@33917
    62
LOGIC="$ISABELLE_LOGIC"
wenzelm@33917
    63
PROGNAME="emacs"
wenzelm@33917
    64
INITFILE="true"
wenzelm@33917
    65
WINDOWSYSTEM="true"
wenzelm@33917
    66
XSYMBOL=""
wenzelm@33917
    67
XSYMBOL_SETUP=true
wenzelm@33917
    68
XSYMBOL_FONTSIZE="12"
wenzelm@33917
    69
UNICODE=""
wenzelm@33917
    70
wenzelm@33917
    71
getoptions()
wenzelm@33917
    72
{
wenzelm@33917
    73
  OPTIND=1
wenzelm@33917
    74
  while getopts "I:L:P:U:X:f:g:k:l:m:p:u:w:x:" OPT
wenzelm@33917
    75
  do
wenzelm@33917
    76
    case "$OPT" in
wenzelm@33917
    77
      I)
wenzelm@33917
    78
        ISAR="$OPTARG"
wenzelm@33917
    79
        ;;
wenzelm@33917
    80
      L)
wenzelm@33917
    81
        KEYWORDS="$OPTARG"
wenzelm@33917
    82
        LOGIC="$OPTARG"
wenzelm@33917
    83
        ;;
wenzelm@33917
    84
      P)
wenzelm@33917
    85
        START_PG="$OPTARG"
wenzelm@33917
    86
        ;;
wenzelm@33917
    87
      U)
wenzelm@33917
    88
        UNICODE="$OPTARG"
wenzelm@33917
    89
        ;;
wenzelm@33917
    90
      X)
wenzelm@33917
    91
        XSYMBOL_SETUP="$OPTARG"
wenzelm@33917
    92
        ;;
wenzelm@33917
    93
      f)
wenzelm@33917
    94
        XSYMBOL_FONTSIZE="$OPTARG"
wenzelm@33917
    95
        ;;
wenzelm@33917
    96
      g)
wenzelm@33917
    97
        GEOMETRY="$OPTARG"
wenzelm@33917
    98
        ;;
wenzelm@33917
    99
      k)
wenzelm@33917
   100
        KEYWORDS="$OPTARG"
wenzelm@33917
   101
        ;;
wenzelm@33917
   102
      l)
wenzelm@33917
   103
        LOGIC="$OPTARG"
wenzelm@33917
   104
        ;;
wenzelm@33917
   105
      m)
wenzelm@33917
   106
        if [ -z "$ISABELLE_OPTIONS" ]; then
wenzelm@33917
   107
          ISABELLE_OPTIONS="-m $OPTARG"
wenzelm@33917
   108
        else
wenzelm@33917
   109
          ISABELLE_OPTIONS="$ISABELLE_OPTIONS -m $OPTARG"
wenzelm@33917
   110
        fi
wenzelm@33917
   111
        ;;
wenzelm@33917
   112
      p)
wenzelm@33917
   113
        PROGNAME="$OPTARG"
wenzelm@33917
   114
        ;;
wenzelm@33917
   115
      u)
wenzelm@33917
   116
        INITFILE="$OPTARG"
wenzelm@33917
   117
        ;;
wenzelm@33917
   118
      w)
wenzelm@33917
   119
        WINDOWSYSTEM="$OPTARG"
wenzelm@33917
   120
        ;;
wenzelm@33917
   121
      x)
wenzelm@33917
   122
        XSYMBOL="$OPTARG"
wenzelm@33917
   123
        ;;
wenzelm@33917
   124
      \?)
wenzelm@33917
   125
        usage
wenzelm@33917
   126
        ;;
wenzelm@33917
   127
    esac
wenzelm@33917
   128
  done
wenzelm@33917
   129
}
wenzelm@33917
   130
wenzelm@33917
   131
eval "OPTIONS=($PROOFGENERAL_OPTIONS)"
wenzelm@33917
   132
getoptions "${OPTIONS[@]}"
wenzelm@33917
   133
wenzelm@33917
   134
getoptions "$@"
wenzelm@33917
   135
shift $(($OPTIND - 1))
wenzelm@33917
   136
wenzelm@33917
   137
wenzelm@33917
   138
# args
wenzelm@33917
   139
wenzelm@33917
   140
declare -a FILES=()
wenzelm@33917
   141
wenzelm@33917
   142
if [ "$#" -eq 0 ]; then
wenzelm@33917
   143
  FILES["${#FILES[@]}"]="Scratch.thy"
wenzelm@33917
   144
else
wenzelm@33917
   145
  while [ "$#" -gt 0 ]; do
wenzelm@33917
   146
    FILES["${#FILES[@]}"]="$1"
wenzelm@33917
   147
    shift
wenzelm@33917
   148
  done
wenzelm@33917
   149
fi
wenzelm@33917
   150
wenzelm@33917
   151
wenzelm@33917
   152
## smart X11 font installation
wenzelm@33917
   153
wenzelm@33917
   154
function checkfonts ()
wenzelm@33917
   155
{
wenzelm@33917
   156
  XLSFONTS=$(xlsfonts -fn "-xsymb-xsymb0-*" 2>&1) || return 1
wenzelm@33917
   157
wenzelm@33917
   158
  case "$XLSFONTS" in
wenzelm@33917
   159
    xlsfonts:*)
wenzelm@33917
   160
      return 1
wenzelm@33917
   161
      ;;
wenzelm@33917
   162
  esac
wenzelm@33917
   163
wenzelm@33917
   164
  return 0
wenzelm@33917
   165
}
wenzelm@33917
   166
wenzelm@33917
   167
function installfonts ()
wenzelm@33917
   168
{
wenzelm@33917
   169
  checkfonts "$XSYMBOL_PATTERN" || eval $XSYMBOL_INSTALLFONTS
wenzelm@33917
   170
}
wenzelm@33917
   171
wenzelm@33917
   172
wenzelm@33917
   173
## main
wenzelm@33917
   174
wenzelm@33917
   175
# Isabelle2008 compatibility
wenzelm@33917
   176
[ -z "$ISABELLE_PROCESS" ] && export ISABELLE_PROCESS="$ISABELLE"
wenzelm@33917
   177
[ -z "$ISABELLE_TOOL" ] && export ISABELLE_TOOL="$ISATOOL"
wenzelm@33917
   178
wenzelm@33917
   179
if [ "$START_PG" = false ]; then
wenzelm@33917
   180
wenzelm@33917
   181
  [ "$ISAR" = true ] && ISABELLE_OPTIONS="$ISABELLE_OPTIONS -I"
wenzelm@33917
   182
  exec "$ISABELLE_PROCESS" $ISABELLE_OPTIONS "$LOGIC"
wenzelm@33917
   183
wenzelm@33917
   184
else
wenzelm@33917
   185
wenzelm@33917
   186
  declare -a ARGS=()
wenzelm@33917
   187
wenzelm@33917
   188
  if [ -n "$GEOMETRY" ]; then
wenzelm@33917
   189
    ARGS["${#ARGS[@]}"]="-geometry"
wenzelm@33917
   190
    ARGS["${#ARGS[@]}"]="$GEOMETRY"
wenzelm@33917
   191
  fi
wenzelm@33917
   192
wenzelm@33917
   193
  [ "$INITFILE" = false ] && ARGS["${#ARGS[@]}"]="-q"
wenzelm@33917
   194
wenzelm@33917
   195
  if [ "$WINDOWSYSTEM" = false ]; then
wenzelm@33917
   196
    ARGS["${#ARGS[@]}"]="-nw"
wenzelm@33917
   197
    XSYMBOL=false
wenzelm@33917
   198
  elif [ -z "$DISPLAY" ]; then
wenzelm@33917
   199
    XSYMBOL=false
wenzelm@33917
   200
  else
wenzelm@33917
   201
    [ -n "$XSYMBOL_INSTALLFONTS" -a "$XSYMBOL_SETUP" = true ] && installfonts
wenzelm@33917
   202
  fi
wenzelm@33917
   203
wenzelm@33918
   204
  if [ $(uname -s) = Darwin -a -d "$HOME/Library/Fonts" ]
wenzelm@33918
   205
  then
wenzelm@33918
   206
    if [ ! -f "$HOME/Library/Fonts/XSymb0Medium.ttf" -o ! -f "$HOME/Library/Fonts/XSymb1Medium.ttf" ]
wenzelm@33918
   207
    then
wenzelm@33918
   208
      cp -f "$SUPER/x-symbol/etc/fonts-ttf/XSymb0Medium.ttf" "$HOME/Library/Fonts/"
wenzelm@33918
   209
      cp -f "$SUPER/x-symbol/etc/fonts-ttf/XSymb1Medium.ttf" "$HOME/Library/Fonts/"
wenzelm@33919
   210
      sleep 3
wenzelm@33918
   211
    fi
wenzelm@33918
   212
  fi
wenzelm@33918
   213
wenzelm@33917
   214
  ARGS["${#ARGS[@]}"]="-l"
wenzelm@33917
   215
  ARGS["${#ARGS[@]}"]="$SUPER/isar/interface-setup.el"
wenzelm@33917
   216
wenzelm@33917
   217
  if [ -n "$KEYWORDS" ]; then
wenzelm@33917
   218
    if [ -f "$ISABELLE_HOME_USER/etc/isar-keywords-$KEYWORDS.el" ]; then
wenzelm@33917
   219
      ARGS["${#ARGS[@]}"]="-l"
wenzelm@33917
   220
      ARGS["${#ARGS[@]}"]="$ISABELLE_HOME_USER/etc/isar-keywords-$KEYWORDS.el"
wenzelm@33917
   221
    elif [ -f "$ISABELLE_HOME/etc/isar-keywords-$KEYWORDS.el" ]; then
wenzelm@33917
   222
      ARGS["${#ARGS[@]}"]="-l"
wenzelm@33917
   223
      ARGS["${#ARGS[@]}"]="$ISABELLE_HOME/etc/isar-keywords-$KEYWORDS.el"
wenzelm@33917
   224
    else
wenzelm@33917
   225
      fail "No isar-keywords file for '$KEYWORDS'"
wenzelm@33917
   226
    fi
wenzelm@33917
   227
  elif [ -f "$ISABELLE_HOME_USER/etc/isar-keywords.el" ]; then
wenzelm@33917
   228
    ARGS["${#ARGS[@]}"]="-l"
wenzelm@33917
   229
    ARGS["${#ARGS[@]}"]="$ISABELLE_HOME_USER/etc/isar-keywords.el"
wenzelm@33917
   230
  elif [ -f "$ISABELLE_HOME/etc/isar-keywords.el" ]; then
wenzelm@33917
   231
    ARGS["${#ARGS[@]}"]="-l"
wenzelm@33917
   232
    ARGS["${#ARGS[@]}"]="$ISABELLE_HOME/etc/isar-keywords.el"
wenzelm@33917
   233
  fi
wenzelm@33917
   234
wenzelm@33917
   235
  for FILE in "$ISABELLE_HOME/etc/proofgeneral-settings.el" \
wenzelm@33917
   236
      "$ISABELLE_HOME_USER/etc/proofgeneral-settings.el"
wenzelm@33917
   237
  do
wenzelm@33917
   238
    if [ -f "$FILE" ]; then
wenzelm@33917
   239
      ARGS["${#ARGS[@]}"]="-l"
wenzelm@33917
   240
      ARGS["${#ARGS[@]}"]="$FILE"
wenzelm@33917
   241
    fi
wenzelm@33917
   242
  done
wenzelm@33917
   243
wenzelm@33917
   244
  case "$LOGIC" in
wenzelm@33917
   245
    /*)
wenzelm@33917
   246
      ;;
wenzelm@33917
   247
    */*)
wenzelm@33917
   248
      LOGIC="$(pwd -P)/$LOGIC"
wenzelm@33917
   249
      ;;
wenzelm@33917
   250
  esac
wenzelm@33917
   251
wenzelm@33917
   252
  export PROOFGENERAL_HOME="$SUPER"
wenzelm@33917
   253
  export PROOFGENERAL_ASSISTANTS="isar"
wenzelm@33917
   254
  export PROOFGENERAL_LOGIC="$LOGIC"
wenzelm@33917
   255
  export PROOFGENERAL_XSYMBOL="$XSYMBOL"
wenzelm@33917
   256
  export PROOFGENERAL_UNICODE="$UNICODE"
wenzelm@33917
   257
wenzelm@33917
   258
  export ISABELLE_OPTIONS XSYMBOL_FONTSIZE
wenzelm@33917
   259
wenzelm@33917
   260
  exec "$PROGNAME" "${ARGS[@]}" "${FILES[@]}"
wenzelm@33917
   261
wenzelm@33917
   262
fi