// This file is part of Germ . // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, version 3. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // Copyright (C) 2022-2022 Fuwn // SPDX-License-Identifier: GPL-3.0-only #![deny( warnings, nonstandard_style, unused, future_incompatible, rust_2018_idioms, unsafe_code, clippy::all, clippy::nursery, clippy::pedantic )] #![recursion_limit = "128"] mod app; mod command; mod input; mod stateful_list; mod ui; use app::App; use crossterm::{event, execute, terminal}; fn main() -> Result<(), Box> { let mut args = std::env::args(); let mut app = App::new(); if let Some(arg) = args.nth(1) { match arg.as_str() { "--version" | "-v" => { println!("{}", env!("CARGO_PKG_VERSION")); return Ok(()); } "--help" | "-h" => { println!( r#"usage: {} [option, capsule_uri] Options: --version, -v show version text --help, -h show help text Sample invocations: {0} gemini://gem.rest/ {0} --help Report bugs to https://github.com/gemrest/sydney/issues"#, args .next() .unwrap_or_else(|| env!("CARGO_PKG_NAME").to_string()) ); return Ok(()); } _ => { app.url = url::Url::parse(&arg)?; app.make_request(); } } } terminal::enable_raw_mode()?; let mut stdout = std::io::stdout(); execute!( stdout, terminal::EnterAlternateScreen, event::EnableMouseCapture )?; let mut terminal = tui::Terminal::new(tui::backend::CrosstermBackend::new(stdout))?; let result = App::run(&mut terminal, app, std::time::Duration::from_millis(250)); terminal::disable_raw_mode()?; execute!( terminal.backend_mut(), terminal::LeaveAlternateScreen, event::DisableMouseCapture )?; terminal.show_cursor()?; if let Err(err) = result { println!("{:?}", err); } Ok(()) }