Advertisement
Guest User

Untitled

a guest
Apr 15th, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 2.07 KB | None | 0 0
  1. (defmacro defpalette (name colour-defs)
  2.   "Define a new package `name' containing only the colours defined in colour-defs.
  3.  
  4. `colour-def' can be in any format acceptable to `%make-user-colour'
  5.  
  6. The value of the symbol in package `name' is in the format returned by `%make-user-colour'
  7.  
  8. WARNING: This will delete the package `name'
  9. "
  10.   (check-type name symbol)
  11.   (let ((package-name (symbol-name name))
  12.     (colour (gensym)))
  13.     `(progn (when (find-package ,package-name)
  14.           (delete-package (find-package ,package-name)))
  15.         (make-package ,package-name :use nil)
  16.         ,@(iter
  17.         (for (name colour-def) in colour-defs)
  18.         (collect (etypecase name
  19.                (string
  20.                 `(progn (intern ,name ,package-name)
  21.                     (setf (symbol-value
  22.                        (find-symbol ,name
  23.                             ,package-name))
  24.                       (%make-user-colour ',colour-def (list ,name)))
  25.                     (export (find-symbol ,name ,package-name)
  26.                             (find-package ,package-name))))
  27.                (list
  28.                 ;; ensure synonyms share the same colour object
  29.                 `(let ((,colour (%make-user-colour ',colour-def (list ,@name))))
  30.                    ,@(iter
  31.                    (for n in name)
  32.                    (check-type n string)
  33.                    (collect `(intern ,n ,package-name))
  34.                    (collect `(setf (symbol-value
  35.                             (find-symbol ,n
  36.                                  ,package-name))
  37.                            ,colour))
  38.                    (collect `(export (find-symbol ,n ,package-name)
  39.                                  (find-package ,package-name)))) ))))
  40.         ))))
  41.  
  42. (defpalette colour.solarized
  43.     (("base03"  "002b36")
  44.      ("base02"  "073642")))
  45.  
  46. --> (PROGN
  47.  (WHEN (FIND-PACKAGE "COLOUR.SOLARIZED")
  48.    (DELETE-PACKAGE (FIND-PACKAGE "COLOUR.SOLARIZED")))
  49.  (MAKE-PACKAGE "COLOUR.SOLARIZED" :USE NIL)
  50.  (PROGN
  51.   (INTERN "base03" "COLOUR.SOLARIZED")
  52.   (SETF (SYMBOL-VALUE (FIND-SYMBOL "base03" "COLOUR.SOLARIZED"))
  53.           (%MAKE-USER-COLOUR '"002b36" (LIST "base03")))
  54.   (EXPORT (FIND-SYMBOL "base03" "COLOUR.SOLARIZED")
  55.           (FIND-PACKAGE "COLOUR.SOLARIZED"))))
  56.  
  57. --> (SB-IMPL::%DEFPARAMETER 'JLK.GUI::*DEFAULT-FOCUSSED-BORDER-COLOUR*
  58. ;                           COLOUR.SOLARIZED:|orange| (SB-C:SOURCE-LOCATION))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement