Skip to content

40ants/barista

Repository files navigation

Barista — a macOS menu-bar application framework in Common Lisp.

BARISTA ASDF System Details

Barista is a macOS menu-bar application framework written in Common Lisp. It lets you display live information — text, emojis, icons, or dynamically rendered images — in the macOS status bar.

Plugins run as threads inside a single Lisp process and communicate with AppKit via Grand Central Dispatch (GCD). Each plugin gets its own NSStatusItem with an icon and a dropdown menu.

This is similar to XBar and TextBar, but with key advantages:

Feature XBar Barista
Plugin execution Subprocess per refresh Threads in one Lisp process
State persistence External storage All in memory
Plugin language Any (mostly Bash) Common Lisp
Menu API Text-based Programmatic DSL + ObjC interop
Debugging None Live REPL via SLYNK/SWANK

Because plugins are Lisp code running in the same process, you can connect your IDE (SLIME/SLY) to the running Barista instance and debug plugins interactively.

Introduction

Barista turns the macOS menu bar into a live Lisp-powered dashboard.

A plugin is a Common Lisp class defined with the defplugin macro. Each plugin can:

  • Display a text label (plain string, emoji, or attributed string with colors and fonts) as its status-bar icon.
  • Display an image icon (PNG or ICNS file, or a dynamically rendered NSImage).
  • Run background worker threads on a schedule (every N seconds, minutes, or hours).
  • Show a dropdown menu when the user clicks the icon — built either declaratively at compile time (defmenu) or dynamically at runtime (build-menu).

How it works

Barista loads user plugins from ~/.config/barista/plugins/ at startup, then initializes AppKit on the macOS main thread and enters the [NSApp run] event loop. Worker threads update NSStatusItem objects via GCD (dispatch_async on the main queue), ensuring all UI mutations happen on the main thread.

Key features

  • In-memory state — no external files or databases; plugin state lives in CLOS slots for the lifetime of the process.
  • Programmatic menus — build menus with Lisp closures, not text formats. Items support callbacks, submenus, checkmarks, and opening URLs.
  • Dynamic icons — render images at runtime (e.g. bar-chart graphs) and update them from worker threads.
  • Live debugging — connect SLIME/SLY to the running process and inspect or modify plugins on the fly.
  • Configuration persistence — plugin enable/disable state is saved to ~/.config/barista/settings.lisp and restored on launch.

Installation

From a pre-built release

Download the latest Barista-x.y.z.dmg from the GitHub Releases page, open it and drag Barista.app to your Applications folder.

Because the app is not signed with an Apple Developer certificate, macOS will attach a quarantine flag to it when downloaded from the internet and refuse to open it with a "Barista is damaged and can't be opened" message.

To remove the quarantine flag, run the following command in Terminal after copying the app to /Applications:

xattr -dr com.apple.quarantine /Applications/Barista.app

Then open the app normally.

Build from source

Barista uses Qlot for dependency management and Roswell for building.

git clone https://github.com/40ants/barista.git
cd barista
qlot install
./build.sh

This produces dist/Barista.app. To also copy it to /Applications:

INSTALL=1 ./build.sh

Running with a REPL

You can connect your IDE to a running Barista instance for live debugging:

# From the built executable:
./dist/Barista.app/Contents/MacOS/barista --slynk
./dist/Barista.app/Contents/MacOS/barista --slynk --port 4005

# From source via Roswell:
qlot exec ros app.ros --slynk

Connect from SLY:

M-x sly-connect RET 127.0.0.1 RET 5007 RET

SLIME is also supported via the --swank flag. Default port is 5007. Logs are written to /tmp/barista.log.

Available Plugins

Barista ships with several bundled plugins. Enable or disable them from the menu-bar icon → Plugins submenu (visible when no other plugin is active, or via Alt-click on any plugin icon).

Pomodoro

A Pomodoro Technique timer. Shows a tomato emoji (🍅) when idle and a countdown when running. Choose 5, 15, or 25 minute intervals from the dropdown menu. The countdown turns red in the last 3 minutes. A macOS notification fires when the timer starts and stops.

Clipboard

A clipboard history manager. Polls the system pasteboard every second and keeps the last 10 copied items. Click the icon (📋) to see the history; click any item to copy it back to the clipboard. Includes a "Clear history" option.

Currency

