diff --git a/cmd/cheat/main.go b/cmd/cheat/main.go index 108463c..f2790ac 100755 --- a/cmd/cheat/main.go +++ b/cmd/cheat/main.go @@ -16,7 +16,7 @@ import ( "github.com/cheat/cheat/internal/installer" ) -const version = "4.2.5" +const version = "4.2.6" func main() { diff --git a/cmd/cheat/str_config.go b/cmd/cheat/str_config.go index 4970017..5039c1e 100644 --- a/cmd/cheat/str_config.go +++ b/cmd/cheat/str_config.go @@ -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 diff --git a/configs/conf.yml b/configs/conf.yml index 31565bd..448e9c5 100644 --- a/configs/conf.yml +++ b/configs/conf.yml @@ -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 diff --git a/internal/config/config.go b/internal/config/config.go index 1a068fd..4870a54 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -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