src/Pure/ProofGeneral/preferences.ML
author wenzelm
Sat, 18 Aug 2007 21:27:52 +0200
changeset 24329 f31594168d27
parent 24191 333f0a4bcc55
child 24454 692dac1e7381
permissions -rw-r--r--
ML system provides get_print_depth;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     1
(*  Title:      Pure/ProofGeneral/preferences.ML
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     2
    ID:         $Id$
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     3
    Author:     David Aspinall and Markus Wenzel
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     4
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     5
User preferences for Isabelle which are maintained by the interface.
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     6
*)
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     7
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
     8
signature PREFERENCES =
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     9
sig
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    10
  type pgiptype = PgipTypes.pgiptype
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    11
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    12
  type isa_preference = { name: string,
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    13
                          descr: string,
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    14
                          default: string,
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    15
                          pgiptype: pgiptype,
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    16
                          get: unit -> string,
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    17
                          set: string -> unit }
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    18
24191
333f0a4bcc55 Typo in comment
aspinall
parents: 24100
diff changeset
    19
  (* table of categories and preferences; names must be unique *)
22214
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
    20
  type isa_preference_table = (string * isa_preference list) list
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
    21
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
    22
  val preferences : isa_preference_table
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
    23
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
    24
  val remove      : string -> isa_preference_table -> isa_preference_table
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
    25
  val set_default : string * string -> isa_preference_table -> isa_preference_table
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    26
end
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    27
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    28
structure Preferences : PREFERENCES =
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    29
struct
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    30
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    31
val thm_depsN = "thm_deps";    (* also in proof_general_pgip.ML: move to pgip_isabelle? *)
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    32
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    33
type pgiptype = PgipTypes.pgiptype
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    34
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    35
type isa_preference = { name: string,
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    36
                        descr: string,
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    37
                        default: string,
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    38
                        pgiptype: pgiptype,
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    39
                        get: unit -> string,
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    40
                        set: string -> unit }
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    41
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    42
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    43
fun mkpref get set typ nm descr =
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    44
    { name=nm, descr=descr, pgiptype=typ, get=get, set=set, default=get() } : isa_preference
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    45
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    46
fun mkpref_from_ref read write typ r nm descr =
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    47
    mkpref (fn()=> read (!r)) (fn v=> r:= (write v)) typ nm descr
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    48
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    49
val int_pref =
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    50
    mkpref_from_ref PgipTypes.int_to_pgstring (PgipTypes.read_pgipint (NONE,NONE))
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    51
                    (PgipTypes.Pgipint (NONE, NONE))
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    52
val nat_pref =
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    53
    mkpref_from_ref PgipTypes.int_to_pgstring PgipTypes.read_pgipnat PgipTypes.Pgipnat
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    54
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    55
val bool_pref =
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    56
    mkpref_from_ref PgipTypes.bool_to_pgstring PgipTypes.read_pgipbool PgipTypes.Pgipbool
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    57
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    58
val proof_pref =
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    59
    let
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    60
        fun get () = PgipTypes.bool_to_pgstring (! proofs >= 2)
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    61
        fun set s = proofs := (if PgipTypes.read_pgipbool s then 1 else 2)
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    62
    in
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    63
        mkpref get set PgipTypes.Pgipbool "full-proofs"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    64
               "Record full proof objects internally"
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    65
    end
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    66
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    67
val thm_deps_pref =
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    68
    let
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    69
        fun get () = PgipTypes.bool_to_pgstring (print_mode_active thm_depsN)
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    70
        fun set s = if PgipTypes.read_pgipbool s then
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    71
                        change print_mode (insert (op =) thm_depsN)
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    72
                    else
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    73
                        change print_mode (remove (op =) thm_depsN)
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    74
    in
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    75
        mkpref get set PgipTypes.Pgipbool "theorem-dependencies"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    76
               "Track theorem dependencies within Proof General"
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    77
    end
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    78
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    79
val print_depth_pref =
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    80
    let
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    81
        fun get () = PgipTypes.int_to_pgstring (get_print_depth ())
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    82
        val set = print_depth o PgipTypes.read_pgipnat
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    83
    in
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    84
        mkpref get set PgipTypes.Pgipnat
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    85
               "print-depth" "Setting for the ML print depth"
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    86
    end
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    87
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    88
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    89
val display_preferences =
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    90
    [bool_pref show_types
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    91
               "show-types"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    92
               "Include types in display of Isabelle terms",
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    93
     bool_pref show_sorts
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    94
               "show-sorts"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    95
               "Include sorts in display of Isabelle terms",
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    96
     bool_pref show_consts
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    97
               "show-consts"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
    98
               "Show types of consts in Isabelle goal display",
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    99
     bool_pref long_names
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   100
               "long-names"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   101
               "Show fully qualified names in Isabelle terms",
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   102
     bool_pref show_brackets
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   103
               "show-brackets"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   104
               "Show full bracketing in Isabelle terms",
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   105
     bool_pref Proof.show_main_goal
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   106
               "show-main-goal"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   107
               "Show main goal in proof state display",
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   108
     bool_pref Syntax.eta_contract
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   109
               "eta-contract"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   110
               "Print terms eta-contracted"]
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   111
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   112
val advanced_display_preferences =
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   113
    [nat_pref goals_limit
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   114
              "goals-limit"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   115
              "Setting for maximum number of goals printed",
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   116
     int_pref ProofContext.prems_limit
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   117
              "prems-limit"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   118
              "Setting for maximum number of premises printed",
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   119
     print_depth_pref,
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   120
     bool_pref show_question_marks
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   121
               "show-question-marks"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   122
               "Show leading question mark of variable name"]
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   123
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   124
val tracing_preferences =
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   125
    [bool_pref trace_simp
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   126
               "trace-simplifier"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   127
               "Trace simplification rules.",
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   128
     nat_pref trace_simp_depth_limit
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   129
              "trace-simplifier-depth"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   130
              "Trace simplifier depth limit.",
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   131
     bool_pref trace_rules
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   132
               "trace-rules"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   133
               "Trace application of the standard rules",
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   134
     bool_pref Pattern.trace_unify_fail
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   135
               "trace-unification"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   136
               "Output error diagnostics during unification",
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   137
     bool_pref Output.timing
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   138
               "global-timing"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   139
               "Whether to enable timing in Isabelle.",
22130
0906fd95e0b5 Output.debug: non-strict;
wenzelm
parents: 21940
diff changeset
   140
     bool_pref Toplevel.debug
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   141
                "debugging"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   142
                "Whether to enable debugging."]
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   143
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   144
val proof_preferences =
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   145
    [bool_pref quick_and_dirty
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   146
               "quick-and-dirty"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   147
               "Take a few short cuts",
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   148
     bool_pref Toplevel.skip_proofs
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   149
               "skip-proofs"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   150
               "Skip over proofs (interactive-only)",
24100
a2f19514e156 added max-threads preference;
wenzelm
parents: 22587
diff changeset
   151
     nat_pref Multithreading.max_threads
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   152
               "max-threads"
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   153
               "Maximum number of threads"]
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   154
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   155
val preferences =
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   156
    [("Display", display_preferences),
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   157
     ("Advanced Display", advanced_display_preferences),
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   158
     ("Tracing", tracing_preferences),
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   159
     ("Proof", proof_preferences)]
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   160
22214
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   161
type isa_preference_table = (string * isa_preference list) list
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   162
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   163
fun remove name (preftable : isa_preference_table)  =
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   164
    map (fn (cat,prefs) =>
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   165
            (cat, filter_out (curry op= name o #name) prefs))
22214
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   166
        preftable;
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   167
24329
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   168
fun set_default (setname,newdefault) (preftable : isa_preference_table)  =
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   169
    map (fn (cat,prefs) =>
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   170
            (cat, map (fn (pref as {name,descr,default,pgiptype,get,set})
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   171
                          => if (name = setname) then
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   172
                                 (set newdefault;
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   173
                                  {name=name,descr=descr,default=newdefault,
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   174
                                  pgiptype=pgiptype,get=get,set=set})
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   175
                             else pref)
f31594168d27 ML system provides get_print_depth;
wenzelm
parents: 24191
diff changeset
   176
                  prefs))
22214
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   177
        preftable;
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   178
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   179
end