From 77da05040b56446d9d95dd074689d12bcb51e566 Mon Sep 17 00:00:00 2001 From: slotThe <50166980+slotThe@users.noreply.github.com> Date: Wed, 18 Mar 2020 15:46:49 +0000 Subject: [PATCH] Look for Emacs directory in $XDG_CONFIG_HOME (#370) --- src/steps/emacs.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/steps/emacs.rs b/src/steps/emacs.rs index 14c43e61..6757b4f9 100644 --- a/src/steps/emacs.rs +++ b/src/steps/emacs.rs @@ -3,7 +3,7 @@ use crate::terminal::print_separator; use crate::utils::{require, require_option, PathExt}; use anyhow::Result; use directories::BaseDirs; -#[cfg(windows)] +#[cfg(any(windows, target_os = "macos"))] use std::env; use std::path::{Path, PathBuf}; @@ -21,7 +21,22 @@ pub struct Emacs { impl Emacs { fn directory_path(base_dirs: &BaseDirs) -> Option { #[cfg(unix)] - return base_dirs.home_dir().join(".emacs.d").if_exists(); + cfg_if::cfg_if! { + if #[cfg(target_os = "macos")] { + let emacs_xdg_dir = env::var("XDG_CONFIG_HOME") + .ok() + .and_then(|config| PathBuf::from(config).join("emacs").if_exists()) + .or_else(|| base_dirs.home_dir().join(".config/emacs").if_exists()); + } else { + let emacs_xdg_dir = base_dirs.config_dir().join("emacs").if_exists(); + } + } + #[cfg(unix)] + return base_dirs + .home_dir() + .join(".emacs.d") + .if_exists() + .or_else(|| emacs_xdg_dir); #[cfg(windows)] return env::var("HOME")