From 34c54e7e0eb7c28406df112d118b82280be2adee Mon Sep 17 00:00:00 2001 From: Nathan Lilienthal Date: Fri, 3 May 2019 19:48:25 -0400 Subject: [PATCH] Add git hash to version string, and fix crate name (#2397) This moves `cli` out of `alacritty_terminal` and into `alacritty` where it belongs, along with the `clap` dependency. --- CHANGELOG.md | 1 + Cargo.lock | 9 +- alacritty/Cargo.toml | 4 + alacritty/build.rs | 19 ++ alacritty/src/cli.rs | 195 +++++++++++++++ alacritty/src/logging.rs | 4 +- alacritty/src/main.rs | 9 +- alacritty_terminal/Cargo.toml | 1 - alacritty_terminal/src/cli.rs | 243 ------------------- alacritty_terminal/src/config/mod.rs | 5 +- alacritty_terminal/src/config/options.rs | 72 ++++++ alacritty_terminal/src/display.rs | 7 +- alacritty_terminal/src/event.rs | 3 +- alacritty_terminal/src/lib.rs | 1 - alacritty_terminal/src/tty/unix.rs | 3 +- alacritty_terminal/src/tty/windows/conpty.rs | 3 +- alacritty_terminal/src/tty/windows/mod.rs | 3 +- alacritty_terminal/src/tty/windows/winpty.rs | 3 +- alacritty_terminal/src/window.rs | 3 +- 19 files changed, 318 insertions(+), 270 deletions(-) create mode 100644 alacritty/build.rs create mode 100644 alacritty/src/cli.rs delete mode 100644 alacritty_terminal/src/cli.rs create mode 100644 alacritty_terminal/src/config/options.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index f7121398..b5abc0a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 fullscreen without occupying another space - A new window option `startup_mode` which controls how the window is created - `_NET_WM_ICON` property is set on X11 now, allowing for WMs to show icons in titlebars +- Current Git commit hash to `alacritty --version` ### Changed diff --git a/Cargo.lock b/Cargo.lock index 4ace624e..5cc46268 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -26,10 +26,12 @@ name = "alacritty" version = "0.3.2" dependencies = [ "alacritty_terminal 0.3.2", + "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_tools_util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -40,7 +42,6 @@ version = "0.3.2" dependencies = [ "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "clipboard 0.5.0 (git+https://github.com/chrisduerr/rust-clipboard)", "crossbeam-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1954,6 +1955,11 @@ name = "rustc-demangle" version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "rustc_tools_util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "rustc_version" version = "0.2.3" @@ -3114,6 +3120,7 @@ dependencies = [ "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" "checksum reqwest 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)" = "943b9f85622f53bcf71721e0996f23688e3942e51fc33766c2e24a959316767b" "checksum rustc-demangle 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "ccc78bfd5acd7bf3e89cffcf899e5cb1a52d6fafa8dec2739ad70c9577a57288" +"checksum rustc_tools_util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c5a95edfa0c893236ae4778bb7c4752760e4c0d245e19b5eff33c5aa5eb9dc" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum rusttype 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "25951e85bb2647960969f72c559392245a5bd07446a589390bf427dda31cdc4a" "checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7" diff --git a/alacritty/Cargo.toml b/alacritty/Cargo.toml index 0d388cb1..742492fe 100644 --- a/alacritty/Cargo.toml +++ b/alacritty/Cargo.toml @@ -10,11 +10,15 @@ edition = "2018" [dependencies] alacritty_terminal = { path = "../alacritty_terminal" } +clap = "2" log = "0.4" time = "0.1.40" env_logger = "0.6.0" crossbeam-channel = "0.3.8" +[build-dependencies] +rustc_tools_util = "0.1" + [target.'cfg(target_os = "macos")'.dependencies] dirs = "1.0.2" diff --git a/alacritty/build.rs b/alacritty/build.rs new file mode 100644 index 00000000..2a1ce9e0 --- /dev/null +++ b/alacritty/build.rs @@ -0,0 +1,19 @@ +// Copyright 2019 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. + +fn main() { + let hash = rustc_tools_util::get_commit_hash() + .expect("couldn't get commit hash"); + println!("cargo:rustc-env=GIT_HASH={}", hash); +} diff --git a/alacritty/src/cli.rs b/alacritty/src/cli.rs new file mode 100644 index 00000000..90906218 --- /dev/null +++ b/alacritty/src/cli.rs @@ -0,0 +1,195 @@ +// Copyright 2019 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::path::PathBuf; + +use ::log; +use clap::{crate_authors, crate_description, crate_name, crate_version, App, Arg}; + +use alacritty_terminal::config::{Options, Delta, Dimensions, Shell}; +use alacritty_terminal::index::{Column, Line}; +use alacritty_terminal::window::DEFAULT_NAME; + +/// Build `Options` from command line arguments. +pub fn options() -> Options { + let mut options = Options::default(); + + let version_string = format!("{} ({})", + crate_version!(), + env!("GIT_HASH")); + + let matches = App::new(crate_name!()) + .version(version_string.as_str()) + .author(crate_authors!("\n")) + .about(crate_description!()) + .arg(Arg::with_name("ref-test").long("ref-test").help("Generates ref test")) + .arg( + Arg::with_name("live-config-reload") + .long("live-config-reload") + .help("Enable automatic config reloading"), + ) + .arg( + Arg::with_name("no-live-config-reload") + .long("no-live-config-reload") + .help("Disable automatic config reloading") + .conflicts_with("live-config-reload"), + ) + .arg( + Arg::with_name("print-events") + .long("print-events") + .help("Print all events to stdout"), + ) + .arg( + Arg::with_name("persistent-logging") + .long("persistent-logging") + .help("Keep the log file after quitting Alacritty"), + ) + .arg( + Arg::with_name("dimensions") + .long("dimensions") + .short("d") + .value_names(&["columns", "lines"]) + .help( + "Defines the window dimensions. Falls back to size specified by window \ + manager if set to 0x0 [default: 0x0]", + ), + ) + .arg( + Arg::with_name("position") + .long("position") + .allow_hyphen_values(true) + .value_names(&["x-pos", "y-pos"]) + .help( + "Defines the window position. Falls back to position specified by window \ + manager if unset [default: unset]", + ), + ) + .arg( + Arg::with_name("title") + .long("title") + .short("t") + .takes_value(true) + .help(&format!("Defines the window title [default: {}]", DEFAULT_NAME)), + ) + .arg( + Arg::with_name("class") + .long("class") + .takes_value(true) + .help(&format!("Defines window class on Linux [default: {}]", DEFAULT_NAME)), + ) + .arg( + Arg::with_name("q") + .short("q") + .multiple(true) + .conflicts_with("v") + .help("Reduces the level of verbosity (the min level is -qq)"), + ) + .arg( + Arg::with_name("v") + .short("v") + .multiple(true) + .conflicts_with("q") + .help("Increases the level of verbosity (the max level is -vvv)"), + ) + .arg( + Arg::with_name("working-directory") + .long("working-directory") + .takes_value(true) + .help("Start the shell in the specified working directory"), + ) + .arg(Arg::with_name("config-file").long("config-file").takes_value(true).help( + "Specify alternative configuration file [default: \ + $XDG_CONFIG_HOME/alacritty/alacritty.yml]", + )) + .arg( + Arg::with_name("command") + .long("command") + .short("e") + .multiple(true) + .takes_value(true) + .min_values(1) + .allow_hyphen_values(true) + .help("Command and args to execute (must be last argument)"), + ) + .get_matches(); + + if matches.is_present("ref-test") { + options.ref_test = true; + } + + if matches.is_present("print-events") { + options.print_events = true; + } + + if matches.is_present("live-config-reload") { + options.live_config_reload = Some(true); + } else if matches.is_present("no-live-config-reload") { + options.live_config_reload = Some(false); + } + + if matches.is_present("persistent-logging") { + options.persistent_logging = true; + } + + if let Some(mut dimensions) = matches.values_of("dimensions") { + let width = dimensions.next().map(|w| w.parse().map(Column)); + let height = dimensions.next().map(|h| h.parse().map(Line)); + if let (Some(Ok(width)), Some(Ok(height))) = (width, height) { + options.dimensions = Some(Dimensions::new(width, height)); + } + } + + if let Some(mut position) = matches.values_of("position") { + let x = position.next().map(str::parse); + let y = position.next().map(str::parse); + if let (Some(Ok(x)), Some(Ok(y))) = (x, y) { + options.position = Some(Delta { x, y }); + } + } + + options.class = matches.value_of("class").map(ToOwned::to_owned); + options.title = matches.value_of("title").map(ToOwned::to_owned); + + match matches.occurrences_of("q") { + 0 => {}, + 1 => options.log_level = log::LevelFilter::Error, + 2 | _ => options.log_level = log::LevelFilter::Off, + } + + match matches.occurrences_of("v") { + 0 if !options.print_events => {}, + 0 | 1 => options.log_level = log::LevelFilter::Info, + 2 => options.log_level = log::LevelFilter::Debug, + 3 | _ => options.log_level = log::LevelFilter::Trace, + } + + if let Some(dir) = matches.value_of("working-directory") { + options.working_dir = Some(PathBuf::from(dir.to_string())); + } + + if let Some(path) = matches.value_of("config-file") { + options.config = Some(PathBuf::from(path.to_string())); + } + + if let Some(mut args) = matches.values_of("command") { + // The following unwrap is guaranteed to succeed. + // If 'command' exists it must also have a first item since + // Arg::min_values(1) is set. + let command = String::from(args.next().unwrap()); + let args = args.map(String::from).collect(); + options.command = Some(Shell::new_with_args(command, args)); + } + + options +} diff --git a/alacritty/src/logging.rs b/alacritty/src/logging.rs index 9c2041f0..0b67440d 100644 --- a/alacritty/src/logging.rs +++ b/alacritty/src/logging.rs @@ -29,14 +29,14 @@ use crossbeam_channel::Sender; use log::{self, Level}; use time; -use alacritty_terminal::cli; +use alacritty_terminal::config::Options; use alacritty_terminal::message_bar::Message; use alacritty_terminal::term::color; const ALACRITTY_LOG_ENV: &str = "ALACRITTY_LOG"; pub fn initialize( - options: &cli::Options, + options: &Options, message_tx: Sender, ) -> Result, log::SetLoggerError> { // Use env_logger if RUST_LOG environment variable is defined. Otherwise, diff --git a/alacritty/src/main.rs b/alacritty/src/main.rs index be512bee..24f2d6c9 100644 --- a/alacritty/src/main.rs +++ b/alacritty/src/main.rs @@ -42,7 +42,7 @@ use std::env; use std::os::unix::io::AsRawFd; use alacritty_terminal::clipboard::Clipboard; -use alacritty_terminal::config::{self, Config, Monitor}; +use alacritty_terminal::config::{self, Config, Options, Monitor}; use alacritty_terminal::display::Display; use alacritty_terminal::event_loop::{self, EventLoop, Msg}; #[cfg(target_os = "macos")] @@ -53,8 +53,9 @@ use alacritty_terminal::sync::FairMutex; use alacritty_terminal::term::Term; use alacritty_terminal::tty; use alacritty_terminal::util::fmt::Red; -use alacritty_terminal::{cli, die, event}; +use alacritty_terminal::{die, event}; +mod cli; mod logging; fn main() { @@ -69,7 +70,7 @@ fn main() { } // Load command line options - let options = cli::Options::load(); + let options = cli::options(); // Setup storage for message UI let message_buffer = MessageBuffer::new(); @@ -121,7 +122,7 @@ fn main() { /// config change monitor, and runs the main display loop. fn run( mut config: Config, - options: &cli::Options, + options: &Options, message_buffer: MessageBuffer, ) -> Result<(), Box> { info!("Welcome to Alacritty"); diff --git a/alacritty_terminal/Cargo.toml b/alacritty_terminal/Cargo.toml index 18164fb9..f0382226 100644 --- a/alacritty_terminal/Cargo.toml +++ b/alacritty_terminal/Cargo.toml @@ -25,7 +25,6 @@ mio = "0.6" mio-extras = "2" xdg = "2" log = "0.4" -clap = "2" fnv = "1" unicode-width = "0.1" glutin = { version = "0.21.0", features = ["icon_loading"] } diff --git a/alacritty_terminal/src/cli.rs b/alacritty_terminal/src/cli.rs deleted file mode 100644 index 2cddbc82..00000000 --- a/alacritty_terminal/src/cli.rs +++ /dev/null @@ -1,243 +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 ::log; -use clap::{crate_authors, crate_description, crate_name, crate_version, App, Arg}; - -use crate::config::{Delta, Dimensions, Shell}; -use crate::index::{Column, Line}; -use crate::window::DEFAULT_NAME; -use std::borrow::Cow; -use std::path::{Path, PathBuf}; - -/// Options specified on the command line -pub struct Options { - pub live_config_reload: Option, - pub print_events: bool, - pub ref_test: bool, - pub dimensions: Option, - pub position: Option>, - pub title: Option, - pub class: Option, - pub log_level: log::LevelFilter, - pub command: Option>, - pub working_dir: Option, - pub config: Option, - pub persistent_logging: bool, -} - -impl Default for Options { - fn default() -> Options { - Options { - live_config_reload: None, - print_events: false, - ref_test: false, - dimensions: None, - position: None, - title: None, - class: None, - log_level: log::LevelFilter::Warn, - command: None, - working_dir: None, - config: None, - persistent_logging: false, - } - } -} - -impl Options { - /// Build `Options` from command line arguments - pub fn load() -> Options { - let mut options = Options::default(); - - let matches = App::new(crate_name!()) - .version(crate_version!()) - .author(crate_authors!("\n")) - .about(crate_description!()) - .arg(Arg::with_name("ref-test").long("ref-test").help("Generates ref test")) - .arg( - Arg::with_name("live-config-reload") - .long("live-config-reload") - .help("Enable automatic config reloading"), - ) - .arg( - Arg::with_name("no-live-config-reload") - .long("no-live-config-reload") - .help("Disable automatic config reloading") - .conflicts_with("live-config-reload"), - ) - .arg( - Arg::with_name("print-events") - .long("print-events") - .help("Print all events to stdout"), - ) - .arg( - Arg::with_name("persistent-logging") - .long("persistent-logging") - .help("Keep the log file after quitting Alacritty"), - ) - .arg( - Arg::with_name("dimensions") - .long("dimensions") - .short("d") - .value_names(&["columns", "lines"]) - .help( - "Defines the window dimensions. Falls back to size specified by window \ - manager if set to 0x0 [default: 0x0]", - ), - ) - .arg( - Arg::with_name("position") - .long("position") - .allow_hyphen_values(true) - .value_names(&["x-pos", "y-pos"]) - .help( - "Defines the window position. Falls back to position specified by window \ - manager if unset [default: unset]", - ), - ) - .arg( - Arg::with_name("title") - .long("title") - .short("t") - .takes_value(true) - .help(&format!("Defines the window title [default: {}]", DEFAULT_NAME)), - ) - .arg( - Arg::with_name("class") - .long("class") - .takes_value(true) - .help(&format!("Defines window class on Linux [default: {}]", DEFAULT_NAME)), - ) - .arg( - Arg::with_name("q") - .short("q") - .multiple(true) - .conflicts_with("v") - .help("Reduces the level of verbosity (the min level is -qq)"), - ) - .arg( - Arg::with_name("v") - .short("v") - .multiple(true) - .conflicts_with("q") - .help("Increases the level of verbosity (the max level is -vvv)"), - ) - .arg( - Arg::with_name("working-directory") - .long("working-directory") - .takes_value(true) - .help("Start the shell in the specified working directory"), - ) - .arg(Arg::with_name("config-file").long("config-file").takes_value(true).help( - "Specify alternative configuration file [default: \ - $XDG_CONFIG_HOME/alacritty/alacritty.yml]", - )) - .arg( - Arg::with_name("command") - .long("command") - .short("e") - .multiple(true) - .takes_value(true) - .min_values(1) - .allow_hyphen_values(true) - .help("Command and args to execute (must be last argument)"), - ) - .get_matches(); - - if matches.is_present("ref-test") { - options.ref_test = true; - } - - if matches.is_present("print-events") { - options.print_events = true; - } - - if matches.is_present("live-config-reload") { - options.live_config_reload = Some(true); - } else if matches.is_present("no-live-config-reload") { - options.live_config_reload = Some(false); - } - - if matches.is_present("persistent-logging") { - options.persistent_logging = true; - } - - if let Some(mut dimensions) = matches.values_of("dimensions") { - let width = dimensions.next().map(|w| w.parse().map(Column)); - let height = dimensions.next().map(|h| h.parse().map(Line)); - if let (Some(Ok(width)), Some(Ok(height))) = (width, height) { - options.dimensions = Some(Dimensions::new(width, height)); - } - } - - if let Some(mut position) = matches.values_of("position") { - let x = position.next().map(str::parse); - let y = position.next().map(str::parse); - if let (Some(Ok(x)), Some(Ok(y))) = (x, y) { - options.position = Some(Delta { x, y }); - } - } - - options.class = matches.value_of("class").map(ToOwned::to_owned); - options.title = matches.value_of("title").map(ToOwned::to_owned); - - match matches.occurrences_of("q") { - 0 => {}, - 1 => options.log_level = log::LevelFilter::Error, - 2 | _ => options.log_level = log::LevelFilter::Off, - } - - match matches.occurrences_of("v") { - 0 if !options.print_events => {}, - 0 | 1 => options.log_level = log::LevelFilter::Info, - 2 => options.log_level = log::LevelFilter::Debug, - 3 | _ => options.log_level = log::LevelFilter::Trace, - } - - if let Some(dir) = matches.value_of("working-directory") { - options.working_dir = Some(PathBuf::from(dir.to_string())); - } - - if let Some(path) = matches.value_of("config-file") { - options.config = Some(PathBuf::from(path.to_string())); - } - - if let Some(mut args) = matches.values_of("command") { - // The following unwrap is guaranteed to succeed. - // If 'command' exists it must also have a first item since - // Arg::min_values(1) is set. - let command = String::from(args.next().unwrap()); - let args = args.map(String::from).collect(); - options.command = Some(Shell::new_with_args(command, args)); - } - - options - } - - pub fn dimensions(&self) -> Option { - self.dimensions - } - - pub fn position(&self) -> Option> { - self.position - } - - pub fn command(&self) -> Option<&Shell<'_>> { - self.command.as_ref() - } - - pub fn config_path(&self) -> Option> { - self.config.as_ref().map(|p| Cow::Borrowed(p.as_path())) - } -} diff --git a/alacritty_terminal/src/config/mod.rs b/alacritty_terminal/src/config/mod.rs index 9502e3fd..6eebbdfc 100644 --- a/alacritty_terminal/src/config/mod.rs +++ b/alacritty_terminal/src/config/mod.rs @@ -22,11 +22,12 @@ use serde::{self, de, Deserialize}; use serde_yaml; use crate::ansi::CursorStyle; -use crate::cli::Options; use crate::index::{Column, Line}; use crate::input::{Action, Binding, KeyBinding, MouseBinding}; use crate::term::color::Rgb; +pub use self::options::Options; +mod options; mod bindings; pub const SOURCE_FILE_PATH: &str = file!(); @@ -2704,7 +2705,7 @@ impl Key { #[cfg(test)] mod tests { use super::{Config, DEFAULT_ALACRITTY_CONFIG}; - use crate::cli::Options; + use crate::config::Options; #[test] fn parse_config() { diff --git a/alacritty_terminal/src/config/options.rs b/alacritty_terminal/src/config/options.rs new file mode 100644 index 00000000..4b4f1be0 --- /dev/null +++ b/alacritty_terminal/src/config/options.rs @@ -0,0 +1,72 @@ +// Copyright 2019 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 ::log; + +use crate::config::{Delta, Dimensions, Shell}; +use std::borrow::Cow; +use std::path::{Path, PathBuf}; + +/// Options specified on the command line +pub struct Options { + pub live_config_reload: Option, + pub print_events: bool, + pub ref_test: bool, + pub dimensions: Option, + pub position: Option>, + pub title: Option, + pub class: Option, + pub log_level: log::LevelFilter, + pub command: Option>, + pub working_dir: Option, + pub config: Option, + pub persistent_logging: bool, +} + +impl Default for Options { + fn default() -> Options { + Options { + live_config_reload: None, + print_events: false, + ref_test: false, + dimensions: None, + position: None, + title: None, + class: None, + log_level: log::LevelFilter::Warn, + command: None, + working_dir: None, + config: None, + persistent_logging: false, + } + } +} + +impl Options { + pub fn dimensions(&self) -> Option { + self.dimensions + } + + pub fn position(&self) -> Option> { + self.position + } + + pub fn command(&self) -> Option<&Shell<'_>> { + self.command.as_ref() + } + + pub fn config_path(&self) -> Option> { + self.config.as_ref().map(|p| Cow::Borrowed(p.as_path())) + } +} diff --git a/alacritty_terminal/src/display.rs b/alacritty_terminal/src/display.rs index 4cb023af..9304398f 100644 --- a/alacritty_terminal/src/display.rs +++ b/alacritty_terminal/src/display.rs @@ -22,8 +22,7 @@ use glutin::dpi::{PhysicalPosition, PhysicalSize}; use glutin::EventsLoop; use parking_lot::MutexGuard; -use crate::cli; -use crate::config::{Config, StartupMode}; +use crate::config::{Config, Options, StartupMode}; use crate::index::Line; use crate::message_bar::Message; use crate::meter::Meter; @@ -135,7 +134,7 @@ impl Display { &self.size_info } - pub fn new(config: &Config, options: &cli::Options) -> Result { + pub fn new(config: &Config, options: &Options) -> Result { // Extract some properties from config let render_timer = config.render_timer(); @@ -241,7 +240,7 @@ impl Display { fn calculate_dimensions( config: &Config, - options: &cli::Options, + options: &Options, dpr: f64, cell_width: f32, cell_height: f32, diff --git a/alacritty_terminal/src/event.rs b/alacritty_terminal/src/event.rs index f27a6caa..31fa5954 100644 --- a/alacritty_terminal/src/event.rs +++ b/alacritty_terminal/src/event.rs @@ -13,9 +13,8 @@ use glutin::{self, ElementState, Event, ModifiersState, MouseButton}; use parking_lot::MutexGuard; use serde_json as json; -use crate::cli::Options; use crate::clipboard::ClipboardType; -use crate::config::{self, Config}; +use crate::config::{self, Config, Options}; use crate::display::OnResize; use crate::grid::Scroll; use crate::index::{Column, Line, Point, Side}; diff --git a/alacritty_terminal/src/lib.rs b/alacritty_terminal/src/lib.rs index 182d7811..0bada535 100644 --- a/alacritty_terminal/src/lib.rs +++ b/alacritty_terminal/src/lib.rs @@ -29,7 +29,6 @@ extern crate objc; #[macro_use] pub mod macros; pub mod ansi; -pub mod cli; pub mod clipboard; pub mod config; mod cursor; diff --git a/alacritty_terminal/src/tty/unix.rs b/alacritty_terminal/src/tty/unix.rs index 0e3dc2fd..668fe7bd 100644 --- a/alacritty_terminal/src/tty/unix.rs +++ b/alacritty_terminal/src/tty/unix.rs @@ -15,8 +15,7 @@ //! tty related functionality //! -use crate::cli::Options; -use crate::config::{Config, Shell}; +use crate::config::{Config, Options, Shell}; use crate::display::OnResize; use crate::term::SizeInfo; use crate::tty::{ChildEvent, EventedPty, EventedReadWrite}; diff --git a/alacritty_terminal/src/tty/windows/conpty.rs b/alacritty_terminal/src/tty/windows/conpty.rs index 1cadd511..0789dd96 100644 --- a/alacritty_terminal/src/tty/windows/conpty.rs +++ b/alacritty_terminal/src/tty/windows/conpty.rs @@ -37,8 +37,7 @@ use winapi::um::processthreadsapi::{ use winapi::um::winbase::{EXTENDED_STARTUPINFO_PRESENT, STARTF_USESTDHANDLES, STARTUPINFOEXW}; use winapi::um::wincontypes::{COORD, HPCON}; -use crate::cli::Options; -use crate::config::{Config, Shell}; +use crate::config::{Config, Options, Shell}; use crate::display::OnResize; use crate::term::SizeInfo; diff --git a/alacritty_terminal/src/tty/windows/mod.rs b/alacritty_terminal/src/tty/windows/mod.rs index f5532d8e..a3d3faec 100644 --- a/alacritty_terminal/src/tty/windows/mod.rs +++ b/alacritty_terminal/src/tty/windows/mod.rs @@ -24,8 +24,7 @@ use winapi::shared::winerror::WAIT_TIMEOUT; use winapi::um::synchapi::WaitForSingleObject; use winapi::um::winbase::WAIT_OBJECT_0; -use crate::cli::Options; -use crate::config::Config; +use crate::config::{Config, Options}; use crate::display::OnResize; use crate::term::SizeInfo; use crate::tty::{EventedPty, EventedReadWrite}; diff --git a/alacritty_terminal/src/tty/windows/winpty.rs b/alacritty_terminal/src/tty/windows/winpty.rs index 10bd9d01..7aa976ee 100644 --- a/alacritty_terminal/src/tty/windows/winpty.rs +++ b/alacritty_terminal/src/tty/windows/winpty.rs @@ -27,8 +27,7 @@ use winapi::um::winbase::FILE_FLAG_OVERLAPPED; use winpty::Config as WinptyConfig; use winpty::{ConfigFlags, MouseMode, SpawnConfig, SpawnFlags, Winpty}; -use crate::cli::Options; -use crate::config::{Config, Shell}; +use crate::config::{Config, Options, Shell}; use crate::display::OnResize; use crate::term::SizeInfo; diff --git a/alacritty_terminal/src/window.rs b/alacritty_terminal/src/window.rs index 5c1457e5..e269a7b6 100644 --- a/alacritty_terminal/src/window.rs +++ b/alacritty_terminal/src/window.rs @@ -30,8 +30,7 @@ use glutin::{ #[cfg(not(target_os = "macos"))] use image::ImageFormat; -use crate::cli::Options; -use crate::config::{Decorations, StartupMode, WindowConfig}; +use crate::config::{Options, Decorations, StartupMode, WindowConfig}; // It's required to be in this directory due to the `windows.rc` file #[cfg(not(target_os = "macos"))]