Make windows config location more sensible

This commit is contained in:
Zac Pullar-Strecker 2018-12-28 03:16:31 +13:00 committed by Christian Duerr
parent f0180430df
commit 6d7647c890
5 changed files with 40 additions and 13 deletions

View File

@ -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

View File

@ -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"

View File

@ -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.)

View File

@ -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())
}

View File

@ -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]