define-module for elisp special modules
[bpt/guile.git] / module / ice-9 / history.scm
CommitLineData
a38dd31f 1;;;; Copyright (C) 2000, 2001, 2004, 2006, 2010 Free Software Foundation, Inc.
870777d7 2;;;;
73be1d9e
MV
3;;;; This library is free software; you can redistribute it and/or
4;;;; modify it under the terms of the GNU Lesser General Public
5;;;; License as published by the Free Software Foundation; either
53befeb7 6;;;; version 3 of the License, or (at your option) any later version.
870777d7 7;;;;
73be1d9e 8;;;; This library is distributed in the hope that it will be useful,
870777d7 9;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
73be1d9e
MV
10;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11;;;; Lesser General Public License for more details.
870777d7 12;;;;
73be1d9e
MV
13;;;; You should have received a copy of the GNU Lesser General Public
14;;;; License along with this library; if not, write to the Free Software
92205699 15;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
870777d7
KN
16;;;;
17\f
18;;;; A simple value history support
19
a38dd31f 20(define-module (ice-9 history)
8c8a13ec 21 #:export (value-history-enabled? enable-value-history! disable-value-history!
a38dd31f 22 clear-value-history!))
870777d7 23
ec84b0a2 24(define-module* '(value-history))
b727d0bd 25
8c8a13ec
AW
26(define *value-history-enabled?* #f)
27(define (value-history-enabled?)
28 *value-history-enabled?*)
a38dd31f 29
870777d7
KN
30(define (use-value-history x)
31 (module-use! (current-module)
b66dde3c 32 (resolve-interface '(value-history))))
870777d7
KN
33
34(define save-value-history
35 (let ((count 0)
36 (history (resolve-module '(value-history))))
37 (lambda (v)
38 (if (not (unspecified? v))
39 (let* ((c (1+ count))
40 (s (string->symbol (simple-format #f "$~A" c))))
41 (simple-format #t "~A = " s)
42 (module-define! history s v)
b66dde3c 43 (module-export! history (list s))
870777d7
KN
44 (set! count c))))))
45
a38dd31f 46(define (enable-value-history!)
8c8a13ec 47 (if (not (value-history-enabled?))
a38dd31f
AW
48 (begin
49 (add-hook! before-eval-hook use-value-history)
50 (add-hook! before-print-hook save-value-history)
8c8a13ec 51 (set! *value-history-enabled?* #t))))
a38dd31f
AW
52
53(define (disable-value-history!)
8c8a13ec 54 (if (value-history-enabled?)
a38dd31f
AW
55 (begin
56 (remove-hook! before-eval-hook use-value-history)
57 (remove-hook! before-print-hook save-value-history)
8c8a13ec 58 (set! *value-history-enabled?* #f))))
a38dd31f
AW
59
60(define (clear-value-history!)
61 (let ((history (resolve-module '(value-history))))
62 (hash-clear! (module-obarray history))
63 (hash-clear! (module-obarray (module-public-interface history)))))
64
65(enable-value-history!)