mirror of
https://github.com/alacritty/alacritty.git
synced 2024-11-25 14:05:41 -05:00
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.
This commit is contained in:
parent
ba6e208a95
commit
34c54e7e0e
19 changed files with 318 additions and 270 deletions
|
@ -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
|
||||
|
||||
|
|
9
Cargo.lock
generated
9
Cargo.lock
generated
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
19
alacritty/build.rs
Normal file
19
alacritty/build.rs
Normal file
|
@ -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);
|
||||
}
|
195
alacritty/src/cli.rs
Normal file
195
alacritty/src/cli.rs
Normal file
|
@ -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
|
||||
}
|
|
@ -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,
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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"] }
|
||||
|
|
|
@ -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()))
|
||||
}
|
||||
}
|
|
@ -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() {
|
||||
|
|
72
alacritty_terminal/src/config/options.rs
Normal file
72
alacritty_terminal/src/config/options.rs
Normal file
|
@ -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()))
|
||||
}
|
||||
}
|
|
@ -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,
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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"))]
|
||||
|
|
Loading…
Reference in a new issue