Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defmacro defpalette (name colour-defs)
- "Define a new package `name' containing only the colours defined in colour-defs.
- `colour-def' can be in any format acceptable to `%make-user-colour'
- The value of the symbol in package `name' is in the format returned by `%make-user-colour'
- WARNING: This will delete the package `name'
- "
- (check-type name symbol)
- (let ((package-name (symbol-name name))
- (colour (gensym)))
- `(progn (when (find-package ,package-name)
- (delete-package (find-package ,package-name)))
- (make-package ,package-name :use nil)
- ,@(iter
- (for (name colour-def) in colour-defs)
- (collect (etypecase name
- (string
- `(progn (intern ,name ,package-name)
- (setf (symbol-value
- (find-symbol ,name
- ,package-name))
- (%make-user-colour ',colour-def (list ,name)))
- (export (find-symbol ,name ,package-name)
- (find-package ,package-name))))
- (list
- ;; ensure synonyms share the same colour object
- `(let ((,colour (%make-user-colour ',colour-def (list ,@name))))
- ,@(iter
- (for n in name)
- (check-type n string)
- (collect `(intern ,n ,package-name))
- (collect `(setf (symbol-value
- (find-symbol ,n
- ,package-name))
- ,colour))
- (collect `(export (find-symbol ,n ,package-name)
- (find-package ,package-name)))) ))))
- ))))
- (defpalette colour.solarized
- (("base03" "002b36")
- ("base02" "073642")))
- --> (PROGN
- (WHEN (FIND-PACKAGE "COLOUR.SOLARIZED")
- (DELETE-PACKAGE (FIND-PACKAGE "COLOUR.SOLARIZED")))
- (MAKE-PACKAGE "COLOUR.SOLARIZED" :USE NIL)
- (PROGN
- (INTERN "base03" "COLOUR.SOLARIZED")
- (SETF (SYMBOL-VALUE (FIND-SYMBOL "base03" "COLOUR.SOLARIZED"))
- (%MAKE-USER-COLOUR '"002b36" (LIST "base03")))
- (EXPORT (FIND-SYMBOL "base03" "COLOUR.SOLARIZED")
- (FIND-PACKAGE "COLOUR.SOLARIZED"))))
- --> (SB-IMPL::%DEFPARAMETER 'JLK.GUI::*DEFAULT-FOCUSSED-BORDER-COLOUR*
- ; COLOUR.SOLARIZED:|orange| (SB-C:SOURCE-LOCATION))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement