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;