.
.\" Document /////////////////////////////////////////////////////////////
.\" ----------------------------------------------------------------------
-.TH TOP 1 "November 2016" "procps-ng" "User Commands"
+.TH TOP 1 "January 2017" "procps-ng" "User Commands"
.\" ----------------------------------------------------------------------
.\" ----------------------------------------------------------------------
.\" ......................................................................
.SS 6b. PERSONAL Configuration File
.\" ----------------------------------------------------------------------
-This file is written as `$HOME/.your\-name\-4\-\*(We' + `rc'.
+The legacy version is written as `$HOME/.your\-name\-4\-\*(We' + `rc'
+with a leading period.
+
+A newly created \*(CF is written as procps/your\-name\-4\-\*(We' + `rc'
+without a leading period.
+The procps directory will be subordinate to either $XDG_CONFIG_HOME when
+set as an absolute path or the $HOME/.config directory.
+
Use the `W' \*(CI to create it or update it.
Here is the general layout:
" # discussed below
.fi
-If the $HOME variable is not present, \*(We will try to write the
-personal \*(CF to the current directory, subject to permissions.
+If the $HOME and $XDG_CONFIG_HOME variables are not present, \*(We will try
+to write the personal \*(CF in the current directory, subject to permissions.
.\" ......................................................................
.SS 6c. ADDING INSPECT Entries
#include <sys/ioctl.h>
#include <sys/resource.h>
#include <sys/select.h> // also available via <sys/types.h>
+#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h> // also available via <stdlib.h>
static void configs_read (void) {
float tmp_delay = DEF_DELAY;
char fbuf[LRGBUFSIZ];
- const char *p;
+ const char *p, *p_home;
FILE *fp;
int i;
- p = getenv("HOME");
- snprintf(Rc_name, sizeof(Rc_name), "%s/.%src", (p && *p) ? p : ".", Myname);
-
fp = fopen(SYS_RCFILESPEC, "r");
if (fp) {
if (fgets(fbuf, sizeof(fbuf), fp)) { // sys rc file, line 1
fclose(fp);
}
+ // attempt to use the legacy file first, if we cannot access that file, use
+ // the new XDG basedir locations (XDG_CONFIG_HOME or HOME/.config) instead.
+ p_home = getenv("HOME");
+ if (!p_home || p_home[0] == '\0')
+ p_home = ".";
+ snprintf(Rc_name, sizeof(Rc_name), "%s/.%src", p_home, Myname);
+
+ if (access(Rc_name, F_OK)) {
+ p = getenv("XDG_CONFIG_HOME");
+ // ensure the path we get is absolute, fallback otherwise.
+ if (!p || p[0] != '/') {
+ p = fmtmk("%s/.config", p_home);
+ (void)mkdir(p, 0700);
+ }
+ snprintf(Rc_name, sizeof(Rc_name), "%s/procps", p);
+ (void)mkdir(Rc_name, 0700);
+ snprintf(Rc_name, sizeof(Rc_name), "%s/procps/%src", p, Myname);
+ }
+
fp = fopen(Rc_name, "r");
if (fp) {
int tmp_whole, tmp_fract;