summaryrefslogtreecommitdiff
path: root/system/mandoc/less.patch
diff options
context:
space:
mode:
Diffstat (limited to 'system/mandoc/less.patch')
-rw-r--r--system/mandoc/less.patch45
1 files changed, 45 insertions, 0 deletions
diff --git a/system/mandoc/less.patch b/system/mandoc/less.patch
new file mode 100644
index 000000000..51f79c453
--- /dev/null
+++ b/system/mandoc/less.patch
@@ -0,0 +1,45 @@
+Default to using less(1) instead of more(1) if MANPAGER and PAGER are
+unset, and also set a pretty prompt and smart case searching like man-db
+does if less is used as a pager.
+
+The name of the manpage is not available in the scope of the patched
+function - maybe add it at some point.
+
+--- mandoc-1.14.5/main.c 2019-03-10 04:56:43.000000000 -0500
++++ mandoc-1.14.5/main.c 2020-06-05 01:59:10.640524340 -0500
+@@ -1316,11 +1316,25 @@ spawn_pager(struct tag_files *tag_files)
+ /* For less(1), use the tag file. */
+
+ use_ofn = 1;
+-#if HAVE_LESS_T
+ if (*outst->tag_files->tfn != '\0' &&
+ (cmdlen = strlen(argv[0])) >= 4) {
+ cp = argv[0] + cmdlen - 4;
+ if (strcmp(cp, "less") == 0) {
++ /*
++ * Set a few options like man-db does.
++ * -i: smart case search
++ * -mPm: set prompt to following string terminated by $
++ */
++ argv[argc++] = "-imPm" \
++ " Manual page" \
++ /*
++ * print " (END)" if EOF, else % in file followed by % sign.
++ * ?X if X:else not X.
++ */
++ "?e (END):?pB %pB\\%.. " \
++ "(press h for help or q to quit)" \
++ "$";
++#if HAVE_LESS_T
+ argv[argc++] = mandoc_strdup("-T");
+ argv[argc++] = outst->tag_files->tfn;
+ if (tag_files->tagname != NULL) {
+@@ -1327,7 +1342,7 @@ spawn_pager(struct tag_files *tag_files)
+ argv[argc++] = tag_target;
+ use_ofn = 0;
+ }
++#endif
+ }
+ }
+-#endif
+ if (use_ofn) {