forked from lehitoskin/ivy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
error-log.rkt
56 lines (48 loc) · 1.33 KB
/
error-log.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#lang racket/base
; error-log.rkt
(require racket/class
racket/gui/base
"files.rkt")
(provide err-port log-frame)
(define old-err (current-error-port))
(define err-port
(make-output-port
'error-port-custom
always-evt
(λ (s start end non-block? breakable?)
(define str (bytes->string/utf-8 s #\?))
(fprintf old-err str)
(send log-text insert str)
(- end start))
void))
(define log-frame
(new frame%
[label "Ivy - Error Log"]
[width 600]
[height 500]))
(void (send log-frame set-icon logo-bmp))
(define log-text (new text% [auto-wrap #f]))
(define log-ecanvas
(new editor-canvas%
[parent log-frame]
[label "Error Log"]
[editor log-text]
[style '(auto-vscroll auto-hscroll no-focus)]))
(define button-hpanel
(new horizontal-panel%
[parent log-frame]
[alignment '(right center)]
[stretchable-height #f]))
(define close-button
(new button%
[parent button-hpanel]
[label "Close"]
[callback (λ (button evt)
(send log-frame show #f))]))
(define copy-button
(new button%
[parent button-hpanel]
[label "Copy to Clipboard"]
[callback (λ (button evt)
; select all text
(send log-text copy #f (send evt get-time-stamp) 0 'end))]))