alacritty

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 6d7647c8907978892d635bb79d8ba39629f8e194
parent f0180430dfea33d806ab530e789d2edb1488af6b
Author: Zac Pullar-Strecker <zacps@users.noreply.github.com>
Date:   Fri, 28 Dec 2018 03:16:31 +1300

Make windows config location more sensible



Diffstat:
MCHANGELOG.md | 5+++++
MCargo.toml | 1+
MREADME.md | 2+-
Msrc/config.rs | 43+++++++++++++++++++++++++++++++------------
Msrc/lib.rs | 2++
5 files changed, 40 insertions(+), 13 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md @@ -11,6 +11,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New configuration field `visual_bell.color` allows changing the visual bell color - Crashes on Windows are now also reported with a popup in addition to stderr +### Changed + +- Windows configuration location has been moved from %USERPROFILE\alacritty.yml + to %APPDATA%\Roaming\alacritty\alacritty.yml + ### Fixed - Fix color issue in ncurses programs by updating terminfo pairs from 0x10000 to 0x7FFF diff --git a/Cargo.toml b/Cargo.toml @@ -60,6 +60,7 @@ winpty = { path = "./winpty" } mio-named-pipes = "0.1" winapi = { version = "0.3.5", features = ["winuser", "synchapi", "roerrorapi", "winerror"]} dunce = "0.1" +dirs = "1.0" [target.'cfg(target_os = "macos")'.dependencies] objc = "0.2.2" diff --git a/README.md b/README.md @@ -126,7 +126,7 @@ file, please consult the comments in the default config file. On Windows the config file is located at: -`%UserProfile%\alacritty.yml` +`%APPDATA%\Roaming\alacritty\alacritty.yml` ## Issues (known, unknown, feature requests, etc.) diff --git a/src/config.rs b/src/config.rs @@ -1521,33 +1521,52 @@ impl Config { .map(|path| path.into()) } + // TODO: Remove old configuration location warning (Deprecated 03/12/2018) #[cfg(windows)] pub fn installed_config<'a>() -> Option<Cow<'a, Path>> { - if let Some(mut path) = ::std::env::home_dir() { - path.push("alacritty"); - path.set_extension("yml"); - if path.exists() { - return Some(path.into()); - } + let old = dirs::home_dir() + .map(|path| path.join("alacritty.yml")); + let new = dirs::config_dir() + .map(|path| path.join("alacritty\\alacritty.yml")); + + if let Some(old_path) = old.as_ref().filter(|old| old.exists()) { + warn!( + "Found configuration at: '{}'. The file should be moved to the new location: '{}'.", + old_path.to_string_lossy(), + new.as_ref().map(|new| new.to_string_lossy()).unwrap(), + ); + + old.map(Cow::from) + } else { + new.filter(|new| new.exists()).map(Cow::from) } - None } #[cfg(not(windows))] pub fn write_defaults() -> io::Result<Cow<'static, Path>> { - let path = ::xdg::BaseDirectories::with_prefix("alacritty") - .map_err(|err| io::Error::new(io::ErrorKind::NotFound, ::std::error::Error::description(&err))) + let path = xdg::BaseDirectories::with_prefix("alacritty") + .map_err(|err| io::Error::new(io::ErrorKind::NotFound, err.to_string().as_str())) .and_then(|p| p.place_config_file("alacritty.yml"))?; + File::create(&path)?.write_all(DEFAULT_ALACRITTY_CONFIG.as_bytes())?; + Ok(path.into()) } #[cfg(windows)] pub fn write_defaults() -> io::Result<Cow<'static, Path>> { - let path = ::std::env::home_dir() - .ok_or_else(|| io::Error::new(io::ErrorKind::NotFound, "could not find profile directory")) - .and_then(|mut p| {p.push("alacritty"); p.set_extension("yml"); Ok(p)})?; + let mut path = dirs::config_dir() + .ok_or_else(|| { + io::Error::new(io::ErrorKind::NotFound, "could not find profile directory") + } + )?; + + path = path.join("alacritty/alacritty.yml"); + + fs::create_dir_all(path.parent().unwrap())?; + File::create(&path)?.write_all(DEFAULT_ALACRITTY_CONFIG.as_bytes())?; + Ok(path.into()) } diff --git a/src/lib.rs b/src/lib.rs @@ -30,6 +30,8 @@ extern crate winpty; extern crate dunce; #[cfg(windows)] extern crate image; +#[cfg(windows)] +extern crate dirs; #[cfg(target_os = "macos")] #[macro_use]