                assoc (:up-arrow control-buttons)
                (button-state (:up-arrow control-buttons) :dim))))))
 
+(defn- update-mode-buttons
+  "Illuminate the buttons which activate modes while they are held
+  down. Make them dim when not held, and bright when held."
+  [controller mode-buttons]
+  (doseq [button mode-buttons]
+    (swap! (:next-text-buttons controller)
+           assoc (button control-buttons)
+           (button-state (button control-buttons)
+                         (if (in-mode? controller button) :bright :dim)))))
+
 (defn- update-interface
   "Determine the desired current state of the interface, and send any
   changes needed to get it to that state."

        (when-not (or (show/running?) (in-mode? controller :stop))
          (enter-stop-mode controller :already-stopped true)))

      ;; Reflect the shift button state
      (swap! (:next-text-buttons controller)
             assoc (:shift control-buttons)
             (button-state (:shift control-buttons)
                           (if (in-mode? controller :shift) :bright :dim)))

      ;; Reflect the record button state
      (swap! (:next-text-buttons controller)
             assoc (:record control-buttons)
             (button-state (:record control-buttons)
                           (if (in-mode? controller :record) :bright :dim)))

      (render-cue-grid controller snapshot)
      (update-scroll-arrows controller)


      (< @counter 36)
      (doseq [x (range 0 8)]
        (set-pad-color controller x (- 35 @counter) off-color))

      :else
      (do
        (clear-interface controller)
