#! /usr/bin/env slope ; tinylog.slo - tinylog updater ; Author: samhunter@rawtext.club ; (load-mod "flag") (load-mod "line-edit" le) ; timestamp ;(define TS (date "%w %D %f %Y %H:%I:%S %A %Z")) (define TS (date "%w %D %f %Y %H:%I %A %Z")) ; apparently tinylog doesn't care about seconds ; author (if (not (define AUTHOR (flag::string "-a"))) (define AUTHOR (env "LOGNAME"))) ; avatar (define AVATAR "💡") ; tinylog file (define TLFile (path-join (env "HOME") "public_gemini" "tinylog.gmi")) (define Entries (list (string-format "\n## %v" TS))) (define EntryLine "") (define Header '()) (define SafeExit (lambda () (write "\27[?25h") (term-restore) (exit))) (signal-catch-sigint SafeExit) (define GetHeader (lambda (Loglines) (if (regex-match? "^##" (car Loglines)) Loglines (begin (set! Header (append Header (car Loglines))) (set! Loglines (cdr Loglines)) (GetHeader Loglines))))) (define Banner (lambda () (display "Add a tinylog entry. Finish by typing a '.' on a separate line.") (newline) (display " ....:....1....:....2....:....3....:....4....:....5....:....6....:....7....:..") (newline))) (define ReadEntry (lambda () (begin (set! EntryLine (le::get-line "-> " "")) ; repeat until user enters "." (if (not (regex-match? "^\.$" EntryLine)) (begin (set! Entries (append Entries EntryLine)) (ReadEntry)))))) (Banner) (ReadEntry) (if (define Tinylog (file-open-read TLFile)) (begin (define Loglines (read-all-lines Tinylog)) (close Tinylog) (set! Loglines (GetHeader Loglines)) ; hack (set! Header (reverse (cdr (reverse Header)))) (if (set! Tinylog (file-open-write TLFile)) (begin (for-each (lambda (Line) (write (append Line "\n") Tinylog)) Header) (for-each (lambda (Line) (write (append Line "\n") Tinylog)) Entries) (write "\n" Tinylog) (for-each (lambda (Line) (write (append Line "\n") Tinylog)) Loglines) (close Tinylog))))) (SafeExit) ; vim: ts=4 sw=4 expandtab ft=scheme