Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
;; This file:
;;   http://anggtwu.net/elisp/find-erainbowgrid.el.html
;;   http://anggtwu.net/elisp/find-erainbowgrid.el
;;          (find-angg "elisp/find-erainbowgrid.el")
;; Author: Eduardo Ochs <[email protected]>
;; Version: 2024mar03
;;
;; (defun e () (interactive) (find-angg "elisp/find-erainbowgrid.el"))
;; (load "~/elisp/find-erainbowgrid.el")

;; «.ranges»		(to "ranges")
;; «.rgb»		(to "rgb")
;; «.lab»		(to "lab")
;; «.lch»		(to "lch")
;; «.hsl»		(to "hsl")
;; «.hsv»		(to "hsv")
;; «.hpluv»		(to "hpluv")
;; «.hsluv»		(to "hsluv")
;; «.saturated-colors»	(to "saturated-colors")

(require 'ct)

(defun find-erainbowstring (str)
  (find-estring str)
  (rainbow-mode))

(defun ee-makegrid-h (os) (mapconcat 'identity os " "))
(defun ee-makegrid  (oss) (mapconcat 'ee-makegrid-h oss "\n"))

;; (find-erainbowstring (ee-makegrid '(("#001020" "#304050") ("#607080" "#90A0B0"))))

(defun ee-seq (a b &optional step)
  (if (not step)
      (cl-loop for x from a to b collect x)
    (if (> step 0)
	(cl-loop for x from a to b by step collect x)
      (cl-loop for x from b to a by (- step) collect x))))

(defun ee-toward (a b n k) (+ a (/ (* k (- b a)) n)))

(defun ee-seqn (a b n)
  (cl-loop for k from 0 to n
	   collect (ee-toward a b n k)))

;; (ee-seq 100 200 10)
;; (ee-seq 100 200)
;; (ee-seq 200 100)
;; (ee-seq 200 100 -10)
;; (ee-seqn 200 100 10)
;; (ee-seqn 200 100.0 10)

(defun find-erainbowgrid (f &optional x0 x1 y0 y1)
  (find-erainbowstring
   (ee-makegrid
    (cl-loop for y in (ee-seqn (or y0 0) (or y1 100) 50)
	     collect
	     (cl-loop for x in (ee-seqn (or x0 0) (or x1 100) 10)
		      collect
		      (funcall f x y))))))

;; (format "%02X%02X44" 160 200)
;; (find-erainbowgrid (lambda (x y) (format "#%02X%02X44" x y)) 0 255 0 255)
;; (find-erainbowgrid (lambda (x y) (format "(%s %s)" x y)))
;; (find-erainbowgrid (lambda (x y) (ct-make-hsluv 10 x y)))
;; (find-erainbowgrid (lambda (x y) (ct-make-hsluv 0 x y)))
;; (find-erainbowgrid (lambda (x y) (ct-make-hsluv 50 x y)))
;; (find-erainbowgrid (lambda (x y) (ct-make-hsluv x 50 y)))
;; (find-erainbowgrid (lambda (x y) (ct-make-hsluv x y 50)))
;; (find-erainbowgrid (lambda (x y) (ct-make-rgb x y 0)))
;; (find-erainbowgrid (lambda (x y) (ct-make-rgb x 0 y)))
;; (find-erainbowgrid (lambda (x y) (ct-make-rgb 0 x y)))

;; ct-make-rgb   (R G B) "Make a color using R*G*B properties."
;; ct-make-hsl   (H S L) "Make a color using H*S*L properties."
;; ct-make-hsv   (H S V) "Make a color using H*S*V properties."
;; ct-make-hsluv (H S L) "Make a color using H*S*L*uv properties."
;; ct-make-hpluv (H P L) "Make a color using H*P*L*uv properties."
;; ct-make-lab   (L A B) "Make a color using L*A*B properties."
;; ct-make-lch   (L C H) "Make a color using L*C*H properties."

;; «ranges»  (to ".ranges")
;; (find-ctfile "ct.el" "Ranges for RGB are all 0-100")
;; (find-ctfile "ct.el" "Ranges for LAB are {0-100,-100-100,-100-100}")
;; (find-ctfile "ct.el" "Ranges for LCH are {0-100,0-100,0-360}")
;; (find-ctfile "ct.el" "Ranges for HSL are {0-360,0-100,0-100}")
;; (find-ctfile "ct.el" "Ranges for HSV are {0-360,0-100,0-100}")
;; (find-ctfile "ct.el" "Ranges for HPLUV are {0-360,0-100,0-100}")
;; (find-ctfile "ct.el" "Ranges for HSLUV are {0-360,0-100,0-100}")

;; «rgb»  (to ".rgb")
;; (find-erainbowgrid (lambda (x y) (ct-make-rgb x y 0)) 0 100 0 100)
;; (find-erainbowgrid (lambda (x y) (ct-make-rgb x 0 y)) 0 100       0 100)
;; (find-erainbowgrid (lambda (x y) (ct-make-rgb 0 x y))       0 100 0 100)

;; «lab»  (to ".lab")
;; (find-erainbowgrid (lambda (x y) (ct-make-lab  x y 0)) 0 100 -100 100)
;; (find-erainbowgrid (lambda (x y) (ct-make-lab  x 0 y)) 0 100          -100 100)
;; (find-erainbowgrid (lambda (x y) (ct-make-lab 50 x y))       -100 100 -100 100)

;; «lch»  (to ".lch")
;; (find-erainbowgrid (lambda (x y) (ct-make-lch  x  y 0)) 0 100 0 100)
;; (find-erainbowgrid (lambda (x y) (ct-make-lch  x 50 y)) 0 100       0 360)
;; (find-erainbowgrid (lambda (x y) (ct-make-lch 50  x y))       0 100 0 360)

;; «hsl»  (to ".hsl")
;; (find-erainbowgrid (lambda (x y) (ct-make-hsl  x   y 50)) 0 360 0 100)
;; (find-erainbowgrid (lambda (x y) (ct-make-hsl  x 100  y)) 0 360       0 100)
;; (find-erainbowgrid (lambda (x y) (ct-make-hsl 40   x  y))       0 100 0 100)

;; «hsv»  (to ".hsv")
;; (find-erainbowgrid (lambda (x y) (ct-make-hsv  x   y  50)) 0 360 0 100)
;; (find-erainbowgrid (lambda (x y) (ct-make-hsv  x   y 100)) 0 360 0 100)
;; (find-erainbowgrid (lambda (x y) (ct-make-hsv  x 100   y)) 0 360       0 100)
;; (find-erainbowgrid (lambda (x y) (ct-make-hsv 40   x   y))       0 100 0 100)

;; «hpluv»  (to ".hpluv")
;; (find-erainbowgrid (lambda (x y) (ct-make-hpluv  x   y 50)) 0 360 0 100)
;; (find-erainbowgrid (lambda (x y) (ct-make-hpluv  x 100  y)) 0 360       0 100)
;; (find-erainbowgrid (lambda (x y) (ct-make-hpluv 40   x  y))       0 100 0 100)

;; «hsluv»  (to ".hsluv")
;; (find-erainbowgrid (lambda (x y) (ct-make-hsluv  x   y 50)) 0 360 0 100)
;; (find-erainbowgrid (lambda (x y) (ct-make-hsluv  x 100  y)) 0 360       0 100)
;; (find-erainbowgrid (lambda (x y) (ct-make-hsluv 40   x  y))       0 100 0 100)

;; «saturated-colors»  (to ".saturated-colors")
;; (find-erainbowgrid (lambda (x y) (ct-make-hsv  y   x 100)) 0 100 0 360)
;; (find-erainbowbar  (lambda   (y) (ct-make-hsv  y 100 100)) 0 360)






;; Local Variables:
;; coding:  utf-8-unix
;; End: