src/Pure/ProofGeneral/preferences.ML
author aspinall
Thu, 09 Aug 2007 11:37:27 +0200
changeset 24191 333f0a4bcc55
parent 24100 a2f19514e156
child 24329 f31594168d27
permissions -rw-r--r--
Typo in comment
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
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
     8
signature PREFERENCES = 
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,
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    13
			  descr: string,
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    14
			  default: string,
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    15
			  pgiptype: pgiptype,
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    16
			  get: unit -> string,
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    17
			  set: string -> unit }
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,
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    36
			descr: string,
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    37
			default: string,
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    38
			pgiptype: pgiptype,
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    39
			get: unit -> string,
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    40
			set: string -> unit }
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    41
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    42
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    43
fun mkpref get set typ nm descr = 
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
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    49
val int_pref = 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    50
    mkpref_from_ref PgipTypes.int_to_pgstring (PgipTypes.read_pgipint (NONE,NONE))
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    51
		    (PgipTypes.Pgipint (NONE, NONE))
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 =
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    59
    let 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    60
	fun get () = PgipTypes.bool_to_pgstring (! proofs >= 2)
21940
fbd068dd4d29 minor tuning;
wenzelm
parents: 21649
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
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    63
	mkpref get set PgipTypes.Pgipbool "full-proofs" 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    64
	       "Record full proof objects internally"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    65
    end
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    66
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    67
val thm_deps_pref = 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    68
    let 
22587
5454b06320fb renamed Output.has_mode to print_mode_active;
wenzelm
parents: 22214
diff changeset
    69
	fun get () = PgipTypes.bool_to_pgstring (print_mode_active thm_depsN)
21940
fbd068dd4d29 minor tuning;
wenzelm
parents: 21649
diff changeset
    70
	fun set s = if PgipTypes.read_pgipbool s then 
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    71
			change print_mode (insert (op =) thm_depsN)
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    72
		    else 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    73
			change print_mode (remove (op =) thm_depsN) 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    74
    in
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    75
	mkpref get set PgipTypes.Pgipbool "theorem-dependencies" 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    76
	       "Track theorem dependencies within Proof General"
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 =
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    80
    let 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    81
	val pg_print_depth_val = ref 10
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    82
	fun get () = PgipTypes.int_to_pgstring (! pg_print_depth_val)
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    83
	fun setn n = (print_depth n; pg_print_depth_val := n)
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    84
	val set = setn o PgipTypes.read_pgipnat
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    85
    in
21649
40e6fdd26f82 Support PGIP communication for preferences in Emacs mode.
aspinall
parents: 21637
diff changeset
    86
	mkpref get set PgipTypes.Pgipnat
40e6fdd26f82 Support PGIP communication for preferences in Emacs mode.
aspinall
parents: 21637
diff changeset
    87
	       "print-depth" "Setting for the ML print depth"
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    88
    end
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    89
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    90
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    91
val display_preferences = 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    92
    [bool_pref show_types
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    93
	       "show-types" 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    94
	       "Include types in display of Isabelle terms",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    95
     bool_pref show_sorts
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    96
	       "show-sorts"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    97
	       "Include sorts in display of Isabelle terms",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    98
     bool_pref show_consts
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
    99
	       "show-consts"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   100
	       "Show types of consts in Isabelle goal display",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   101
     bool_pref long_names
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   102
	       "long-names"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   103
	       "Show fully qualified names in Isabelle terms",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   104
     bool_pref show_brackets
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   105
	       "show-brackets"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   106
	       "Show full bracketing in Isabelle terms",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   107
     bool_pref Proof.show_main_goal
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   108
	       "show-main-goal"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   109
	       "Show main goal in proof state display",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   110
     bool_pref Syntax.eta_contract
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   111
	       "eta-contract"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   112
	       "Print terms eta-contracted"]
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   113
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   114
val advanced_display_preferences =
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   115
    [nat_pref goals_limit
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   116
	      "goals-limit"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   117
	      "Setting for maximum number of goals printed",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   118
     int_pref ProofContext.prems_limit
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   119
	      "prems-limit"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   120
	      "Setting for maximum number of premises printed",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   121
     print_depth_pref,		
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   122
     bool_pref show_question_marks
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   123
	       "show-question-marks"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   124
	       "Show leading question mark of variable name"]
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   125
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   126
val tracing_preferences = 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   127
    [bool_pref trace_simp
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   128
	       "trace-simplifier"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   129
	       "Trace simplification rules.",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   130
     nat_pref trace_simp_depth_limit
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   131
	      "trace-simplifier-depth"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   132
	      "Trace simplifier depth limit.",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   133
     bool_pref trace_rules
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   134
	       "trace-rules"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   135
	       "Trace application of the standard rules",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   136
     bool_pref Pattern.trace_unify_fail
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   137
	       "trace-unification"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   138
	       "Output error diagnostics during unification",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   139
     bool_pref Output.timing
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   140
	       "global-timing"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   141
	       "Whether to enable timing in Isabelle.",
22130
0906fd95e0b5 Output.debug: non-strict;
wenzelm
parents: 21940
diff changeset
   142
     bool_pref Toplevel.debug
0906fd95e0b5 Output.debug: non-strict;
wenzelm
parents: 21940
diff changeset
   143
		"debugging"
0906fd95e0b5 Output.debug: non-strict;
wenzelm
parents: 21940
diff changeset
   144
		"Whether to enable debugging."]
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   145
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   146
val proof_preferences = 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   147
    [bool_pref quick_and_dirty
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   148
	       "quick-and-dirty"
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   149
	       "Take a few short cuts",
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   150
     bool_pref Toplevel.skip_proofs
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   151
	       "skip-proofs"
24100
a2f19514e156 added max-threads preference;
wenzelm
parents: 22587
diff changeset
   152
	       "Skip over proofs (interactive-only)",
a2f19514e156 added max-threads preference;
wenzelm
parents: 22587
diff changeset
   153
     nat_pref Multithreading.max_threads
a2f19514e156 added max-threads preference;
wenzelm
parents: 22587
diff changeset
   154
	       "max-threads"
a2f19514e156 added max-threads preference;
wenzelm
parents: 22587
diff changeset
   155
	       "Maximum number of threads"]
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   156
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   157
val preferences = 
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   158
    [("Display", display_preferences),
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   159
     ("Advanced Display", advanced_display_preferences),
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   160
     ("Tracing", tracing_preferences),
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   161
     ("Proof", proof_preferences)]
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   162
22214
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   163
type isa_preference_table = (string * isa_preference list) list
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   164
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   165
fun remove name (preftable : isa_preference_table)  = 
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   166
    map (fn (cat,prefs) => 
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   167
	    (cat, filter_out (curry op= name o #name) prefs))
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   168
        preftable;
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   169
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   170
fun set_default (setname,newdefault) (preftable : isa_preference_table)  = 
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   171
    map (fn (cat,prefs) => 
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   172
	    (cat, map (fn (pref as {name,descr,default,pgiptype,get,set})
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   173
			  => if (name = setname) then 
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   174
				 (set newdefault;
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   175
				  {name=name,descr=descr,default=newdefault,
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   176
				  pgiptype=pgiptype,get=get,set=set})
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   177
			     else pref)
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   178
   		  prefs))
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   179
        preftable;
6e9ab159512f Add operations on preference tables (remove, set_default).
aspinall
parents: 22130
diff changeset
   180
21637
a7b156c404e2 Revamped Proof General interface.
aspinall
parents:
diff changeset
   181
end