lesser
A lesser pager, even less than less. Implemented in Rust.
It aims to be a drop-in replacement for less in everyday use — git, man,
systemd-journald — without the long tail of features almost nobody touches.
It is a clean-room reimplementation derived from the less(1) man page and
observed runtime behavior; no less source was read.
Install
From source:
cargo install lesser
Use
Just like less:
git diff --color=always | lesser -R
man ls | lesser
ls -la | lesser
lesser src/main.rs
lesser reads the LESS and SYSTEMD_LESS environment variables and
accepts their bundled-flag form (LESS=FRX, SYSTEMD_LESS=FRSXMK). Flags
that aren't implemented yet are silently ignored, never errored — set it
as $PAGER and expect things to work.
LESS=FRX (git's default) is the canary configuration this is built for.
Keys
Navigation:
| Key | Action |
|---|---|
q |
quit |
space, PgDn |
page down |
b, PgUp |
page up |
j, ↓, Enter |
next visual row |
k, ↑ |
previous visual row |
g, Home |
first row |
G, End |
last row |
Search:
| Key | Action |
|---|---|
/ |
start search; matches highlight as you type |
Enter |
commit pattern and jump to first match |
Esc, ctrl-c |
cancel |
Backspace |
erase char (empty input + Backspace exits) |
n |
next match (wraps around) |
Display:
| Key | Action |
|---|---|
S |
toggle chop / wrap |
Flags
| Flag | Behavior |
|---|---|
-R |
pass ANSI color escapes through |
-F |
quit if the input fits one screen |
-X |
skip alternate screen (output stays in scrollback on exit) |
-S |
start in chop mode (default is wrap; toggle with S at runtime) |
-K |
quit on ctrl-c (accepted; not yet wired in) |
What works
- Stdin and file input
-RANSI passthrough — coloredgit diffrenders correctly, with per-line SGR reset to prevent color bleed-Fquit-if-one-screen —git log -1doesn't pop a pager for two lines-Xno-init — output stays in scrollback after exit- Wrap (default) and chop modes, with runtime
Stoggle - Smooth visual scrolling: a wrapped line advances one visual row at a time, not one logical line
- Resize handling:
SIGWINCHrebuilds the visual layout while preserving the user's logical-line position - Regex search with live highlighting as you type, wrap-around,
nfor next match LESS/SYSTEMD_LESSenv-var bundles parsed; unknown flags ignored- Unicode display widths (CJK characters take two columns and chop/wrap correctly)
What doesn't (yet)
-K(quit on ctrl-c) is accepted but not wired in- Backspace-overstrike decoding for older
manoutput (_\bxunderline,x\bxbold) is not implemented - Without
-R, ANSI escapes pass through as-is rather than being shown literally as^[[31m(less's default) - No marks, tags,
!shell escape,+cmd - No multi-file navigation (
:n/:p) - No
LESSOPENpreprocessors - No hex mode
- No reverse search
?, no<num>gjump-to-line
These map to the roadmap and explicit non-goals in PLAN.md.
Targets
Linux and macOS, primarily. Should work on other Unix-likes; not actively tested. Windows is best-effort and currently untested.
License
MIT or Apache-2.0, at your convenience.