use XDG paths
'pref-dir = ${XDG_CONFIG_HOME:-~/.config}/racket/ 'pref-file = (build-path (find-system-path 'pref-dir) "racket-prefs.rktd") 'addon-dir = ${XDG_DATA_HOME:-~/.local/share}/racket/ 'init-dir = ${XDG_CONFIG_HOME:-~/.config}/racket/ 'init-file = (build-path (find-system-path 'init-dir) "racketrc.rktl") 'cache-dir = ${XDG_CACHE_HOME:-~/.cache}/racket/ ... except actually the "~" uses PLTUSERHOME if set. Use cache-dir as default "download-cache" parent dir. related to #2740
This commit is contained in:
parent
979fbf551d
commit
f52bff8a31
|
@ -161,8 +161,8 @@ directory}:
|
||||||
@item{@indexed-racket['download-cache-dir] --- a path string used as
|
@item{@indexed-racket['download-cache-dir] --- a path string used as
|
||||||
the location for storing downloaded package archives. When not
|
the location for storing downloaded package archives. When not
|
||||||
specified, packages are cached in a @filepath{download-cache}
|
specified, packages are cached in a @filepath{download-cache}
|
||||||
directory in the user's add-on directory as reported by
|
directory in the user's cache directory as reported by
|
||||||
@racket[(find-system-path 'addon-dir)].}
|
@racket[(find-system-path 'cache-dir)].}
|
||||||
|
|
||||||
@item{@indexed-racket['download-cache-max-files] and
|
@item{@indexed-racket['download-cache-max-files] and
|
||||||
@indexed-racket['download-cache-max-bytes] --- real numbers that
|
@indexed-racket['download-cache-max-bytes] --- real numbers that
|
||||||
|
|
|
@ -52,8 +52,11 @@ by @racket[kind], which must be one of the following:
|
||||||
the current executable is used as the home directory.}
|
the current executable is used as the home directory.}
|
||||||
|
|
||||||
@item{@indexed-racket['pref-dir] --- the standard directory for
|
@item{@indexed-racket['pref-dir] --- the standard directory for
|
||||||
storing the current user's preferences. On Unix, the directory is
|
storing the current user's preferences. On Unix, the directory is the
|
||||||
@filepath{.racket} in the @tech{user's home directory}. On Windows,
|
@filepath{racket} subdirectory of the path specified by
|
||||||
|
@indexed-envvar{XDG_CONFIG_HOME}, or @filepath{.config/racket} in the
|
||||||
|
@tech{user's home directory} if @envvar{XDG_CONFIG_HOME} is not set to
|
||||||
|
an absolute path. On Windows,
|
||||||
it is @filepath{Racket} in the @tech{user's home directory} if
|
it is @filepath{Racket} in the @tech{user's home directory} if
|
||||||
determined by @envvar{PLTUSERHOME}, otherwise in the user's
|
determined by @envvar{PLTUSERHOME}, otherwise in the user's
|
||||||
application-data folder as specified by the Windows registry; the
|
application-data folder as specified by the Windows registry; the
|
||||||
|
@ -79,8 +82,9 @@ by @racket[kind], which must be one of the following:
|
||||||
if it is defined, otherwise it is the current directory.}
|
if it is defined, otherwise it is the current directory.}
|
||||||
|
|
||||||
@item{@indexed-racket['init-dir] --- the directory containing the
|
@item{@indexed-racket['init-dir] --- the directory containing the
|
||||||
initialization file used by the Racket executable.
|
initialization file used by the Racket executable. On Unix, it is
|
||||||
It is the same as the @tech{user's home directory}.}
|
the same as the result returned for @racket['pref-dir]; on Mac OS and
|
||||||
|
Windows, it is the same as the @tech{user's home directory}.}
|
||||||
|
|
||||||
@item{@indexed-racket['init-file] --- the file loaded at start-up by
|
@item{@indexed-racket['init-file] --- the file loaded at start-up by
|
||||||
the Racket executable. The directory part of the
|
the Racket executable. The directory part of the
|
||||||
|
@ -89,9 +93,9 @@ by @racket[kind], which must be one of the following:
|
||||||
|
|
||||||
@itemize[
|
@itemize[
|
||||||
|
|
||||||
@item{@|AllUnix|: @indexed-file{.racketrc}}
|
@item{Unix and Windows: @indexed-file{racketrc.rktl}}
|
||||||
|
|
||||||
@item{Windows: @indexed-file{racketrc.rktl}}
|
@item{Mac OS: @indexed-file{.racketrc}}
|
||||||
|
|
||||||
]}
|
]}
|
||||||
|
|
||||||
|
@ -121,8 +125,19 @@ by @racket[kind], which must be one of the following:
|
||||||
environment variable or flag is specified, or if the value is not a
|
environment variable or flag is specified, or if the value is not a
|
||||||
legal path name, then this directory defaults to
|
legal path name, then this directory defaults to
|
||||||
@filepath{Library/Racket} in the @tech{user's home directory} on Mac
|
@filepath{Library/Racket} in the @tech{user's home directory} on Mac
|
||||||
OS and @racket['pref-dir] otherwise. The directory might not
|
OS and @racket['pref-dir] on Windows. On Unix, it is the
|
||||||
exist.}
|
@filepath{racket} subdirectory of the path specified by
|
||||||
|
@indexed-envvar{XDG_DATA_HOME}, or @filepath{.local/share/racket} in
|
||||||
|
the @tech{user's home directory} if @envvar{XDG_CONFIG_HOME} is not
|
||||||
|
set to an absolute path. The directory might not exist.}
|
||||||
|
|
||||||
|
@item{@indexed-racket['cache-dir] --- a directory for storing
|
||||||
|
user-specific caches. On Unix, it is the @filepath{racket}
|
||||||
|
subdirectory of the path specified by @indexed-envvar{XDG_CACHE_HOME},
|
||||||
|
or @filepath{.cache/racket} in the @tech{user's home directory} if
|
||||||
|
@envvar{XDG_CACHE_HOME} is not set to an absolute path. On Mac OS and
|
||||||
|
Windows, it is the same as the result returned for @racket['addon-dir].
|
||||||
|
The directory might not exists.}
|
||||||
|
|
||||||
@item{@indexed-racket['doc-dir] --- the standard directory for
|
@item{@indexed-racket['doc-dir] --- the standard directory for
|
||||||
storing the current user's documents. On Unix, it's
|
storing the current user's documents. On Unix, it's
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
"https://planet-compats.racket-lang.org")]
|
"https://planet-compats.racket-lang.org")]
|
||||||
['default-scope "user"]
|
['default-scope "user"]
|
||||||
['installation-name (version)]
|
['installation-name (version)]
|
||||||
['download-cache-dir (build-path (find-system-path 'addon-dir)
|
['download-cache-dir (build-path (find-system-path 'cache-dir)
|
||||||
"download-cache")]
|
"download-cache")]
|
||||||
['download-cache-max-files 1024]
|
['download-cache-max-files 1024]
|
||||||
['download-cache-max-bytes (* 64 1024 1024)]
|
['download-cache-max-bytes (* 64 1024 1024)]
|
||||||
|
|
|
@ -123,7 +123,7 @@ READ_ONLY static Scheme_Object *doc_dir_symbol, *desk_dir_symbol;
|
||||||
READ_ONLY static Scheme_Object *init_dir_symbol, *init_file_symbol, *sys_dir_symbol;
|
READ_ONLY static Scheme_Object *init_dir_symbol, *init_file_symbol, *sys_dir_symbol;
|
||||||
READ_ONLY static Scheme_Object *exec_file_symbol, *run_file_symbol, *collects_dir_symbol;
|
READ_ONLY static Scheme_Object *exec_file_symbol, *run_file_symbol, *collects_dir_symbol;
|
||||||
READ_ONLY static Scheme_Object *pref_file_symbol, *orig_dir_symbol, *addon_dir_symbol;
|
READ_ONLY static Scheme_Object *pref_file_symbol, *orig_dir_symbol, *addon_dir_symbol;
|
||||||
READ_ONLY static Scheme_Object *config_dir_symbol;
|
READ_ONLY static Scheme_Object *config_dir_symbol, *cache_dir_symbol;
|
||||||
READ_ONLY static Scheme_Object *host_collects_dir_symbol, *host_config_dir_symbol;
|
READ_ONLY static Scheme_Object *host_collects_dir_symbol, *host_config_dir_symbol;
|
||||||
|
|
||||||
SHARED_OK static Scheme_Object *exec_cmd;
|
SHARED_OK static Scheme_Object *exec_cmd;
|
||||||
|
@ -165,6 +165,7 @@ void scheme_init_file(Scheme_Startup_Env *env)
|
||||||
REGISTER_SO(host_config_dir_symbol);
|
REGISTER_SO(host_config_dir_symbol);
|
||||||
REGISTER_SO(orig_dir_symbol);
|
REGISTER_SO(orig_dir_symbol);
|
||||||
REGISTER_SO(addon_dir_symbol);
|
REGISTER_SO(addon_dir_symbol);
|
||||||
|
REGISTER_SO(cache_dir_symbol);
|
||||||
|
|
||||||
REGISTER_SO(windows_symbol);
|
REGISTER_SO(windows_symbol);
|
||||||
REGISTER_SO(unix_symbol);
|
REGISTER_SO(unix_symbol);
|
||||||
|
@ -199,6 +200,7 @@ void scheme_init_file(Scheme_Startup_Env *env)
|
||||||
host_config_dir_symbol = scheme_intern_symbol("host-config-dir");
|
host_config_dir_symbol = scheme_intern_symbol("host-config-dir");
|
||||||
orig_dir_symbol = scheme_intern_symbol("orig-dir");
|
orig_dir_symbol = scheme_intern_symbol("orig-dir");
|
||||||
addon_dir_symbol = scheme_intern_symbol("addon-dir");
|
addon_dir_symbol = scheme_intern_symbol("addon-dir");
|
||||||
|
cache_dir_symbol = scheme_intern_symbol("cache-dir");
|
||||||
|
|
||||||
windows_symbol = scheme_intern_symbol("windows");
|
windows_symbol = scheme_intern_symbol("windows");
|
||||||
unix_symbol = scheme_intern_symbol("unix");
|
unix_symbol = scheme_intern_symbol("unix");
|
||||||
|
@ -5022,10 +5024,12 @@ find_system_path(int argc, Scheme_Object **argv)
|
||||||
} else if (argv[0] == addon_dir_symbol) {
|
} else if (argv[0] == addon_dir_symbol) {
|
||||||
if (addon_dir) return addon_dir;
|
if (addon_dir) return addon_dir;
|
||||||
which = RKTIO_PATH_ADDON_DIR;
|
which = RKTIO_PATH_ADDON_DIR;
|
||||||
|
} else if (argv[0] == cache_dir_symbol) {
|
||||||
|
which = RKTIO_PATH_CACHE_DIR;
|
||||||
} else {
|
} else {
|
||||||
scheme_wrong_contract("find-system-path",
|
scheme_wrong_contract("find-system-path",
|
||||||
"(or/c 'home-dir 'pref-dir 'pref-file 'temp-dir\n"
|
"(or/c 'home-dir 'pref-dir 'pref-file 'temp-dir\n"
|
||||||
" 'init-dir 'init-file 'addon-dir\n"
|
" 'init-dir 'init-file 'addon-dir 'cache-dir\n"
|
||||||
" 'doc-dir 'desk-dir 'sys-dir 'exec-file 'run-file\n"
|
" 'doc-dir 'desk-dir 'sys-dir 'exec-file 'run-file\n"
|
||||||
" 'collects-dir 'config-dir 'orig-dir\n"
|
" 'collects-dir 'config-dir 'orig-dir\n"
|
||||||
" 'host-collects-dir 'host-config-dir)",
|
" 'host-collects-dir 'host-config-dir)",
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
[(pref-file) (rktio-system-path who RKTIO_PATH_PREF_FILE)]
|
[(pref-file) (rktio-system-path who RKTIO_PATH_PREF_FILE)]
|
||||||
[(addon-dir) (as-dir (or addon-dir
|
[(addon-dir) (as-dir (or addon-dir
|
||||||
(rktio-system-path who RKTIO_PATH_ADDON_DIR)))]
|
(rktio-system-path who RKTIO_PATH_ADDON_DIR)))]
|
||||||
|
[(cache-dir) (as-dir (rktio-system-path who RKTIO_PATH_CACHE_DIR))]
|
||||||
[(home-dir) (as-dir (rktio-system-path who RKTIO_PATH_HOME_DIR))]
|
[(home-dir) (as-dir (rktio-system-path who RKTIO_PATH_HOME_DIR))]
|
||||||
[(desk-dir) (as-dir (rktio-system-path who RKTIO_PATH_DESK_DIR))]
|
[(desk-dir) (as-dir (rktio-system-path who RKTIO_PATH_DESK_DIR))]
|
||||||
[(doc-dir) (as-dir (rktio-system-path who RKTIO_PATH_DOC_DIR))]
|
[(doc-dir) (as-dir (rktio-system-path who RKTIO_PATH_DOC_DIR))]
|
||||||
|
@ -55,7 +56,7 @@
|
||||||
[else (raise-argument-error who
|
[else (raise-argument-error who
|
||||||
(string-append
|
(string-append
|
||||||
"(or/c 'home-dir 'pref-dir 'pref-file 'temp-dir\n"
|
"(or/c 'home-dir 'pref-dir 'pref-file 'temp-dir\n"
|
||||||
" 'init-dir 'init-file 'addon-dir\n"
|
" 'init-dir 'init-file 'addon-dir 'cache-dir\n"
|
||||||
" 'doc-dir 'desk-dir 'sys-dir 'exec-file 'run-file\n"
|
" 'doc-dir 'desk-dir 'sys-dir 'exec-file 'run-file\n"
|
||||||
" 'collects-dir 'config-dir 'orig-dir\n"
|
" 'collects-dir 'config-dir 'orig-dir\n"
|
||||||
" 'host-collects-dir 'host-config-dir)")
|
" 'host-collects-dir 'host-config-dir)")
|
||||||
|
|
|
@ -963,7 +963,8 @@ enum {
|
||||||
RKTIO_PATH_DESK_DIR,
|
RKTIO_PATH_DESK_DIR,
|
||||||
RKTIO_PATH_DOC_DIR,
|
RKTIO_PATH_DOC_DIR,
|
||||||
RKTIO_PATH_INIT_DIR,
|
RKTIO_PATH_INIT_DIR,
|
||||||
RKTIO_PATH_INIT_FILE
|
RKTIO_PATH_INIT_FILE,
|
||||||
|
RKTIO_PATH_CACHE_DIR
|
||||||
};
|
};
|
||||||
|
|
||||||
RKTIO_EXTERN char *rktio_expand_user_tilde(rktio_t *rktio, rktio_const_string_t filename);
|
RKTIO_EXTERN char *rktio_expand_user_tilde(rktio_t *rktio, rktio_const_string_t filename);
|
||||||
|
|
|
@ -89,6 +89,7 @@
|
||||||
(define-constant RKTIO_PATH_DOC_DIR 7)
|
(define-constant RKTIO_PATH_DOC_DIR 7)
|
||||||
(define-constant RKTIO_PATH_INIT_DIR 8)
|
(define-constant RKTIO_PATH_INIT_DIR 8)
|
||||||
(define-constant RKTIO_PATH_INIT_FILE 9)
|
(define-constant RKTIO_PATH_INIT_FILE 9)
|
||||||
|
(define-constant RKTIO_PATH_CACHE_DIR 10)
|
||||||
(define-constant RKTIO_OS_SIGNAL_NONE -1)
|
(define-constant RKTIO_OS_SIGNAL_NONE -1)
|
||||||
(define-constant RKTIO_OS_SIGNAL_INT 0)
|
(define-constant RKTIO_OS_SIGNAL_INT 0)
|
||||||
(define-constant RKTIO_OS_SIGNAL_TERM 1)
|
(define-constant RKTIO_OS_SIGNAL_TERM 1)
|
||||||
|
|
|
@ -1943,20 +1943,61 @@ char *rktio_system_path(rktio_t *rktio, int which)
|
||||||
return rktio_get_current_directory(rktio);
|
return rktio_get_current_directory(rktio);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define USE_XDG_BASEDIR 1
|
||||||
{
|
{
|
||||||
/* Everything else is in ~: */
|
/* Everything else is in ~: */
|
||||||
char *home_str, *alt_home, *home;
|
char *home_str, *alt_home, *home;
|
||||||
|
|
||||||
if ((which == RKTIO_PATH_PREF_DIR)
|
if ((which == RKTIO_PATH_PREF_DIR)
|
||||||
|| (which == RKTIO_PATH_PREF_FILE)
|
|| (which == RKTIO_PATH_PREF_FILE)
|
||||||
|| (which == RKTIO_PATH_ADDON_DIR)) {
|
|| (which == RKTIO_PATH_ADDON_DIR)
|
||||||
|
|| (which == RKTIO_PATH_CACHE_DIR)
|
||||||
|
|| (which == RKTIO_PATH_INIT_DIR)
|
||||||
|
|| (which == RKTIO_PATH_INIT_FILE)) {
|
||||||
#if defined(OS_X) && !defined(XONX)
|
#if defined(OS_X) && !defined(XONX)
|
||||||
if (which == RKTIO_PATH_ADDON_DIR)
|
if ((which == RKTIO_PATH_ADDON_DIR)
|
||||||
|
|| (which == RKTIO_PATH_CACHE_DIR))
|
||||||
home_str = "~/Library/Racket/";
|
home_str = "~/Library/Racket/";
|
||||||
|
else if ((which == RKTIO_PATH_INIT_DIR)
|
||||||
|
|| (which == RKTIO_PATH_INIT_FILE))
|
||||||
|
home_str = "~/";
|
||||||
else
|
else
|
||||||
home_str = "~/Library/Preferences/";
|
home_str = "~/Library/Preferences/";
|
||||||
|
#elif USE_XDG_BASEDIR
|
||||||
|
char *envvar, *xdg_dir, *suffix;
|
||||||
|
if (which == RKTIO_PATH_ADDON_DIR) {
|
||||||
|
home_str = "~/.local/share/racket/";
|
||||||
|
envvar = "XDG_DATA_HOME";
|
||||||
|
suffix = "racket/";
|
||||||
|
} else if (which == RKTIO_PATH_CACHE_DIR) {
|
||||||
|
home_str = "~/.cache/racket/";
|
||||||
|
envvar = "XDG_CACHE_HOME";
|
||||||
|
suffix = "racket/";
|
||||||
|
} else {
|
||||||
|
home_str = "~/.config/racket/";
|
||||||
|
envvar = "XDG_CONFIG_HOME";
|
||||||
|
if ((which == RKTIO_PATH_PREF_DIR)
|
||||||
|
|| (which == RKTIO_PATH_INIT_DIR)) {
|
||||||
|
suffix = "racket/";
|
||||||
|
} else if (which == RKTIO_PATH_PREF_FILE) {
|
||||||
|
suffix = "racket/racket-prefs.rktd";
|
||||||
|
} else { /* (which == RKTIO_PATH_INIT_FILE) */
|
||||||
|
suffix = "racket/racketrc.rktl";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xdg_dir = rktio_getenv(rktio, envvar);
|
||||||
|
/* xdg_dir is invalid if it is not an absolute path */
|
||||||
|
if (xdg_dir && (strlen(xdg_dir) > 0) && (xdg_dir[0] == '/')) {
|
||||||
|
return append_paths(xdg_dir, suffix, 1, 0);
|
||||||
|
} else {
|
||||||
|
free(xdg_dir);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
home_str = "~/.racket/";
|
if ((which == RKTIO_PATH_INIT_DIR) || (which == RKTIO_INIT_FILE)) {
|
||||||
|
home_str = "~/";
|
||||||
|
} else { /* RKTIO_PATH_{ADDON_DIR,PREF_DIR,PREF_FILE} */
|
||||||
|
home_str = "~/.racket/";
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
#if defined(OS_X) && !defined(XONX)
|
#if defined(OS_X) && !defined(XONX)
|
||||||
|
@ -1985,11 +2026,19 @@ char *rktio_system_path(rktio_t *rktio, int which)
|
||||||
|
|
||||||
if ((which == RKTIO_PATH_PREF_DIR) || (which == RKTIO_PATH_INIT_DIR)
|
if ((which == RKTIO_PATH_PREF_DIR) || (which == RKTIO_PATH_INIT_DIR)
|
||||||
|| (which == RKTIO_PATH_HOME_DIR) || (which == RKTIO_PATH_ADDON_DIR)
|
|| (which == RKTIO_PATH_HOME_DIR) || (which == RKTIO_PATH_ADDON_DIR)
|
||||||
|| (which == RKTIO_PATH_DESK_DIR) || (which == RKTIO_PATH_DOC_DIR))
|
|| (which == RKTIO_PATH_DESK_DIR) || (which == RKTIO_PATH_DOC_DIR)
|
||||||
|
|| (which == RKTIO_PATH_CACHE_DIR))
|
||||||
return home;
|
return home;
|
||||||
|
|
||||||
if (which == RKTIO_PATH_INIT_FILE)
|
if (which == RKTIO_PATH_INIT_FILE) {
|
||||||
|
#if defined(OS_X) && !defined(XONX)
|
||||||
return append_paths(home, ".racketrc", 1, 0);
|
return append_paths(home, ".racketrc", 1, 0);
|
||||||
|
#elif USE_XDG_BASEDIR
|
||||||
|
return append_paths(home, "racketrc.rktl", 1, 0);
|
||||||
|
#else
|
||||||
|
return append_paths(home, ".racketrc", 1, 0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
if (which == RKTIO_PATH_PREF_FILE) {
|
if (which == RKTIO_PATH_PREF_FILE) {
|
||||||
#if defined(OS_X) && !defined(XONX)
|
#if defined(OS_X) && !defined(XONX)
|
||||||
return append_paths(home, "org.racket-lang.prefs.rktd", 1, 0);
|
return append_paths(home, "org.racket-lang.prefs.rktd", 1, 0);
|
||||||
|
@ -2041,6 +2090,7 @@ char *rktio_system_path(rktio_t *rktio, int which)
|
||||||
int which_folder;
|
int which_folder;
|
||||||
|
|
||||||
if ((which == RKTIO_PATH_ADDON_DIR)
|
if ((which == RKTIO_PATH_ADDON_DIR)
|
||||||
|
|| (which == RKTIO_PATH_CACHE_DIR) /* maybe CSIDL_LOCAL_APPDATA instead? */
|
||||||
|| (which == RKTIO_PATH_PREF_DIR)
|
|| (which == RKTIO_PATH_PREF_DIR)
|
||||||
|| (which == RKTIO_PATH_PREF_FILE))
|
|| (which == RKTIO_PATH_PREF_FILE))
|
||||||
which_folder = CSIDL_APPDATA;
|
which_folder = CSIDL_APPDATA;
|
||||||
|
@ -2134,6 +2184,7 @@ char *rktio_system_path(rktio_t *rktio, int which)
|
||||||
return home;
|
return home;
|
||||||
|
|
||||||
if ((which == RKTIO_PATH_ADDON_DIR)
|
if ((which == RKTIO_PATH_ADDON_DIR)
|
||||||
|
|| (which == RKTIO_PATH_CACHE_DIR)
|
||||||
|| (which == RKTIO_PATH_PREF_DIR)
|
|| (which == RKTIO_PATH_PREF_DIR)
|
||||||
|| (which == RKTIO_PATH_PREF_FILE)) {
|
|| (which == RKTIO_PATH_PREF_FILE)) {
|
||||||
home = append_paths(home, "Racket", 1, 0);
|
home = append_paths(home, "Racket", 1, 0);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user