Displays USD and EUR exchange rates from the Central Bank of Russia daily XML feed. The status-bar label flips between $ and rates every 5 seconds. Rates are fetched on startup and refreshed every 30 minutes. The dropdown menu shows both rates side by side.

System Monitor

Shows real-time CPU, GPU, and memory usage as a colored bar-chart icon in the status bar (rendered dynamically as a PNG). The dropdown menu displays numeric percentages for each metric. Colors change from green to orange to red as usage increases. Metrics are read directly from Mach/IOKit APIs via CFFI — no external commands.

Community Plugins

  • barista-zai-quota — Shows Z.AI Coding Plan token quota (5-hour and weekly) as a colored bar-chart icon.

Writing Custom Plugins

Plugins live as .lisp files in ~/.config/barista/plugins/. Each file is loaded at startup before AppKit initialises.

Minimal text plugin

The simplest plugin shows a text label and updates it on a schedule:

(defpackage #:my-plugins/clock
  (:use #:cl)
  (:import-from #:barista/plugin
                #:defplugin
                #:get-title)
  (:import-from #:barista/vars
                #:*plugin*))
(in-package #:my-plugins/clock)

(defplugin clock ()
  (:title "🕐")
  (:every :minute
    (setf (get-title *plugin*)
          (local-time:format-timestring nil (local-time:now)
                                        :format '(:hour ":" (:min 2))))))

defplugin options

The defplugin macro accepts the following options:

  • (:title EXPR) — initial menu-bar label. May be a plain string, an emoji, or an NSAttributedString built with make-attributed-string / join-attributed-string.
  • (:image PATH &key size template) — display a PNG or ICNS file as the status-bar icon. :size scales the image (default 18). :template t marks it as a template image so macOS adapts it to dark/light mode. Takes precedence over :title.
  • (:menu SYMBOL) — name of a defmenu form to display on click.
  • (:every PERIOD FORMS…) — starts a background worker thread. PERIOD is a keyword (:second, :minute, :hour) or a list like (15 :seconds).

You can define custom slots on the plugin class by listing them after the plugin name, just like defclass:

(defplugin my-plugin
    ((counter :initform 0 :accessor get-counter))
  (:title "0")
  (:every :second
    (incf (get-counter *plugin*))
    (setf (get-title *plugin*)
          (format nil "~D" (get-counter *plugin*)))))

Image icon plugin

(defpackage #:my-plugins/status
  (:use #:cl)
  (:import-from #:barista/plugin
                #:defplugin
                #:get-image)
  (:import-from #:barista/vars
                #:*plugin*))
(in-package #:my-plugins/status)

;; Colour icon — pixels render as-is (default).
(defplugin status-colour ()
  (:image #p"~/.config/barista/icons/my-icon.png" :size 18))

;; Monochrome/symbolic icon — macOS recolours it for dark/light mode.
(defplugin status-mono ()
  (:image #p"~/.config/barista/icons/mono-icon.png" :size 18 :template t))

You can also update the icon at runtime from a worker thread:

(:every (30 :seconds)
  (let ((icon-path (render-current-state-to-png)))
    (setf (get-image *plugin*) icon-path)))

setf get-image accepts a pathname, a namestring, or an NSImage pointer.

Menus

There are two ways to define a dropdown menu.

Declarativedefmenu (compile-time, static structure):

(defmenu start
    (("Start 5 min"  :callback (lambda () (start 5)))
     ("Start 15 min" :callback (lambda () (start 15)))
     ("---")
     ("Help"         :url "https://example.com")))

Item spec: (title &key callback submenu url state disabled).

  • "---" adds a separator.
  • :callback is a zero-argument function called on click.
  • :submenu is a symbol naming another defmenu.
  • :url opens a URL in the default browser.
  • :state t shows a native checkmark.
  • :disabled t greys out the item.

Imperativebuild-menu / add-item (runtime, dynamic structure):

(defun build-my-menu (plugin)
  (build-menu
    (dolist (item (get-items plugin))
      (add-item item :callback (make-item-callback item)))
    (add-separator)
    (add-item "Clear" :callback (lambda () (clear plugin)))))

Use build-menu when the menu structure depends on runtime data.

Dynamic menu wiring

When a plugin needs a dynamic menu (built at runtime), wire up the menu-thunk on the first worker tick instead of using the :menu option:

(defplugin my-plugin
    ((menu-ready :initform nil :accessor get-menu-ready))
  (:title "Data")
  (:every (5 :seconds)
    (unless (get-menu-ready *plugin*)
      (setf (barista/classes:get-menu-thunk
             (barista/plugin:get-status-item *plugin*))
            (let ((p *plugin*))
              (lambda () (build-dynamic-menu p))))
      (setf (get-menu-ready *plugin*) t))
    (update-data *plugin*)))

This pattern is used by the clipboard, currency, and system-monitor plugins.

The plugin variable

barista/vars:*plugin* is the central context variable. It is bound inside worker threads, menu thunks, and menu callbacks automatically. Always use it to access the current plugin instance:

(setf (get-title *plugin*) "Updated!")
(setf (get-image *plugin*) #p"/path/to/icon.png")

Switching menus at runtime

Use replace-menu to swap the dropdown menu of a running plugin:

(barista/plugin:replace-menu start-menu-symbol stop-menu-symbol)

This replaces the menu-thunk on the status item.

Enabling plugins

On first launch Barista shows a system icon in the menu bar. Click it and choose Plugins to enable the plugins you want. The selection is saved to ~/.config/barista/settings.lisp and restored on every subsequent launch.

You can also Alt-click any plugin icon to access a maintenance menu with options to restart all plugins or quit Barista.

API

BARISTA/CLASSES

package barista/classes

Classes

STATUS-ITEM

class barista/classes:status-item ()

Wraps an NSStatusItem for one Barista plugin.

Readers

reader barista/classes:get-button-address (status-item) (= nil)

Integer pointer address of the NSStatusBarButton, captured at initialisation time and used for click-table keying and cleanup. Storing it avoids calling (send ns-item "button") on a potentially-released object during hide.

reader barista/classes:get-menu-thunk (status-item) (:menu-thunk = nil)

Nullary function that builds and returns an NSMenu pointer.

reader barista/classes:get-ns-status-item (status-item) (= nil)

Raw CFFI pointer to the AppKit NSStatusItem.

reader barista/classes:system-item-p (status-item) (:system-item-p = nil)

When T, this is the system plugin item. The click handler skips appending the Settings/Quit section to its menu because it already is the Settings menu.

Accessors

accessor barista/classes:get-button-address (status-item) (= nil)

Integer pointer address of the NSStatusBarButton, captured at initialisation time and used for click-table keying and cleanup. Storing it avoids calling (send ns-item "button") on a potentially-released object during hide.

accessor barista/classes:get-menu-thunk (status-item) (:menu-thunk = nil)

Nullary function that builds and returns an NSMenu pointer.

accessor barista/classes:get-ns-status-item (status-item) (= nil)

Raw CFFI pointer to the AppKit NSStatusItem.

accessor barista/classes:system-item-p (status-item) (:system-item-p = nil)

When T, this is the system plugin item. The click handler skips appending the Settings/Quit section to its menu because it already is the Settings menu.

Generics

generic-function barista/classes:get-image plugin

Return the current status-bar icon of PLUGIN.

generic-function barista/classes:get-title item

Functions

function barista/classes:get-string-form-for-macro string

Return a compile-time form that evaluates to an NSString or NSAttributedString. Called by defmenu/build-menu macros to process user-supplied title values.

function barista/classes:join-attributed-string &rest parts

Concatenate PARTS into a single NSMutableAttributedString. Each part may be a plain string, a (text :color ... :font ... :size ...) list, or an existing NSAttributedString pointer.

function barista/classes:make-attributed-string text &key font color (size +default-font-size+)

Create an NSAttributedString from TEXT with optional FONT, COLOR, and SIZE.

function barista/classes:make-default-font size

Return the standard menu font at SIZE points.

function barista/classes:make-font name &key (size +default-font-size+)

Return an NSFont for NAME at SIZE points, or NIL if the font is unknown.

function barista/classes:make-ns-image path &key (size nil) (template nil)

Load an NSImage from PATH (pathname or string). PATH may be a CL pathname or a namestring.

Keyword arguments: SIZE -- when non-NIL, a number; calls setSize: with SIZE x SIZE points. TEMPLATE -- when T, marks the image as a template image so macOS adapts it to the current appearance (dark/light mode). Use T only for monochrome/symbolic icons. For colour images leave NIL (the default) so pixels render as-is.

Returns the NSImage pointer, or NIL if the file could not be loaded.

BARISTA/CONFIG

package barista/config

Functions

function barista/config:enabled-plugin-names

Return a list of plugin name keywords that are enabled in the config. Only keys explicitly set to T are included.

function barista/config:plugin-enabled-p plugin-name

Return T if PLUGIN-NAME is enabled in the configuration. Defaults to NIL (disabled) when no value is stored -- this ensures a clean first-run experience where the system plugin is shown instead.

function barista/config:restore-config

Load Barista configuration from disk. If the file does not exist (first launch), bootstraps an empty storage and points storage-pathname at the target path so that subsequent (setf (value ...)) calls persist to the correct file.

Note: when handler-case catches no-storage-file, ubiquitous leaves storage-pathname pointing at its default global path and does NOT set it to the requested path. We must set both storage-pathname and storage explicitly to make offload work correctly later.

function barista/config:set-plugin-enabled plugin-name enabled-p

Persist the enabled/disabled state for PLUGIN-NAME. ubiquitous automatically writes to disk after each (setf value).

BARISTA/MAIN

package barista/main

Functions

function barista/main:load-plugins

Load all user plugin files from ~/.config/barista/plugins/.

function barista/main:main &rest argv

Start the Barista menu-bar application.

Loads user plugins, initialises AppKit on macOS thread 0 via trivial-main-thread, and enters the AppKit event loop (never returns normally).

function barista/main:start-plugins

Instantiate and start all registered plugins regardless of config. Must be called on the AppKit main thread. NOTE: Prefer start-enabled-plugins for normal startup.

function barista/main:stop-plugins

Stop all currently running plugins.

BARISTA/MENU

package barista/menu

Generics

generic-function barista/menu:hide item

Remove ITEM from the status bar and release the NSStatusItem.

Functions

function barista/menu:add-item title &key callback submenu url state disabled

Add an item to the menu currently being built by build-menu. Must be called inside a build-menu body. STATE: when T sets the native macOS checkmark (NSControlStateValueOn). DISABLED: when T greys out the item and makes it non-interactive.

function barista/menu:add-separator

Add a native NSMenuItem separator to the menu currently being built. Must be called inside a build-menu body.

function barista/menu:initialize-status-item item

Create the AppKit NSStatusItem for the barista/classes:status-item ITEM. Must be called on the AppKit main thread.

function barista/menu:initialize-status-item-with-image ITEM IMAGE-PATH &KEY (SIZE 18.0d0) TEMPLATE

Like initialize-status-item but uses an image file instead of a text title. IMAGE-PATH is a CL pathname or namestring to a PNG/ICNS file. SIZE -- desired icon size in points (default 18); passed to make-ns-image. TEMPLATE -- when T, marks the image as a template (monochrome/symbolic icons that should adapt to dark/light mode). Leave NIL (default) for colour images so pixels are rendered as-is.

function barista/menu:make-menu name-or-menu

Return an NSMenu pointer for NAME-OR-MENU. NAME-OR-MENU may be a symbol (looked up in menu-constructors or as a function), or an already-built NSMenu CFFI pointer.

Macros

macro barista/menu:build-menu &body body

Evaluate BODY with current-menu bound to a fresh NSMenu, then return it.

macro barista/menu:defmenu name (&rest items)

Define a named menu constructor and register it in menu-constructors.

Example: (defmenu my-menu (("Item one" :callback #'handler) ("Item two" :url "https://example.com")))

BARISTA/PLUGIN

package barista/plugin

Generics

generic-function barista/classes:get-image plugin

Return the current status-bar icon of PLUGIN.

generic-function barista/plugin:get-menu plugin

Return the menu-thunk of PLUGIN's status item.

generic-function barista/plugin:get-status-item plugin

Return the barista/classes:status-item wrapper of PLUGIN.

generic-function barista/plugin:get-title plugin

Return the current status-bar label of PLUGIN.

generic-function barista/plugin:initialize-plugin plugin

generic-function barista/plugin:stop-plugin plugin

Stop PLUGIN, dispatching to the AppKit main thread via GCD.

Functions

function barista/plugin:get-available-plugins

function barista/plugin:get-plugin-instance class-name

function barista/plugin:is-plugin-running class-name

function barista/plugin:restart-plugin class-name

function barista/plugin:restart-plugins

function barista/plugin:running-plugins

function barista/plugin:start-enabled-plugins

Start only the plugins that are enabled in the configuration. Must be called directly on the AppKit main thread (not via GCD) so that all plugins are registered in running-plugins before the caller checks visibility (e.g. ensure-system-plugin).

function barista/plugin:start-plugin class-name

Start CLASS-NAME, dispatching to the AppKit main thread via GCD. Safe to call from any thread. Returns immediately.

Macros

macro barista/plugin:defplugin name (&rest slots) &body options

Define a Barista plugin class with background workers and a menu-bar item.

Options: (:title EXPR) -- initial status-bar title (text or attributed) (:image PATH &key size template) -- status-bar icon from an image file. PATH is a pathname or string evaluated at plugin start time. SIZE (default 18) scales the icon. TEMPLATE T for monochrome/symbolic icons that should adapt to dark/light mode; leave NIL (default) for colour images. (:menu SYMBOL) -- name of a defmenu to show on click (:every PERIOD FORMS) -- background worker: evaluate FORMS every PERIOD

:title and :image are mutually exclusive; :image takes precedence when both are supplied.

macro barista/plugin:replace-menu from to

macro barista/plugin:with-plugin name &body body

Run BODY with barista/vars:plugin bound to the named running plugin. Useful for interactive debugging.

BARISTA/SYSTEM-PLUGIN

package barista/system-plugin

Functions

function barista/system-plugin:ensure-system-plugin

Call after start-enabled-plugins to show the system plugin when needed. Must be called on the AppKit main thread.

function barista/system-plugin:hide-system-plugin

Hide the system plugin status item from the menu bar. No-op if not visible.

function barista/system-plugin:make-plugins-submenu

Build the Settings > Plugins submenu dynamically. Each item shows the plugin name with a native checkmark if currently enabled.

function barista/system-plugin:show-system-plugin

Show the system plugin status item in the menu bar. Creates it on first call; no-op if already visible.

function barista/system-plugin:update-system-plugin-visibility

Show the system plugin if no user plugins are running; hide it otherwise. Must be called from the AppKit main thread (via on-main-thread when in doubt).

BARISTA/UTILS

package barista/utils

Functions

function barista/utils:format-duration duration &optional stream

function barista/utils:open-url url

Open URL in the default browser via a background thread.

Macros

macro barista/utils:on-main-thread &rest actions

Schedule ACTIONS to run on the AppKit main thread via GCD. Returns immediately (fire-and-forget). Safe to call from any thread.

BARISTA/VARS

package barista/vars

Variables

variable barista/vars:*debug* nil

If True, then debugger will be invoked on any error in the periodic threads.

variable barista/vars:*plugin* nil

Current plugin.

variable barista/vars:+default-font-size+ 14

Default font size in points for status-bar text.

variable barista/vars:+supported-colors+ (:aliceblue :antiquewhite :antiquewhite1 :antiquewhite2 :antiquewhite3

:antiquewhite4 :aquamarine :aquamarine1 :aquamarine2 :aquamarine3 :aquamarine4 :azure :azure1 :azure2 :azure3 :azure4 :beige :bisque :bisque1 :bisque2 :bisque3 :bisque4 :black :blanchedalmond :blue :blue1 :blue2 :blue3 :blue4 :blueviolet :brown :brown1 :brown2 :brown3 :brown4 :burlywood :burlywood1 :burlywood2 :burlywood3 :burlywood4 :cadetblue :cadetblue1 :cadetblue2 :cadetblue3 :cadetblue4 :chartreuse :chartreuse1 :chartreuse2 :chartreuse3 :chartreuse4 :chocolate :chocolate1 :chocolate2 :chocolate3 :chocolate4 :coral :coral1 :coral2 :coral3 :coral4 :cornflowerblue :cornsilk :cornsilk1 :cornsilk2 :cornsilk3 :cornsilk4 :cyan :cyan1 :cyan2 :cyan3 :cyan4 :darkblue :darkcyan :darkgoldenrod :darkgoldenrod1 :darkgoldenrod2 :darkgoldenrod3 :darkgoldenrod4 :darkgray :darkgreen :darkgrey :darkkhaki :darkmagenta :darkolivegreen :darkolivegreen1 :darkolivegreen2 :darkolivegreen3 :darkolivegreen4 :darkorange :darkorange1 :darkorange2 :darkorange3 :darkorange4 :darkorchid :darkorchid1 :darkorchid2 :darkorchid3 :darkorchid4 :darkred :darksalmon :darkseagreen :darkseagreen1 :darkseagreen2 :darkseagreen3 :darkseagreen4 :darkslateblue :darkslategray :darkslategray1 :darkslategray2 :darkslategray3 :darkslategray4 :darkslategrey :darkturquoise :darkviolet :debianred :deeppink :deeppink1 :deeppink2 :deeppink3 :deeppink4 :deepskyblue :deepskyblue1 :deepskyblue2 :deepskyblue3 :deepskyblue4 :dimgray :dimgrey :dodgerblue :dodgerblue1 :dodgerblue2 :dodgerblue3 :dodgerblue4 :firebrick :firebrick1 :firebrick2 :firebrick3 :firebrick4 :floralwhite :forestgreen :gainsboro :ghostwhite :gold :gold1 :gold2 :gold3 :gold4 :goldenrod :goldenrod1 :goldenrod2 :goldenrod3 :goldenrod4 :gray :gray0 :gray1 :gray10 :gray100 :gray11 :gray12 :gray13 :gray14 :gray15 :gray16 :gray17 :gray18 :gray19 :gray2 :gray20 :gray21 :gray22 :gray23 :gray24 :gray25 :gray26 :gray27 :gray28 :gray29 :gray3 :gray30 :gray31 :gray32 :gray33 :gray34 :gray35 :gray36 :gray37 :gray38 :gray39 :gray4 :gray40 :gray41 :gray42 :gray43 :gray44 :gray45 :gray46 :gray47 :gray48 :gray49 :gray5 :gray50 :gray51 :gray52 :gray53 :gray54 :gray55 :gray56 :gray57 :gray58 :gray59 :gray6 :gray60 :gray61 :gray62 :gray63 :gray64 :gray65 :gray66 :gray67 :gray68 :gray69 :gray7 :gray70 :gray71 :gray72 :gray73 :gray74 :gray75 :gray76 :gray77 :gray78 :gray79 :gray8 :gray80 :gray81 :gray82 :gray83 :gray84 :gray85 :gray86 :gray87 :gray88 :gray89 :gray9 :gray90 :gray91 :gray92 :gray93 :gray94 :gray95 :gray96 :gray97 :gray98 :gray99 :green :green1 :green2 :green3 :green4 :greenyellow :grey :grey0 :grey1 :grey10 :grey100 :grey11 :grey12 :grey13 :grey14 :grey15 :grey16 :grey17 :grey18 :grey19 :grey2 :grey20 :grey21 :grey22 :grey23 :grey24 :grey25 :grey26 :grey27 :grey28 :grey29 :grey3 :grey30 :grey31 :grey32 :grey33 :grey34 :grey35 :grey36 :grey37 :grey38 :grey39 :grey4 :grey40 :grey41 :grey42 :grey43 :grey44 :grey45 :grey46 :grey47 :grey48 :grey49 :grey5 :grey50 :grey51 :grey52 :grey53 :grey54 :grey55 :grey56 :grey57 :grey58 :grey59 :grey6 :grey60 :grey61 :grey62 :grey63 :grey64 :grey65 :grey66 :grey67 :grey68 :grey69 :grey7 :grey70 :grey71 :grey72 :grey73 :grey74 :grey75 :grey76 :grey77 :grey78 :grey79 :grey8 :grey80 :grey81 :grey82 :grey83 :grey84 :grey85 :grey86 :grey87 :grey88 :grey89 :grey9 :grey90 :grey91 :grey92 :grey93 :grey94 :grey95 :grey96 :grey97 :grey98 :grey99 :honeydew :honeydew1 :honeydew2 :honeydew3 :honeydew4 :hotpink :hotpink1 :hotpink2 :hotpink3 :hotpink4 :indianred :indianred1 :indianred2 :indianred3 :indianred4 :ivory :ivory1 :ivory2 :ivory3 :ivory4 :khaki :khaki1 :khaki2 :khaki3 :khaki4 :lavender :lavenderblush :lavenderblush1 :lavenderblush2 :lavenderblush3 :lavenderblush4 :lawngreen :lemonchiffon :lemonchiffon1 :lemonchiffon2 :lemonchiffon3 :lemonchiffon4 :lightblue :lightblue1 :lightblue2 :lightblue3 :lightblue4 :lightcoral :lightcyan :lightcyan1 :lightcyan2 :lightcyan3 :lightcyan4 :lightgoldenrod :lightgoldenrod1 :lightgoldenrod2 :lightgoldenrod3 :lightgoldenrod4 :lightgoldenrodyellow :lightgray :lightgreen :lightgrey :lightpink :lightpink1 :lightpink2 :lightpink3 :lightpink4 :lightsalmon :lightsalmon1 :lightsalmon2 :lightsalmon3 :lightsalmon4 :lightseagreen :lightskyblue :lightskyblue1 :lightskyblue2 :lightskyblue3 :lightskyblue4 :lightslateblue :lightslategray :lightslategrey :lightsteelblue :lightsteelblue1 :lightsteelblue2 :lightsteelblue3 :lightsteelblue4 :lightyellow :lightyellow1 :lightyellow2 :lightyellow3 :lightyellow4 :limegreen :linen :magenta :magenta1 :magenta2 :magenta3 :magenta4 :maroon :maroon1 :maroon2 :maroon3 :maroon4 :mediumaquamarine :mediumblue :mediumorchid :mediumorchid1 :mediumorchid2 :mediumorchid3 :mediumorchid4 :mediumpurple :mediumpurple1 :mediumpurple2 :mediumpurple3 :mediumpurple4 :mediumseagreen :mediumslateblue :mediumspringgreen :mediumturquoise :mediumvioletred :midnightblue :mintcream :mistyrose :mistyrose1 :mistyrose2 :mistyrose3 :mistyrose4 :moccasin :navajowhite :navajowhite1 :navajowhite2 :navajowhite3 :navajowhite4 :navy :navyblue :oldlace :olivedrab :olivedrab1 :olivedrab2 :olivedrab3 :olivedrab4 :orange :orange1 :orange2 :orange3 :orange4 :orangered :orangered1 :orangered2 :orangered3 :orangered4 :orchid :orchid1 :orchid2 :orchid3 :orchid4 :palegoldenrod :palegreen :palegreen1 :palegreen2 :palegreen3 :palegreen4 :paleturquoise :paleturquoise1 :paleturquoise2 :paleturquoise3 :paleturquoise4 :palevioletred :palevioletred1 :palevioletred2 :palevioletred3 :palevioletred4 :papayawhip :peachpuff :peachpuff1 :peachpuff2 :peachpuff3 :peachpuff4 :peru :pink :pink1 :pink2 :pink3 :pink4 :plum :plum1 :plum2 :plum3 :plum4 :powderblue :purple :purple1 :purple2 :purple3 :purple4 :red :red1 :red2 :red3 :red4 :rosybrown :rosybrown1 :rosybrown2 :rosybrown3 :rosybrown4 :royalblue :royalblue1 :royalblue2 :royalblue3 :royalblue4 :saddlebrown :salmon :salmon1 :salmon2 :salmon3 :salmon4 :sandybrown :seagreen :seagreen1 :seagreen2 :seagreen3 :seagreen4 :seashell :seashell1 :seashell2 :seashell3 :seashell4 :sienna :sienna1 :sienna2 :sienna3 :sienna4 :skyblue :skyblue1 :skyblue2 :skyblue3 :skyblue4 :slateblue :slateblue1 :slateblue2 :slateblue3 :slateblue4 :slategray :slategray1 :slategray2 :slategray3 :slategray4 :slategrey :snow :snow1 :snow2 :snow3 :snow4 :springgreen :springgreen1 :springgreen2 :springgreen3 :springgreen4 :steelblue :steelblue1 :steelblue2 :steelblue3 :steelblue4 :tan :tan1 :tan2 :tan3 :tan4 :thistle :thistle1 :thistle2 :thistle3 :thistle4 :tomato :tomato1 :tomato2 :tomato3 :tomato4 :turquoise :turquoise1 :turquoise2 :turquoise3 :turquoise4 :violet :violetred :violetred1 :violetred2 :violetred3 :violetred4 :wheat :wheat1 :wheat2 :wheat3 :wheat4 :white :whitesmoke :yellow :yellow1 :yellow2 :yellow3 :yellow4 :yellowgreen)

A list of supported color names.


[generated by 40ANTS-DOC]

About

A framework for writing OSX menu bar plugins in Common Lisp.

Resources

Stars

11 stars

Watchers

3 watching

Forks

Packages

 
 
 

Contributors