;;; -*- lexical-binding: t -*- (require 'cl-lib) (cl-pushnew "." load-path :test #'string=) (require 'luki-lisp) (-> 'bad-box) (-> 'bad-color-norm) (-> 'bad-draw) (-> 'color) (cl-defmethod bad-sea-draw ((b box)) (~ (data-str) b (& (su b) (bad-draw-to-buf b)))) (cl-defmethod bad-sea-init ((b box) &optional beg mid end) (with-current-buffer (get-buffer-create "*bad-draw*") (~ (w h) b (cl-loop initially (erase-buffer) with sky = (bad-color-decimal (or beg "#99f3f3")) with hzn = (bad-color-decimal (or mid "#cc2eff")) with sea = (bad-color-decimal (or end "#06253d")) with n = (* w (1+ (/ h 2))) with g1 = (color-gradient sky hzn n) with g2 = (color-gradient hzn sea n) with g = `(,@g1 ,@g2) with cs = `(?\s ?\_ ?\s ?\. ?\s ?\~ ?\s ?\= ?\s ?\' ?\s ?^ ?\s ?\` ?\s ?\= ?\s ?\~ ?\s ?\. ?\s) with cl = (--- cs) for i from (random cl) for c = (nth (m i cl) cs) for (cr cg cb) in g for bgc = (color-rgb-to-hex cr cg cb) for fgc = (bad-col* (/ (+ 40 (random 55)) 100.0) (face-fg 'our-cyan)) for prp = (list :background bgc :foreground fgc) collect (list c prp) into props finally (cl-loop for m from (point-min) for (c p) in props for draw = (< (* 0.8 h) (line-number-at-pos)) for ins = (if draw c ?\s) for pnt = (point) do (@i ins) (put-text-property pnt (1+ pnt) 'face p) (& (z (m m w)) (@i ?\n))))))) ;; (progn (eval-buffer) (pop-buff "*bad-draw*" (bad-sea-init (box :w 16 :h 16)))) (cl-defmethod bad-colors ((e elem) (beg string) (end string)) (cl-loop initially (goto-char (pos-bol)) with a = (bad-color-decimal beg) with o = (bad-color-decimal end) with w = (@ e w) with h = (@ e h) with n = (* w h) for (r g b) in (color-gradient a o n) for bgc = (color-rgb-to-hex r g b) for fgc = (color-complement bgc) for prp = (list :background bgc :foreground fgc) collect prp into props finally (cl-loop for c from (+ 9472 (point) (- (line-number-at-pos (point-max)))) for m from 1 for pnt = (point) for p in props do (@i c) (put-text-property pnt (1+ pnt) 'face p) (& (z (m m w)) (@i ?\n))))) (cl-defmethod bad-chars () (cl-loop with e = (ascii :w 16 :h 4) with buf = (get-buffer-create "*bad-draw*") with beg = nil with end = nil do (with-current-buffer buf (setf beg (point)) (bad-colors e "#000000" "#000087") (bad-colors e "#000087" "#008787") (bad-colors e "#008787" "#00ff87") (bad-colors e "#00ff87" "#00ffff") (setf end (point)) (bad-read-string e (bad-buffer-string beg end t))) return (pop-buff buf))) ;; (bad-chars) ; eval multiple-times :) (<- 'bad-grad)