summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClementTsang <cjhtsang@uwaterloo.ca>2020-02-20 23:10:52 -0500
committerClementTsang <cjhtsang@uwaterloo.ca>2020-02-20 23:10:52 -0500
commit0697d9dd565f1887ee3922ac0b3bc6b61ff8a3bb (patch)
tree6ce2f5339e77c12d4744b12b20520428f6dba19e
parente7352ddef12a64fb9d7a09c7b37ca6608dcc57d9 (diff)
Fix issue with default file paths not being respected; updated default file paths.
-rw-r--r--.travis.yml12
-rw-r--r--Cargo.toml1
-rw-r--r--README.md3
-rw-r--r--docs/config.md4
-rw-r--r--src/constants.rs4
-rw-r--r--src/main.rs28
-rw-r--r--tests/arg_rate_tests.rs10
7 files changed, 41 insertions, 21 deletions
diff --git a/.travis.yml b/.travis.yml
index b6d1e0e9..77905ea4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -51,18 +51,18 @@ before_deploy:
cargo build --release --target $TARGET;
cp ./target/x86_64-pc-windows-msvc/release/btm btm;
strip btm;
- cp default_config.toml btm.toml;
- tar -czvf bottom_x86_64-pc-windows-msvc.tar.gz btm btm.toml;
+ cp default_config.toml bottom.toml;
+ tar -czvf bottom_x86_64-pc-windows-msvc.tar.gz btm bottom.toml;
else
cargo build --release;
cp ./target/release/btm btm;
strip btm;
- cp default_config.toml btm.toml;
+ cp default_config.toml bottom.toml;
if [[ $TRAVIS_OS_NAME == "linux" ]]; then
- tar -czvf bottom_x86_64-unknown-linux-gnu.tar.gz btm btm.toml;
- tar -czvf bottom_source_code.tar.gz ./src ./Cargo.toml LICENSE tests sample_config.toml btm.toml;
+ tar -czvf bottom_x86_64-unknown-linux-gnu.tar.gz btm bottom.toml;
+ tar -czvf bottom_source_code.tar.gz ./src ./Cargo.toml LICENSE tests sample_config.toml bottom.toml;
elif [[ $TRAVIS_OS_NAME == "osx" ]]; then
- tar -czvf bottom_x86_64-apple-darwin.tar.gz btm btm.toml;
+ tar -czvf bottom_x86_64-apple-darwin.tar.gz btm bottom.toml;
fi
fi
diff --git a/Cargo.toml b/Cargo.toml
index 86b83fe6..f4b48b59 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -23,6 +23,7 @@ lto = true
[dependencies]
chrono = "0.4.10"
clap = "2.33.0"
+dirs = "2.0.2"
fern = "0.5.9"
futures-timer = "3.0.2"
futures = "0.3.4"
diff --git a/README.md b/README.md
index b3a0ca78..ae5f9bb4 100644
--- a/README.md
+++ b/README.md
@@ -107,7 +107,7 @@ Run using `btm`.
- `-s`, `--show_disabled_data` will show data entries in the graph legends even if the lines for that entry are disabled.
-- `-C`, `--config` takes in a file path leading to a TOML file.
+- `-C`, `--config` takes in a file path leading to a TOML file. By default it checks `~/.config/btm/btm.toml` or `./btm.toml` for Unix and Windows respectively.
### Keybindings
@@ -191,6 +191,7 @@ Note that `q` is disabled while in the search widget.
- [chrono](https://github.com/chronotope/chrono)
- [clap](https://github.com/clap-rs/clap)
- [crossterm](https://github.com/TimonPost/crossterm)
+ - [dirs](https://github.com/soc/dirs-rs)
- [fern](https://github.com/daboross/fern)
- [futures-rs](https://github.com/rust-lang-nursery/futures-rs)
- [futures-timer](https://github.com/rustasync/futures-timer)
diff --git a/docs/config.md b/docs/config.md
index 0fd601af..0f4f036c 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -34,5 +34,5 @@ Note some colours may not be compatible with the terminal you are using. For exa
bottom will check specific locations by default for a config file.
-- For Unix-based systems: `~/.config/btm/btm.toml`.
-- For Windows: `./btm.toml`.
+- For Unix-based systems: `$HOME/.config/bottom/bottom.toml`.
+- For Windows: `{FOLDERID_RoamingAppData}\bottom\bottom.toml` (for example, `C:\Users\Clement\AppData\Roaming\bottom\bottom.toml`).
diff --git a/src/constants.rs b/src/constants.rs
index 763b5189..365c6922 100644
--- a/src/constants.rs
+++ b/src/constants.rs
@@ -6,8 +6,8 @@ pub const MAX_KEY_TIMEOUT_IN_MILLISECONDS: u128 = 1000;
pub const NUM_COLOURS: i32 = 256;
// Config and flags
-pub const DEFAULT_UNIX_CONFIG_FILE_PATH: &str = "~/.config/btm/btm.toml";
-pub const DEFAULT_WINDOWS_CONFIG_FILE_PATH: &str = "./btm.toml";
+pub const DEFAULT_UNIX_CONFIG_FILE_PATH: &str = ".config/bottom/bottom.toml";
+pub const DEFAULT_WINDOWS_CONFIG_FILE_PATH: &str = "bottom/bottom.toml";
// Help text
pub const GENERAL_HELP_TEXT: [&str; 15] = [
diff --git a/src/main.rs b/src/main.rs
index c9aa9727..e7ebfdc0 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -213,7 +213,6 @@ fn main() -> error::Result<()> {
let mut first_run = true;
loop {
- // TODO: [OPT] this should not block...
if let Ok(recv) = rx.recv_timeout(Duration::from_millis(TICK_RATE_IN_MILLISECONDS)) {
match recv {
Event::KeyInput(event) => {
@@ -408,15 +407,28 @@ fn create_logger() -> error::Result<()> {
}
fn create_config(flag_config_location: Option<&str>) -> error::Result<Config> {
- let config_path = std::path::Path::new(flag_config_location.unwrap_or(
- if cfg!(target_os = "windows") {
- DEFAULT_WINDOWS_CONFIG_FILE_PATH
+ use std::ffi::OsString;
+ let config_path = if let Some(conf_loc) = flag_config_location {
+ OsString::from(conf_loc)
+ } else if cfg!(target_os = "windows") {
+ if let Some(home_path) = dirs::config_dir() {
+ let mut path = home_path;
+ path.push(DEFAULT_WINDOWS_CONFIG_FILE_PATH);
+ path.into_os_string()
} else {
- DEFAULT_UNIX_CONFIG_FILE_PATH
- },
- ));
+ OsString::new()
+ }
+ } else if let Some(home_path) = dirs::home_dir() {
+ let mut path = home_path;
+ path.push(DEFAULT_UNIX_CONFIG_FILE_PATH);
+ path.into_os_string()
+ } else {
+ OsString::new()
+ };
+
+ let path = std::path::Path::new(&config_path);
- if let Ok(config_str) = std::fs::read_to_string(config_path) {
+ if let Ok(config_str) = std::fs::read_to_string(path) {
Ok(toml::from_str(config_str.as_str())?)
} else {
Ok(Config::default())
diff --git a/tests/arg_rate_tests.rs b/tests/arg_rate_tests.rs
index a32e1b76..206dbf50 100644
--- a/tests/arg_rate_tests.rs
+++ b/tests/arg_rate_tests.rs
@@ -4,6 +4,8 @@ use std::process::Command;
// These tests are mostly here just to ensure that invalid results will be caught when passing arguments...
+// TODO: [TEST] Allow for release testing.
+
//======================RATES======================//
fn get_os_binary_loc() -> String {
@@ -36,7 +38,9 @@ fn test_large_rate() -> Result<(), Box<dyn std::error::Error>> {
.arg("18446744073709551616")
.assert()
.failure()
- .stderr(predicate::str::contains("rate to be less than unsigned INT_MAX."));
+ .stderr(predicate::str::contains(
+ "rate to be less than unsigned INT_MAX.",
+ ));
Ok(())
}
@@ -48,7 +52,9 @@ fn test_negative_rate() -> Result<(), Box<dyn std::error::Error>> {
.arg("-1000")
.assert()
.failure()
- .stderr(predicate::str::contains("wasn't expected, or isn't valid in this context"));
+ .stderr(predicate::str::contains(
+ "wasn't expected, or isn't valid in this context",
+ ));
Ok(())
}