mod rope; mod term; use rope::Rope; use std::ffi::{OsStr, OsString}; use std::io::Write; use std::path::Path; fn edit(file: &OsStr) -> Result<(), String> { let _raw_handle = term::raw(); 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 term::size() { Some(size) => size, None => { return Err(String::from("cannot get terminal size")); } }; let mut stdout = std::io::stdout(); for i in 0..usize::from(size.ws_row) { let _ = r.print_line(&mut stdout, i); let _ = stdout.write(b"\r\n"); } 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); } }