aboutsummaryrefslogtreecommitdiff
path: root/module/vulgar/util.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/vulgar/util.scm')
-rw-r--r--module/vulgar/util.scm46
1 files changed, 46 insertions, 0 deletions
diff --git a/module/vulgar/util.scm b/module/vulgar/util.scm
new file mode 100644
index 00000000..8be97378
--- /dev/null
+++ b/module/vulgar/util.scm
@@ -0,0 +1,46 @@
+(define-module (vulgar util)
+ #:use-module (srfi srfi-19)
+ #:use-module (srfi srfi-60)
+ #:use-module (util)
+ #:use-module (ice-9 popen)
+ #:export (line ctrl color-escape))
+
+(define* (line #:optional (width 64))
+ (display (make-string width #\_))
+ (newline))
+
+(define (ctrl char)
+ (integer->char (bitwise-and #b00011111 (char->integer char))))
+
+(define-public (display-calendar-header! date)
+ (let* ((day (number->string (date-day date)))
+ (month (number->string (date-month date)))
+ (year (number->string (date-year date))))
+ ;; BSD cal only supports setting highlighted day explicitly for
+ ;; testing the functionality. This seems to at least give me
+ ;; an (almost) working display, albeit ugly.
+ (if (file-exists? "/usr/bin/ncal")
+ (system* "ncal" "-3" "-H" (format #f "~a-~a-~a"
+ year month day)
+ month year)
+ (system* "cal" "-3" day month year))))
+
+(define (color-escape n)
+ (cond ((not n) "")
+ ((char=? #\# (string-ref n 0))
+ (let* ((str (string-drop n 1))
+ (rs (substring str 0 2))
+ (gs (substring str 2 4))
+ (bs (substring str 4 6)))
+ (format #f "\x1b[38;2;~a;~a;~am"
+ (string->number rs 16)
+ (string->number gs 16)
+ (string->number bs 16))))))
+
+
+(define-public (get-terminal-size)
+ (let* (((rpipe . wpipe) (pipe)))
+ (system (format #f "stty size > /proc/~s/fd/~s"
+ (getpid) (port->fdes wpipe)))
+ (values (read rpipe)
+ (read rpipe))))