diff options
| author | Rose Hogenson <rosehogenson@posteo.net> | 2023-12-26 18:11:55 -0800 |
|---|---|---|
| committer | Rose Hogenson <rosehogenson@posteo.net> | 2023-12-26 18:11:55 -0800 |
| commit | 9f6447adb277ac7ea6332600d56b98666189168e (patch) | |
| tree | 75a06e33220d93ea682d4c4904bb62e1e1d9c90a | |
| parent | d321e38ffa410c7e2136e623245c04eebb842c1f (diff) | |
| download | editor-9f6447adb277ac7ea6332600d56b98666189168e.tar.zst | |
Add function to get terminal size.
| -rw-r--r-- | Cargo.lock | 9 | ||||
| -rw-r--r-- | Cargo.toml | 1 | ||||
| -rw-r--r-- | src/main.rs | 34 | ||||
| -rw-r--r-- | src/tiocgwinsz.rs | 18 |
4 files changed, 52 insertions, 10 deletions
@@ -5,3 +5,12 @@ version = 3 [[package]] name = "edit" version = "0.1.0" +dependencies = [ + "libc", +] + +[[package]] +name = "libc" +version = "0.2.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" @@ -6,3 +6,4 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +"libc" = "0.2" diff --git a/src/main.rs b/src/main.rs index 5302d59..bb3797d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,22 +1,36 @@ mod rope; +mod tiocgwinsz; use rope::Rope; -use std::ffi::OsString; +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)); + } + }; + println!("{}", r); + let size = match tiocgwinsz::size() { + Some(size) => size, + None => { + return Err(String::from("cannot get terminal size")); + } + }; + println!("{}, {}", size.ws_row, size.ws_col); + return Ok(()); +} + fn main() { let args: Vec<OsString> = std::env::args_os().collect(); if args.len() != 2 { println!("Usage: edit <filename>"); std::process::exit(1); } - let file = Path::new(&args[1]); - let r = match Rope::open(file) { - Ok(r) => r, - Err(err) => { - println!("FAIL: open file {}: {}", file.to_string_lossy(), err); - std::process::exit(1); - } - }; - println!("{}", r); + if let Err(err) = edit(&args[0]) { + println!("FAIL: {}", err); + std::process::exit(1); + } } diff --git a/src/tiocgwinsz.rs b/src/tiocgwinsz.rs new file mode 100644 index 0000000..9fdf9a4 --- /dev/null +++ b/src/tiocgwinsz.rs @@ -0,0 +1,18 @@ +use libc::{c_int, winsize}; + +pub fn size() -> Option<winsize> { + let mut window: winsize = winsize { + ws_row: 0, + ws_col: 0, + ws_xpixel: 0, + ws_ypixel: 0, + }; + let result: c_int; + unsafe { + result = libc::ioctl(0, libc::TIOCGWINSZ, &mut window); + } + if result < 0 { + return None; + } + return Some(window); +} |
