binocular-cli 0.2.3

Not exactly a telescope, but it's useful sometimes. TUI to search/navigate through files and workspaces.
Documentation
use crate::preview::structured_log::LogEntry;
use crate::preview::{PreviewContent, PreviewSource};
use crate::runtime::interactive::input::InputEvent;
use crate::search::matcher::MatcherState;
use crate::search::types::SearchMode;

pub enum AppEvent {
    Input(InputEvent),
    Matcher(MatcherState, u64),
    Preview(PreviewSource, PreviewContent),
    LogAppend(String, Vec<LogEntry>),
}

#[derive(Debug, PartialEq, Clone, Copy)]
pub enum Mode {
    Search,
    Preview,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum InputMode {
    Normal,
    Visual,
    VisualLine,
    Insert,
    Command,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum HelpTab {
    Overview,
    Search,
    Preview,
    Logs,
    Layout,
}

impl HelpTab {
    pub fn title(self) -> &'static str {
        match self {
            Self::Overview => "Overview",
            Self::Search => "Search",
            Self::Preview => "Preview",
            Self::Logs => "Logs",
            Self::Layout => "Layout",
        }
    }

    pub fn next(self) -> Self {
        match self {
            Self::Overview => Self::Search,
            Self::Search => Self::Preview,
            Self::Preview => Self::Logs,
            Self::Logs => Self::Layout,
            Self::Layout => Self::Overview,
        }
    }

    pub fn previous(self) -> Self {
        match self {
            Self::Overview => Self::Layout,
            Self::Search => Self::Overview,
            Self::Preview => Self::Search,
            Self::Logs => Self::Preview,
            Self::Layout => Self::Logs,
        }
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AppAction {
    Quit,
    FocusSearch,
    FocusPreview,
    ToggleHelp,
    CloseHelp,
    ShowHelpTab(HelpTab),
    NextHelpTab,
    PreviousHelpTab,
    TogglePreviewFullscreen,
    SwapPanes,
    AdjustPreviewWidth(i16),
    ToggleSearchBarPosition,
    TogglePreviewVisibility,
    ToggleExactMatcher,
    SetSearchMode(SearchMode),
    RequestSearchRestart,
}