mod rope; mod tiocgwinsz; use rope::Rope; use std::ffi::{OsStr, OsString}; use std::path::Path; fn edit(file: &OsStr) -> Result<(), String> { let r = match Rope::open(Path::new(file)) { Ok(r) => r, Err(err) => { return Err(format!("open file {}: {}", file.to_string_lossy(), err)); } }; let size = match tiocgwinsz::size() { Some(size) => size, None => { return Err(String::from("cannot get terminal size")); } }; let mut stdout = std::io::stdout(); if let Err(err) = r.print_lines(&mut stdout, 0, usize::from(size.ws_row)) { return Err(format!("write: {}", err)); } return Ok(()); } fn main() { let args: Vec = std::env::args_os().collect(); if args.len() != 2 { println!("Usage: edit "); std::process::exit(1); } if let Err(err) = edit(&args[1]) { println!("FAIL: {}", err); std::process::exit(1); } }