# HG changeset patch # User Steve Losh # Date 1718296210 14400 # Node ID 46fd11ae3808d08ef9378107954ee4d459ef5d08 # Parent cf74bfa5845a2e6e7c9e4c4f956e3e0fc3d9c28e Merge diff -r cf74bfa5845a -r 46fd11ae3808 lisp/batchcolor.lisp --- a/lisp/batchcolor.lisp Wed Jun 12 14:42:07 2024 -0400 +++ b/lisp/batchcolor.lisp Thu Jun 13 12:30:10 2024 -0400 @@ -10,6 +10,7 @@ ;;;; Configuration ------------------------------------------------------------ (defparameter *start* 0) (defparameter *dark* t) +(defparameter *multi* t) ;;;; Errors ------------------------------------------------------------------- @@ -67,10 +68,14 @@ (defun find-color (string) (gethash string *explicits* - (let ((colors (if *dark* *dark-colors* *light-colors*))) - (aref colors - (mod (+ (djb2 string) *start*) - (length colors)))))) + (if *multi* + (let ((colors (if *dark* *dark-colors* *light-colors*))) + (aref colors + (mod (+ (djb2 string) *start*) + (length colors)))) + (if *dark* + (rgb-code 5 2 3) + (rgb-code 2 0 2))))) (defun ansi-color-start (color) (format nil "~C[38;5;~Dm" #\Escape color)) @@ -128,6 +133,13 @@ (return-from parse-explicit (cons string (rgb-code r g b)))) (error 'malformed-explicit :spec spec)) +(adopt:defparameters (*option-multicolor* *option-no-multicolor*) + (adopt:make-boolean-options 'multicolor + :help "Use different colors for different matches (the default)." + :help-no "Use a single color for everything (a useful kludge)." + :long "multicolor" + :short #\m + :initial-value t)) (adopt:defparameters (*option-randomize* *option-no-randomize*) (adopt:make-boolean-options 'randomize @@ -187,6 +199,9 @@ "If no FILEs are given, standard input will be used. A file of - stands for ~ standard input as well.~@ ~@ + As a handy kludge, the --no-multicolor option can be used to highlight ~ + everything in a single color.~@ + ~@ Overlapping capturing groups are not supported because it's not clear what ~ the result should be. For example: what should ((f)oo|(b)oo) highlight when ~ matched against 'foo'? Should it highlight 'foo' in one color? The 'f' in ~ @@ -224,7 +239,9 @@ *option-no-randomize* *option-dark* *option-light* - *option-explicit*))))) + *option-explicit* + *option-multicolor* + *option-no-multicolor*))))) (defmacro exit-on-ctrl-c (&body body) @@ -237,7 +254,8 @@ (setf *start* (if (gethash 'randomize options) (random 256 (make-random-state t)) 0) - *dark* (gethash 'dark options))) + *dark* (gethash 'dark options) + *multi* (gethash 'multicolor options))) (defun toplevel () (sb-ext:disable-debugger)