aboutsummaryrefslogtreecommitdiff
path: root/module/terminal/escape.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/terminal/escape.scm')
-rw-r--r--module/terminal/escape.scm28
1 files changed, 28 insertions, 0 deletions
diff --git a/module/terminal/escape.scm b/module/terminal/escape.scm
new file mode 100644
index 00000000..8f1b0c2b
--- /dev/null
+++ b/module/terminal/escape.scm
@@ -0,0 +1,28 @@
+;;; Module for terminal (ANSI) escape codes.
+
+(define-module (terminal escape)
+ #:use-module (srfi srfi-60)
+ #:use-module (terminal termios)
+ #: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 (fileno (current-input-port)))
+ (ofd (fileno (current-output-port))))
+ (dynamic-wind
+ (lambda ()
+ (let ((bits (bitwise-ior ECHO ICANON)))
+ (c-lflags-disable! ifd bits)
+ (c-lflags-disable! ofd bits)))
+ thunk
+ (lambda ()
+ (c-lflag-restore! ifd)
+ (c-lflag-restore! ofd)))) )))