summaryrefslogblamecommitdiff
path: root/system/less/search-path-history-file.patch
blob: 7ec0ce9f1d8f238466a5131b966ce5ffa540493a (plain) (tree)























































































                                                                                                        
From 5e1f4ce2c3a2c0fd6a953c4f7ca2839370f9c3ae Mon Sep 17 00:00:00 2001
From: Mark Nudelman <markn@greenwoodsoftware.com>
Date: Fri, 3 Dec 2021 09:38:22 -0800
Subject: [PATCH] Add $XDG_STATE_HOME and $HOME/.local/state to list of
 directories to search for the history file.

---
 cmdbuf.c     | 48 ++++++++++++++++++++++++++++++++----------------
 less.nro.VER |  6 +++---
 2 files changed, 35 insertions(+), 19 deletions(-)

diff --git a/cmdbuf.c b/cmdbuf.c
index cd99010d..abbda9b9 100644
--- a/cmdbuf.c
+++ b/cmdbuf.c
@@ -1401,14 +1401,41 @@ mlist_size(ml)
 /*
  * Get the name of the history file.
  */
+	static char *
+histfile_find(must_exist)
+	int must_exist;
+{
+	char *home = lgetenv("HOME");
+	char *name = NULL;
+
+	/* Try in $XDG_DATA_STATE, then in $HOME/.local/state, then in $XDG_DATA_HOME, then in $HOME. */
+#if OS2
+	if (isnullenv(home))
+		home = lgetenv("INIT");
+#endif
+	name = dirfile(lgetenv("XDG_STATE_HOME"), &LESSHISTFILE[1], must_exist);
+	if (name == NULL)
+	{
+		char *dir = dirfile(home, ".local/state", 1);
+		if (dir != NULL)
+		{
+			name = dirfile(dir, &LESSHISTFILE[1], must_exist);
+			free(dir);
+		}
+	}
+	if (name == NULL)
+		name = dirfile(lgetenv("XDG_DATA_HOME"), &LESSHISTFILE[1], must_exist);
+	if (name == NULL)
+		name = dirfile(home, LESSHISTFILE, must_exist);
+	return (name);
+}
+
 	static char *
 histfile_name(must_exist)
 	int must_exist;
 {
-	char *home;
-	char *xdg;
 	char *name;
-	
+
 	/* See if filename is explicitly specified by $LESSHISTFILE. */
 	name = lgetenv("LESSHISTFILE");
 	if (!isnullenv(name))
@@ -1423,25 +1450,14 @@ histfile_name(must_exist)
 	if (strcmp(LESSHISTFILE, "") == 0 || strcmp(LESSHISTFILE, "-") == 0)
 		return (NULL);
 
-	/* Try in $XDG_DATA_HOME first, then in $HOME. */
-	xdg = lgetenv("XDG_DATA_HOME");
-	home = lgetenv("HOME");
-#if OS2
-	if (isnullenv(home))
-		home = lgetenv("INIT");
-#endif
 	name = NULL;
 	if (!must_exist)
 	{
 	 	/* If we're writing the file and the file already exists, use it. */
-		name = dirfile(xdg, &LESSHISTFILE[1], 1);
-		if (name == NULL)
-			name = dirfile(home, LESSHISTFILE, 1);
+		name = histfile_find(1);
 	}
 	if (name == NULL)
-		name = dirfile(xdg, &LESSHISTFILE[1], must_exist);
-	if (name == NULL)
-		name = dirfile(home, LESSHISTFILE, must_exist);
+		name = histfile_find(must_exist);
 	return (name);
 }