lernie 0.1.111

lernie: the operator seat — the window and wire client for a yog server
//! **One overlay stands at a time, read both ways** (DESIGN §4.42 item 7;
//! §4.46 item 3; bl-8c80).
//!
//! Opening the switcher put down whatever stood (bl-339d), and so did
//! opening a dropup (bl-27dd), each with its own loop over [`Model::escape`].
//! Opening a pane by its word did not — the box stands down under a pane, so
//! the word was never typed under one — until the chords reached the words
//! from under anything: Ctrl+, under the switcher opened the settings pane
//! beneath it, and Esc then revealed it. The loop is one function now, and
//! every word fired goes through it ([`crate::ui::slash::fire`]).
//!
//! **The enrollment is the exception it is everywhere**: it covers the
//! window and is only ever left by its own gesture, so nothing is fired
//! under it at all.

use crate::ui::Model;

impl Model {
    /// **Put down whatever stands** — every pane, the switcher, a draft
    /// inside a pane — by the same steps Esc would take, one at a time,
    /// until nothing covers the window. The dropup is not covered and is
    /// left alone; the enrollment is never touched.
    pub fn uncover(&mut self) {
        if self.enroll.is_some() {
            return;
        }
        while self.covered() {
            self.escape();
        }
    }
}