diff options
author | Theodore Dubois <tblodt@icloud.com> | 2019-04-28 06:24:58 -0700 |
---|---|---|
committer | Christian Duerr <chrisduerr@users.noreply.github.com> | 2019-04-28 13:24:58 +0000 |
commit | dbd8538762ef8968a493e1bf996e8693479ca783 (patch) | |
tree | 32ac2a6a5e01238a272d4ba534551d2e42903c7a /src/util.rs | |
parent | 9c6d12ea2c863ba76015bdedc00db13b7307725a (diff) | |
download | r-alacritty-dbd8538762ef8968a493e1bf996e8693479ca783.tar.gz r-alacritty-dbd8538762ef8968a493e1bf996e8693479ca783.tar.bz2 r-alacritty-dbd8538762ef8968a493e1bf996e8693479ca783.zip |
Split alacritty into a separate crates
The crate containing the entry point is called alacritty, and the crate
containing everything else is called alacritty_terminal.
Diffstat (limited to 'src/util.rs')
-rw-r--r-- | src/util.rs | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/src/util.rs b/src/util.rs deleted file mode 100644 index b8703012..00000000 --- a/src/util.rs +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2016 Joe Wilm, The Alacritty Project Contributors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use std::ffi::OsStr; -use std::process::{Command, Stdio}; -use std::{cmp, io}; - -#[cfg(not(windows))] -use std::os::unix::process::CommandExt; - -#[cfg(windows)] -use std::os::windows::process::CommandExt; -#[cfg(windows)] -use winapi::um::winbase::{CREATE_NEW_PROCESS_GROUP, CREATE_NO_WINDOW}; - -/// Threading utilities -pub mod thread { - /// Like `thread::spawn`, but with a `name` argument - pub fn spawn_named<F, T, S>(name: S, f: F) -> ::std::thread::JoinHandle<T> - where - F: FnOnce() -> T, - F: Send + 'static, - T: Send + 'static, - S: Into<String>, - { - ::std::thread::Builder::new().name(name.into()).spawn(f).expect("thread spawn works") - } - - pub use std::thread::*; -} - -pub fn limit<T: Ord>(value: T, min: T, max: T) -> T { - cmp::min(cmp::max(value, min), max) -} - -/// Utilities for writing to the -pub mod fmt { - use std::fmt; - - macro_rules! define_colors { - ($($(#[$attrs:meta])* pub struct $s:ident => $color:expr;)*) => { - $( - $(#[$attrs])* - pub struct $s<T>(pub T); - - impl<T: fmt::Display> fmt::Display for $s<T> { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, concat!("\x1b[", $color, "m{}\x1b[0m"), self.0) - } - } - - impl<T: fmt::Debug> fmt::Debug for $s<T> { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, concat!("\x1b[", $color, "m{:?}\x1b[0m"), self.0) - } - } - )* - } - } - - define_colors! { - /// Write a `Display` or `Debug` escaped with Red - pub struct Red => "31"; - - /// Write a `Display` or `Debug` escaped with Green - pub struct Green => "32"; - - /// Write a `Display` or `Debug` escaped with Yellow - pub struct Yellow => "33"; - } -} - -#[cfg(not(windows))] -pub fn start_daemon<I, S>(program: &str, args: I) -> io::Result<()> -where - I: IntoIterator<Item = S>, - S: AsRef<OsStr>, -{ - Command::new(program) - .args(args) - .stdin(Stdio::null()) - .stdout(Stdio::null()) - .stderr(Stdio::null()) - .before_exec(|| unsafe { - match ::libc::fork() { - -1 => return Err(io::Error::last_os_error()), - 0 => (), - _ => ::libc::_exit(0), - } - - if ::libc::setsid() == -1 { - return Err(io::Error::last_os_error()); - } - - Ok(()) - }) - .spawn()? - .wait() - .map(|_| ()) -} - -#[cfg(windows)] -pub fn start_daemon<I, S>(program: &str, args: I) -> io::Result<()> -where - I: IntoIterator<Item = S>, - S: AsRef<OsStr>, -{ - // Setting all the I/O handles to null and setting the - // CREATE_NEW_PROCESS_GROUP and CREATE_NO_WINDOW has the effect - // that console applications will run without opening a new - // console window. - Command::new(program) - .args(args) - .stdin(Stdio::null()) - .stdout(Stdio::null()) - .stderr(Stdio::null()) - .creation_flags(CREATE_NEW_PROCESS_GROUP | CREATE_NO_WINDOW) - .spawn() - .map(|_| ()) -} - -#[cfg(test)] -mod tests { - use super::limit; - - #[test] - fn limit_works() { - assert_eq!(10, limit(10, 0, 100)); - assert_eq!(10, limit(5, 10, 100)); - assert_eq!(100, limit(1000, 10, 100)); - } -} |