[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Color Text on CAD Buffer II

    Date: Sat, 29 Sep 90 10:12 EDT
    From: pan@Athena.Pangaro.Dialnet.Symbolics.Com (Paul Pangaro)

    It seems like a simple request: I want to output lines of text in different colors,
    depending on their importance to the user: red for critical, yellow for important, etc.

    However the color documentation is a maze of non-indexed, elliptical stuff about ALUs,
    char-alus, sc-fill-alus and so forth. I have played around for half an hour but without
    seeming to get anywhere, and certainly not with colored text. If I had time, I too could 
    become expert at it, but instead I ask the experts: anyone have a simple way to do
    multi- or vary-colored text, without blowing away the usual background/foreground colors?

A macro to wrap around you code, so that the printer produces the color
of your choice:

(defmacro MAYBE-WITH-COLOR-CHAR-ALUF (&optional alu (stream *standard-output*) &body body)
  `(if (and ,alu
	    (eq (send (send ,stream :screen) :video) :color))
       (let ((old-alu (send ,stream :char-aluf)))
	       (send ,stream :set-char-aluf ,alu)
	   (send ,stream :set-char-aluf old-alu)))

(let ((active T) ;; your choice
      (screen (send *standard-output* :screen)))
    (if active ;; save the color alus for reuse
       (send screen :compute-color-alu tv:alu-seta 0 0 1) ;; blue
       (send screen :compute-color-alu tv:alu-seta 1 0 0)) ;; red
    (format *standard-output* "~&Test text in ~Aactive color" (if active "" "in"))))

It is probably a good idea to store ready-made color alus as properties
associated with your code. To make alus, it is probably easiest to use
the :compute-color-alu message; it is easy enough to get you colors by
blending red green and blue to taste.

Alternatively try using the graphics:draw-string function with an alu
argument or (for simple colors) the :color argument. Eg.
(graphics:draw-string "Test" x y :color :yellow)

<= p2