fix: pagination error on Linux

Bury the `more` pager default on Linux in an effort to work around the
following problem:

https://github.com/cheat/cheat/issues/681#issuecomment-1201842334

We're satisficing for this kludge because it does not appear to be
possible to actually make `more` perform as expected in all
environments.
This commit is contained in:
Christopher Allen Lane 2022-08-02 20:27:56 -04:00
parent a23d372d1f
commit 0737af2fec
4 changed files with 33 additions and 7 deletions

View File

@ -16,7 +16,7 @@ import (
"github.com/cheat/cheat/internal/installer"
)
const version = "4.2.5"
const version = "4.2.6"
func main() {

View File

@ -23,8 +23,7 @@ colorize: false
# One of: "terminal", "terminal256", "terminal16m"
formatter: terminal
# Through which pager should output be piped? (Unset this key for no pager.)
pager: more
# Through which pager should output be piped?
# pager: less -FRX # <- recommended where available
# The paths at which cheatsheets are available. Tags associated with a cheatpath

View File

@ -14,8 +14,7 @@ colorize: false
# One of: "terminal", "terminal256", "terminal16m"
formatter: terminal
# Through which pager should output be piped? (Unset this key for no pager.)
pager: more
# Through which pager should output be piped?
# pager: less -FRX # <- recommended where available
# The paths at which cheatsheets are available. Tags associated with a cheatpath

View File

@ -131,8 +131,36 @@ func New(opts map[string]interface{}, confPath string, resolve bool) (Config, er
// attempt to fall back to `PAGER` if a pager is not specified in configs
conf.Pager = strings.TrimSpace(conf.Pager)
if conf.Pager == "" && os.Getenv("PAGER") != "" {
conf.Pager = os.Getenv("PAGER")
if conf.Pager == "" {
// look for `pager`, `less`, and `more` on the system PATH
pagerPath, _ := exec.LookPath("pager")
lessPath, _ := exec.LookPath("less")
morePath, _ := exec.LookPath("more")
// search first for a `PAGER` envvar
if os.Getenv("PAGER") != "" {
conf.Pager = os.Getenv("PAGER")
// search for `pager`
} else if pagerPath != "" {
conf.Pager = pagerPath
// search for `less`
} else if lessPath != "" {
conf.Pager = lessPath
// search for `more`
//
// XXX: this causes issues on some Linux systems. See:
// https://github.com/cheat/cheat/issues/681#issuecomment-1201842334
//
// By checking for `more` last, we're hoping to at least mitigate
// the frequency of this occurrence, because `pager` and `less` are
// likely to be available on most systems on which a user is likely
// to have installed `cheat`.
} else if morePath != "" {
conf.Pager = morePath
}
}
return conf, nil