summaryrefslogblamecommitdiff
path: root/system/mandoc/less.patch
blob: 19d5673651dd47625a48d200f0d7669080251b3c (plain) (tree)

























































                                                                                            
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
@@ -1170,8 +1170,9 @@ spawn_pager(struct tag_files *tag_files)
 	pager = getenv("MANPAGER");
 	if (pager == NULL || *pager == '\0')
 		pager = getenv("PAGER");
-	if (pager == NULL || *pager == '\0')
-		pager = "more -s";
+	if (pager == NULL || *pager == '\0') {
+		pager = "less";
+	}
 	cp = mandoc_strdup(pager);
 
 	/*
@@ -1195,10 +1196,24 @@ spawn_pager(struct tag_files *tag_files)
 	/* For less(1), use the tag file. */
 
 	use_ofn = 1;
-#if HAVE_LESS_T
 	if ((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++] = tag_files->tfn;
 			if (tag_files->tagname != NULL) {
@@ -1206,9 +1221,9 @@ spawn_pager(struct tag_files *tag_files)
 				argv[argc++] = tag_files->tagname;
 				use_ofn = 0;
 			}
+#endif
 		}
 	}
-#endif
 	if (use_ofn)
 		argv[argc++] = tag_files->ofn;
 	argv[argc] = NULL;