diff --git a/prism/src/prism/PrismSettings.java b/prism/src/prism/PrismSettings.java index 5da69c04..62353797 100644 --- a/prism/src/prism/PrismSettings.java +++ b/prism/src/prism/PrismSettings.java @@ -630,7 +630,43 @@ public class PrismSettings implements Observer public File getLocationForSettingsFile() { - return new File(System.getProperty("user.home")+File.separator+".prism"); + File legacyConfigFile = new File(System.getProperty("user.home") + + File.separator + ".prism"); + if (legacyConfigFile.exists() && !legacyConfigFile.isDirectory()) + { + return legacyConfigFile; + } + + // Check for operating system, try XDG base directory specification if + // UNIX-like system (except for MacOS) is found + String os = System.getProperty("os.name").toLowerCase(); + File config; + if (os.indexOf("win") >= 0) { // Windows + // use "$HOME\.prism" + config = new File(System.getProperty("user.home") + + File.separator + ".prism"); + } else if (os.indexOf("mac") >= 0) { // MacOS + // use "$HOME/Library/Preferences/prism/prism.settings" + config = new File(System.getProperty("user.home") + + "/Library/Preferences/prism.settings"); + } else if (os.indexOf("nix") >= 0 || os.indexOf("nux") >= 0 || + os.indexOf("aix") >= 0 || os.indexOf("sunos") >= 0 || + os.indexOf("bsd") >= 0) { // Linux, AIX, Solaris, *BSD + // check for $XDG_CONFIG_HOME + String configBase = System.getenv("XDG_CONFIG_HOME"); + if (configBase == null) { + configBase = System.getProperty("user.home") + "/.config"; + } + if (configBase.endsWith("/")) { + configBase = configBase.substring(0, configBase.length() - 1); + } + config = new File(configBase + "/prism.settings"); + } else { // unknown operating system + // use "$HOME\.prism" + config = new File(System.getProperty("user.home") + + File.separator + ".prism"); + } + return config; } public synchronized void saveSettingsFile() throws PrismException