switch version easily

This commit is contained in:
Jay McCarthy 2018-01-04 16:22:00 -05:00
parent d7216e29d7
commit 6d713577d2
1 changed files with 39 additions and 38 deletions

View File

@ -6,7 +6,6 @@
racket/system racket/system
ansi ansi
(submod ansi/lcd-terminal event-structs) (submod ansi/lcd-terminal event-structs)
ansi/private/tty-raw-extension
unix-signals unix-signals
lux/chaos lux/chaos
raart/draw raart/draw
@ -15,45 +14,47 @@
(struct term (f in out)) (struct term (f in out))
(define default-tty "/dev/tty") (define-syntax-rule (define-stty-term open-term close-term)
(begin
(define default-tty "/dev/tty")
(define stty-minus-f-arg-string
(case (system-type 'os)
((macosx) "-f")
(else "-F")))
(define (open-term #:tty [tty default-tty])
(system* "/bin/stty"
stty-minus-f-arg-string
tty
"raw"
"pass8"
"-echo")
(define-values (in out)
(open-input-output-file tty #:exists 'update))
(file-stream-buffer-mode in 'none)
(file-stream-buffer-mode out 'none)
(term tty in out))
(define (close-term t)
(match-define (term f in out) t)
(close-input-port in)
(close-output-port out)
(system* "/bin/stty"
stty-minus-f-arg-string
f
"sane"))))
#; (define-syntax-rule (define-stdin-term open-term close-term)
(define stty-minus-f-arg-string (begin
(case (system-type 'os) (require ansi/private/tty-raw-extension)
((macosx) "-f") (define (open-term #:tty [tty #f])
(else "-F"))) (when tty
#; (error 'open-term "Custom tty not supported in this version"))
(define (open-term #:tty [tty default-tty]) (tty-raw!)
(system* "/bin/stty" (term #f (current-input-port) (current-output-port)))
stty-minus-f-arg-string (define (close-term t)
tty (tty-restore!))))
"raw"
"-echo")
(define-values (in out)
(open-input-output-file tty #:exists 'update))
(term tty in out))
#;
(define (close-term t)
(match-define (term f in out) t)
(close-input-port in)
(close-output-port out)
(system* "/bin/stty"
stty-minus-f-arg-string
f
"cooked"
"echo"))
(define (open-term) #;(define-stty-term open-term close-term)
(tty-raw!) (define-stdin-term open-term close-term)
(term #f (current-input-port) (current-output-port)))
(define (close-term t)
(tty-restore!))
(define (with-term f #:tty [tty default-tty])
(define t (open-term #:tty tty))
(define (close!) (close-term t))
(with-handlers ([exn:fail? (λ (x) (close!) (raise x))])
(begin0 (f t) (close!))))
(define (display/flush v op) (define (display/flush v op)
(display v op) (display v op)