mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-14 18:10:32 -08:00
emacsclient: adjust to new config file location
* lib-src/emacsclient.c (open_config): New arg XDG, to respect XDG_CONFIG_HOME, consistently with Emacs proper. Caller changed. Use XDG convention if available, falling back on the old names if not.
This commit is contained in:
parent
a4144af909
commit
44f15b63db
1 changed files with 31 additions and 14 deletions
|
|
@ -914,22 +914,38 @@ initialize_sockets (void)
|
|||
#endif /* WINDOWSNT */
|
||||
|
||||
|
||||
/* If the home directory is HOME, return the configuration file with
|
||||
basename CONFIG_FILE. Fail if there is no home directory or if the
|
||||
configuration file could not be opened. */
|
||||
/* If the home directory is HOME, and XDG_CONFIG_HOME's value is XDG,
|
||||
return the configuration file with basename CONFIG_FILE. Fail if
|
||||
the configuration file could not be opened. */
|
||||
|
||||
static FILE *
|
||||
open_config (char const *home, char const *config_file)
|
||||
open_config (char const *home, char const *xdg, char const *config_file)
|
||||
{
|
||||
if (!home)
|
||||
return NULL;
|
||||
ptrdiff_t homelen = strlen (home);
|
||||
static char const emacs_d_server[] = "/.emacs.d/server/";
|
||||
ptrdiff_t suffixsize = sizeof emacs_d_server + strlen (config_file);
|
||||
char *configname = xmalloc (homelen + suffixsize);
|
||||
strcpy (stpcpy (stpcpy (configname, home), emacs_d_server), config_file);
|
||||
ptrdiff_t xdgsubdirsize = xdg ? strlen (xdg) + sizeof "/emacs/server/" : 0;
|
||||
ptrdiff_t homesuffixsizemax = max (sizeof "/.config/emacs/server/",
|
||||
sizeof "/.emacs.d/server/");
|
||||
ptrdiff_t homesubdirsizemax = home ? strlen (home) + homesuffixsizemax : 0;
|
||||
char *configname = xmalloc (max (xdgsubdirsize, homesubdirsizemax)
|
||||
+ strlen (config_file));
|
||||
FILE *config;
|
||||
if (xdg || home)
|
||||
{
|
||||
strcpy ((xdg
|
||||
? stpcpy (stpcpy (configname, xdg), "/emacs/server/")
|
||||
: stpcpy (stpcpy (configname, home), "/.config/emacs/server/")),
|
||||
config_file);
|
||||
config = fopen (configname, "rb");
|
||||
}
|
||||
else
|
||||
config = NULL;
|
||||
|
||||
if (! config && home)
|
||||
{
|
||||
strcpy (stpcpy (stpcpy (configname, home), "/.emacs.d/server/"),
|
||||
config_file);
|
||||
config = fopen (configname, "rb");
|
||||
}
|
||||
|
||||
FILE *config = fopen (configname, "rb");
|
||||
free (configname);
|
||||
return config;
|
||||
}
|
||||
|
|
@ -949,10 +965,11 @@ get_server_config (const char *config_file, struct sockaddr_in *server,
|
|||
config = fopen (config_file, "rb");
|
||||
else
|
||||
{
|
||||
config = open_config (egetenv ("HOME"), config_file);
|
||||
char const *xdg = egetenv ("XDG_CONFIG_HOME");
|
||||
config = open_config (egetenv ("HOME"), xdg, config_file);
|
||||
#ifdef WINDOWSNT
|
||||
if (!config)
|
||||
config = open_config (egetenv ("APPDATA"), config_file);
|
||||
config = open_config (egetenv ("APPDATA"), xdg, config_file);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue