zellij-sheets 0.1.0

Terminal-based spreadsheet viewer powered by Zellij
Documentation
#[cfg(target_family = "wasm")]
mod plugin;
#[cfg(not(target_family = "wasm"))]
use std::path::PathBuf;
#[cfg(not(target_family = "wasm"))]
use std::sync::Arc;

#[cfg(not(target_family = "wasm"))]
use zellij_sheets::{ui::UiRenderer, SheetsConfig, SheetsState};

#[cfg(not(target_family = "wasm"))]
struct SheetsArgs {
    input_path: PathBuf,
}

#[cfg(not(target_family = "wasm"))]
fn main() -> anyhow::Result<()> {
    let args = parse_args()?;
    let config = SheetsConfig::default();
    let mut state = SheetsState::new(Arc::new(config));
    state.load_file(args.input_path)?;

    let width = std::env::var("COLUMNS")
        .ok()
        .and_then(|value| value.parse::<usize>().ok())
        .unwrap_or(100);
    let height = std::env::var("LINES")
        .ok()
        .and_then(|value| value.parse::<usize>().ok())
        .unwrap_or(24);
    state.resize(width, height);

    let renderer = UiRenderer::new();
    println!(
        "{}",
        renderer
            .draw_ui(&state)
            .unwrap_or_else(|e| format!("Error: {}", e))
    );
    Ok(())
}

#[cfg(not(target_family = "wasm"))]
fn parse_args() -> anyhow::Result<SheetsArgs> {
    let args: Vec<String> = std::env::args().collect();
    let mut input_path: Option<PathBuf> = None;

    for (i, arg) in args.iter().enumerate() {
        if arg == "--input" && i + 1 < args.len() {
            input_path = Some(PathBuf::from(&args[i + 1]));
        }
    }

    let input_path =
        input_path.ok_or_else(|| anyhow::anyhow!("Usage: zellij-sheets --input <file>"))?;
    Ok(SheetsArgs { input_path })
}

#[cfg(target_family = "wasm")]
use plugin::PluginState;
#[cfg(target_family = "wasm")]
use zellij_tile::{shim::report_panic, ZellijPlugin};

#[cfg(target_family = "wasm")]
zellij_tile::register_plugin!(PluginState);