free-launch 0.2.9

A simple fuzzy launcher written in Rust.
Documentation
use crate::free_launch::free_launch::{Actions, FreeLaunch};

const VERSION_STRING: &str = concat!(
    env!("CARGO_PKG_VERSION"),
    " (",
    env!("GIT_COMMIT_HASH"),
    ")"
);

impl FreeLaunch {
    #[must_use]
    pub(crate) fn show_help_screen(&self, ui: &mut egui::Ui) -> Vec<Actions> {
        egui::ScrollArea::vertical().show(ui, |ui| {
            ui.vertical_centered(|ui| {
                ui.heading("Free Launch - Help");
                ui.add_space(10.0);

                ui.label(format!("Version: {}", VERSION_STRING));
                ui.add_space(10.0);

                ui.label("Free Launch is an application launcher for Linux desktop environments.");
                ui.add_space(10.0);

                ui.separator();
                ui.add_space(10.0);

                ui.heading("Keyboard Shortcuts");
                ui.add_space(10.0);

                ui.horizontal(|ui| {
                    ui.label("Search:");
                    ui.label("Type to filter applications");
                });

                ui.horizontal(|ui| {
                    ui.label("↑/↓ Arrow Keys:");
                    ui.label("Navigate through results");
                });

                ui.horizontal(|ui| {
                    ui.label("Page Up/Down:");
                    ui.label("Navigate by page");
                });

                ui.horizontal(|ui| {
                    ui.label("Enter:");
                    ui.label("Launch selected application");
                });

                ui.horizontal(|ui| {
                    ui.label("Shift+Enter:");
                    ui.label("Open directory containing application");
                });

                ui.horizontal(|ui| {
                    ui.label("Tab:");
                    ui.label("Select/deselect highlighted item");
                });

                ui.horizontal(|ui| {
                    ui.label("Ctrl+H or Ctrl+?:");
                    ui.label("Toggle this help screen");
                });

                ui.horizontal(|ui| {
                    ui.label("Ctrl+Q, Ctrl+W, or Escape:");
                    ui.label("Quit Free Launch");
                });

                ui.add_space(20.0);
                ui.separator();
                ui.add_space(10.0);

                // Show search providers if any are configured
                if !self.search_providers.is_empty() {
                    ui.heading("Search Providers");
                    ui.add_space(10.0);

                    ui.label("Type an alias followed by your search term to search directly:");
                    ui.add_space(5.0);

                    for provider in &self.search_providers {
                        ui.horizontal(|ui| {
                            // Show all aliases for this provider
                            let aliases = provider.aliases.join(", ");
                            ui.label(format!("{}:", aliases));
                            ui.label(&provider.name);
                        });
                    }

                    ui.add_space(10.0);
                    ui.label(
                        "Example: 'g rust programming' to search Google for 'rust programming'",
                    );
                    ui.add_space(20.0);
                    ui.separator();
                    ui.add_space(10.0);
                }

                ui.label("Press Ctrl+H or Ctrl+? again to return to the main screen.");
            });
        });

        Default::default()
    }
}