summaryrefslogtreecommitdiff
path: root/system/less/search-path-history-file.patch
diff options
context:
space:
mode:
Diffstat (limited to 'system/less/search-path-history-file.patch')
-rw-r--r--system/less/search-path-history-file.patch88
1 files changed, 88 insertions, 0 deletions
diff --git a/system/less/search-path-history-file.patch b/system/less/search-path-history-file.patch
new file mode 100644
index 000000000..7ec0ce9f1
--- /dev/null
+++ b/system/less/search-path-history-file.patch
@@ -0,0 +1,88 @@
+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);
+ }
+