From 53cde1c2b8981a710c1218ca4e977bbfcb9f8f1b Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Fri, 15 Jun 2018 21:42:40 +0200 Subject: [PATCH] Deamonize nvim-gtk by default --no-fork can be passed for normal behavior --- Cargo.lock | 10 ++++++++++ Cargo.toml | 1 + src/main.rs | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index c495e8c..7266838 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -369,6 +369,7 @@ dependencies = [ "toml 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-segmentation 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "unix-daemonize 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -677,6 +678,14 @@ name = "unicode-xid" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "unix-daemonize" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "unix_socket" version = "0.5.0" @@ -803,6 +812,7 @@ dependencies = [ "checksum unicode-segmentation 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a8083c594e02b8ae1654ae26f0ade5158b119bd88ad0e8227a5d8fcd72407946" "checksum unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "bf3a113775714a22dcb774d8ea3655c53a32debae63a063acc00a91cc586245f" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum unix-daemonize 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "531faed80732acaa13d1016c66d6a9180b5045c4fcef8daa20bb2baf46b13907" "checksum unix_socket 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6aa2700417c405c38f5e6902d699345241c28c0b7ade4abaad71e35a87eb1564" "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" "checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122" diff --git a/Cargo.toml b/Cargo.toml index 8f95b1b..4a481b8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,6 +36,7 @@ regex = "0.2" lazy_static = "1.0" unicode-width = "0.1.4" unicode-segmentation = "1.2.0" +unix-daemonize = "0.1" serde = "1.0" serde_derive = "1.0" diff --git a/src/main.rs b/src/main.rs index c7e0c37..b083c9d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,6 @@ #![windows_subsystem = "windows"] +extern crate unix_daemonize; extern crate cairo; extern crate env_logger; extern crate gdk; @@ -63,6 +64,7 @@ mod file_browser; mod subscriptions; mod misc; +use unix_daemonize::{daemonize_redirect, ChdirMode}; use std::env; use std::io::Read; use std::cell::RefCell; @@ -77,6 +79,7 @@ use shell::ShellOptions; const BIN_PATH_ARG: &str = "--nvim-bin-path"; const TIMEOUT_ARG: &str = "--timeout"; const DISABLE_WIN_STATE_RESTORE: &str = "--disable-win-restore"; +const NO_FORK: &str = "--no-fork"; fn main() { env_logger::init(); @@ -108,7 +111,23 @@ fn main() { .filter(|a| !a.starts_with(BIN_PATH_ARG)) .filter(|a| !a.starts_with(TIMEOUT_ARG)) .filter(|a| !a.starts_with(DISABLE_WIN_STATE_RESTORE)) + .filter(|a| !a.starts_with(NO_FORK)) .collect(); + + // fork to background by default + let want_fork = env::args() + .take_while(|a| *a != "--") + .skip(1) + .find(|a| a.starts_with(NO_FORK)) + .is_none(); + + if want_fork { + daemonize_redirect(Some("/tmp/nvim-gtk_stdout.log"), + Some("/tmp/nvim-gtk_stderr.log"), + ChdirMode::NoChdir) + .unwrap(); + } + app.run(&argv); }