diff options
| author | Clément Pit--Claudel | 2015-04-23 01:14:49 -0400 |
|---|---|---|
| committer | Enrico Tassi | 2015-05-04 13:17:23 +0200 |
| commit | 2a295131a1a72dd56e6e7abdeaeca07b1b69ab6d (patch) | |
| tree | f23c8dc1ce9238ebf5cb05f61f57aa21dd8ee8ca /lib | |
| parent | f19d0c7baf91fb410de77baed391b0a16db9c4e2 (diff) | |
Add a [Redirect] vernacular command
The command [Redirect "filename" (...)] redirects all the output of
[(...)] to file "filename.out". This is useful for storing the results of
an [Eval compute], for redirecting the results of a large search, for
automatically generating traces of interesting developments, and so on.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pp.ml | 21 | ||||
| -rw-r--r-- | lib/pp.mli | 2 |
2 files changed, 23 insertions, 0 deletions
@@ -448,6 +448,27 @@ let logger = ref std_logger let make_pp_emacs() = print_emacs:=true; logger:=emacs_logger let make_pp_nonemacs() = print_emacs:=false; logger := std_logger +let ft_logger old_logger ft ~id level mesg = match level with + | Debug _ -> msgnl_with ft (debugbody mesg) + | Info -> msgnl_with ft (infobody mesg) + | Notice -> msgnl_with ft mesg + | Warning -> old_logger ~id:id level mesg + | Error -> old_logger ~id:id level mesg + +let with_output_to_file fname func input = + let old_logger = !logger in + let channel = open_out (String.concat "." [fname; "out"]) in + logger := ft_logger old_logger (Format.formatter_of_out_channel channel); + try + let output = func input in + logger := old_logger; + close_out channel; + output + with reraise -> + let reraise = Backtrace.add_backtrace reraise in + logger := old_logger; + close_out channel; + Exninfo.iraise reraise let feedback_id = ref (Feedback.Edit 0) let feedback_route = ref Feedback.default_route diff --git a/lib/pp.mli b/lib/pp.mli index e20e5ca82a..3b1123a9dc 100644 --- a/lib/pp.mli +++ b/lib/pp.mli @@ -12,6 +12,8 @@ val make_pp_emacs:unit -> unit val make_pp_nonemacs:unit -> unit +val with_output_to_file : string -> ('a -> 'b) -> 'a -> 'b + (** Pretty-printers. *) type std_ppcmds |
