summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Lilienthal <nathan@nixpulvis.com>2019-05-03 19:48:25 -0400
committerGitHub <noreply@github.com>2019-05-03 19:48:25 -0400
commit34c54e7e0eb7c28406df112d118b82280be2adee (patch)
tree7b32e11bed7906d67d43da81bd8e8b08f128660d
parentba6e208a95e37116b031aca02246d3cff04c0216 (diff)
downloadalacritty-34c54e7e0eb7c28406df112d118b82280be2adee.tar.gz
alacritty-34c54e7e0eb7c28406df112d118b82280be2adee.zip
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.
-rw-r--r--CHANGELOG.md1
-rw-r--r--Cargo.lock9
-rw-r--r--alacritty/Cargo.toml4
-rw-r--r--alacritty/build.rs19
-rw-r--r--alacritty/src/cli.rs195
-rw-r--r--alacritty/src/logging.rs4
-rw-r--r--alacritty/src/main.rs9
-rw-r--r--alacritty_terminal/Cargo.toml1
-rw-r--r--alacritty_terminal/src/cli.rs243
-rw-r--r--alacritty_terminal/src/config/mod.rs5
-rw-r--r--alacritty_terminal/src/config/options.rs72
-rw-r--r--alacritty_terminal/src/display.rs7
-rw-r--r--alacritty_terminal/src/event.rs3
-rw-r--r--alacritty_terminal/src/lib.rs1
-rw-r--r--alacritty_terminal/src/tty/unix.rs3
-rw-r--r--alacritty_terminal/src/tty/windows/conpty.rs3
-rw-r--r--alacritty_terminal/src/tty/windows/mod.rs3
-rw-r--r--alacritty_terminal/src/tty/windows/winpty.rs3
-rw-r--r--alacritty_terminal/src/window.rs3
19 files changed, 318 insertions, 270 deletions
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)",
@@ -1955,6 +1956,11 @@ 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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -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<Message>,
) -> Result<Option<PathBuf>, 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<dyn Error>> {
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<bool>,
- pub print_events: bool,
- pub ref_test: bool,
- pub dimensions: Option<Dimensions>,
- pub position: Option<Delta<i32>>,
- pub title: Option<String>,
- pub class: Option<String>,
- pub log_level: log::LevelFilter,
- pub command: Option<Shell<'static>>,
- pub working_dir: Option<PathBuf>,
- pub config: Option<PathBuf>,
- 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<Dimensions> {
- self.dimensions
- }
-
- pub fn position(&self) -> Option<Delta<i32>> {
- self.position
- }
-
- pub fn command(&self) -> Option<&Shell<'_>> {
- self.command.as_ref()
- }
-
- pub fn config_path(&self) -> Option<Cow<'_, Path>> {
- 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<bool>,
+ pub print_events: bool,
+ pub ref_test: bool,
+ pub dimensions: Option<Dimensions>,
+ pub position: Option<Delta<i32>>,
+ pub title: Option<String>,
+ pub class: Option<String>,
+ pub log_level: log::LevelFilter,
+ pub command: Option<Shell<'static>>,
+ pub working_dir: Option<PathBuf>,
+ pub config: Option<PathBuf>,
+ 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<Dimensions> {
+ self.dimensions
+ }
+
+ pub fn position(&self) -> Option<Delta<i32>> {
+ self.position
+ }
+
+ pub fn command(&self) -> Option<&Shell<'_>> {
+ self.command.as_ref()
+ }
+
+ pub fn config_path(&self) -> Option<Cow<'_, Path>> {
+ 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<Display, Error> {
+ pub fn new(config: &Config, options: &Options) -> Result<Display, Error> {
// 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"))]