Przeglądaj źródła

Merge pull request #237 from ogham/exa/term_size

Use term_size crate to fetch terminal size.
Benjamin Sago 8 lat temu
rodzic
commit
d701547ec4
5 zmienionych plików z 37 dodań i 67 usunięć
  1. 34 0
      Cargo.lock
  2. 1 0
      Cargo.toml
  3. 1 1
      src/exa.rs
  4. 1 2
      src/options/view.rs
  5. 0 64
      src/term.rs

+ 34 - 0
Cargo.lock

@@ -15,6 +15,7 @@ dependencies = [
  "number_prefix 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "scoped_threadpool 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "term_grid 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "term_size 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "users 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "zoneinfo_compiled 0.2.1 (git+https://github.com/rust-datetime/zoneinfo-compiled.git)",
@@ -117,6 +118,15 @@ dependencies = [
  "nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "lazy_static"
 version = "0.2.8"
@@ -317,6 +327,16 @@ dependencies = [
  "unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "term_size"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.29 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "unicode-bidi"
 version = "0.3.4"
@@ -358,6 +378,16 @@ name = "vcpkg"
 version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
 [[package]]
 name = "zoneinfo_compiled"
 version = "0.2.1"
@@ -382,6 +412,7 @@ dependencies = [
 "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb"
 "checksum idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d"
 "checksum iso8601 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "11dc464f8c6f17595d191447c9c6559298b2d023d6f846a4a23ac7ea3c46c477"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
 "checksum lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3b37545ab726dd833ec6420aaba8231c5b320814b9029ad585555d2a03e94fbf"
 "checksum libc 0.2.29 (registry+https://github.com/rust-lang/crates.io-index)" = "8a014d9226c2cc402676fbe9ea2e15dd5222cd1dd57f576b5b283178c944a264"
 "checksum libgit2-sys 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "0f1641ccb55181967a3e5ee4ae2911c0563492f016383ea67a27886181de088c"
@@ -408,10 +439,13 @@ dependencies = [
 "checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
 "checksum scoped_threadpool 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "3ef399c8893e8cb7aa9696e895427fab3a6bf265977bb96e126f24ddd2cda85a"
 "checksum term_grid 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ccc202875496cf72a683a1ecd66f0742a830e73c202bdbd21867d73dfaac8343"
+"checksum term_size 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2b6b55df3198cc93372e85dd2ed817f0e38ce8cc0f22eb32391bfad9c4bf209"
 "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
 "checksum unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "51ccda9ef9efa3f7ef5d91e8f9b83bbe6955f9bf86aec89d5cce2c874625920f"
 "checksum unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "bf3a113775714a22dcb774d8ea3655c53a32debae63a063acc00a91cc586245f"
 "checksum url 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eeb819346883532a271eb626deb43c4a1bb4c4dd47c519bd78137c3e72a4fe27"
 "checksum users 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e7d8fb16f17ce0e6a18a25ce39f08edb5fbe9a25f3f346c9dca5e6ffc0485cdf"
 "checksum vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9e0a7d8bed3178a8fb112199d466eeca9ed09a14ba8ad67718179b4fd5487d0b"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
 "checksum zoneinfo_compiled 0.2.1 (git+https://github.com/rust-datetime/zoneinfo-compiled.git)" = "<none>"

+ 1 - 0
Cargo.toml

@@ -36,6 +36,7 @@ scoped_threadpool = "0.1.*"
 term_grid = "0.1.2"
 unicode-width = "0.1.4"
 users = "0.5.2"
+term_size = "0.3.0"
 
 [features]
 default = [ "git" ]

+ 1 - 1
src/exa.rs

@@ -15,6 +15,7 @@ extern crate term_grid;
 extern crate unicode_width;
 extern crate users;
 extern crate zoneinfo_compiled;
+extern crate term_size;
 
 #[cfg(feature="git")] extern crate git2;
 
@@ -37,7 +38,6 @@ mod fs;
 mod info;
 mod options;
 mod output;
-mod term;
 
 
 /// The main program wrapper.

+ 1 - 2
src/options/view.rs

@@ -11,7 +11,6 @@ use output::time::TimeFormat;
 use options::Misfire;
 use fs::feature::xattr;
 
-
 /// The **view** contains all information about how to format output.
 #[derive(Debug)]
 pub struct View {
@@ -393,7 +392,7 @@ impl Classify {
 // so it’s easier to just cache it the first time it runs.
 lazy_static! {
     static ref TERM_WIDTH: Option<usize> = {
-        use term::dimensions;
+        use term_size::dimensions;
         dimensions().map(|t| t.0)
     };
 }

+ 0 - 64
src/term.rs

@@ -1,64 +0,0 @@
-//! System calls for getting the terminal size.
-//!
-//! Getting the terminal size is performed using an ioctl command that takes
-//! the file handle to the terminal -- which in this case, is stdout -- and
-//! populates a structure containing the values.
-//!
-//! The size is needed when the user wants the output formatted into columns:
-//! the default grid view, or the hybrid grid-details view.
-
-use std::mem::zeroed;
-use libc::{c_int, c_ushort, c_ulong, STDOUT_FILENO};
-
-
-/// The number of rows and columns of a terminal.
-struct Winsize {
-    ws_row: c_ushort,
-    ws_col: c_ushort,
-}
-
-// Unfortunately the actual command is not standardised...
-
-#[cfg(any(target_os = "linux", target_os = "android"))]
-static TIOCGWINSZ: c_ulong = 0x5413;
-
-#[cfg(any(target_os = "macos",
-          target_os = "ios",
-          target_os = "bitrig",
-          target_os = "dragonfly",
-          target_os = "freebsd",
-          target_os = "netbsd",
-          target_os = "openbsd"))]
-static TIOCGWINSZ: c_ulong = 0x40087468;
-
-extern {
-    pub fn ioctl(fd: c_int, request: c_ulong, ...) -> c_int;
-}
-
-/// Runs the ioctl command. Returns (0, 0) if output is not to a terminal, or
-/// there is an error. (0, 0) is an invalid size to have anyway, which is why
-/// it can be used as a nil value.
-unsafe fn get_dimensions() -> Winsize {
-    let mut window: Winsize = zeroed();
-    let result = ioctl(STDOUT_FILENO, TIOCGWINSZ, &mut window);
-
-    if result == -1 {
-        zeroed()
-    }
-    else {
-        window
-    }
-}
-
-/// Query the current processes's output, returning its width and height as a
-/// number of characters. Returns `None` if the output isn't to a terminal.
-pub fn dimensions() -> Option<(usize, usize)> {
-    let w = unsafe { get_dimensions() };
-
-    if w.ws_col == 0 || w.ws_row == 0 {
-        None
-    }
-    else {
-        Some((w.ws_col as usize, w.ws_row as usize))
-    }
-}