               'extra
             t))))))
 
+(defun jail-windows--update-modeline (&optional layout-active-p)
+  "[Internal] Set the modeline display text based on active state."
+  (setq jail-windows-mode
+        (when (and (jail-windows--frame-active-p)
+                   (if layout-active-p
+                       layout-active-p
+                     (setq layout-active-p (jail-windows--layout-active-p))))
+          (prog1
+              (concat jail-windows--modeline-base
+                      (cl-case layout-active-p
+                        (extra "+")
+                        (t "=")
+                        (partial "-")))
+            (jail-windows--set-option nil
+                                      'last-layout-active
+                                      layout-active-p)))))
+
 (defun jail-windows--window-config-change-hook-fun ()
   "[Internal] Hook function for `window-configuration-change-hook' to determine
 and log whether a window configuration change has "

                               "Jailed window configuration changed! %s --> %s"
                               last-active-p
                               layout-active-p)
        (jail-windows--set-option nil 'last-layout-active layout-active-p)))))

;; TODO(rgrimm): Advise set-window-configuration to rebuild groups after it has
;; been called

  (let* ((choices (list (-map #'car jail-windows--registered-layouts)))
         (choice (completing-read prompt choices predicate t initial-input)))
    (if (equal choice "")
        (caar choices)
      (intern choice))))

(defun jail-windows--message (type &rest args)
