From 3bdc5e083f9f3063c59ffed18fe062c9a9e166dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Sat, 1 Jun 2019 21:38:11 +0200 Subject: Rename {terminal => vulgar}. --- module/vulgar/escape.scm | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 module/vulgar/escape.scm (limited to 'module/vulgar/escape.scm') diff --git a/module/vulgar/escape.scm b/module/vulgar/escape.scm new file mode 100644 index 00000000..513e66d2 --- /dev/null +++ b/module/vulgar/escape.scm @@ -0,0 +1,42 @@ +;;; Module for terminal (ANSI) escape codes. + +(define-module (vulgar escape) + #:use-module (srfi srfi-60) + #:use-module (vulgar termios) + #:use-module (util) + #:export (with-vulgar)) + +(define-public (cls) + (display "\x1b[H") ; Move cursor to the origin + (display "\x1b[J") ; Clear everything after cursor + ) + +;;; I don't curse, I'm just vulgar. + +(define-syntax with-vulgar + (syntax-rules () + ((_ thunk) + (let* ((ifd (current-input-port)) + (ofd (current-output-port)) + (iattr (make-termios)) + (oattr (make-termios)) + iattr* oattr*) + (dynamic-wind + (lambda () + (tcgetattr! iattr ifd) + (tcgetattr! oattr ofd) + + ;; Store current settings to enable resetting the terminal later + (set! iattr* (copy-termios iattr)) + (set! oattr* (copy-termios oattr)) + + (let ((bits (bitwise-not (bitwise-ior ECHO ICANON)))) + (set! (lflag iattr) (bitwise-and (lflag iattr) bits)) + (set! (lflag oattr) (bitwise-and (lflag oattr) bits))) + + (tcsetattr! iattr ifd) + (tcsetattr! oattr ofd)) + thunk + (lambda () + (tcsetattr! iattr* ifd) + (tcsetattr! oattr* ofd))))))) -- cgit v1.2.3