I made a terminal pager (theleo.zone)

by speckx 47 comments 173 points
Read article View on HN

47 comments

[−] CGamesPlay 29d ago
I am definitely waiting for a "modern less replacement" in the same vein as fd, sd, fzf, and the rest of the under-20yo cli crew. I get that "less" is reasonably maintained still.

I think the killer feature for me would be refresh. I get that this can't work for piped input, but I want git diff to show in a pager with a refresh button that holds my place. fzf supports both refresh and piped input, so perhaps there's some ideas there that could be leveraged.

[−] zeech 29d ago
I went looking for a 'new' pager a couple years back and settled on this [0]. I've since gone back to less since it got annoying jumping between systems and having different pagers, but when I used it it was quite nice.

[0] https://github.com/walles/moor

[−] busfahrer 29d ago
I've noticed that subconsciously, I've started to use bat for interactive paging, even though that's not its main use case
[−] gnubison 28d ago
If you want ‘git diff | pager’ to work like that, you’re out of luck. There is no way for the pager to communicate with git or the shell to rerun the command; the pager doesn’t even know what program is on the writing side of its stdin pipe. You would need something like ‘pager --command "git diff"’, where the pager invokes a command producing output. I do agree that it would be nice.
[−] drabbiticus 29d ago

> holds my place

can you give an example of what you mean and how you might expect it to be achieved with a reloaded diff? otherwise while true; git diff --color=always |less -r; done gets you most of the way to what you are asking for

[−] codethief 29d ago
+1 I actually came here hoping that OP had built a better less. Along with refresh, I'd also love to see mouse compatibility (scrolling etc.) and better performance when reading huge files.
[−] anthk 29d ago
That should be under a less(1) flag, but optional as it can mess piping.
[−] ilyagr 28d ago
https://github.com/noborus/ov is another pager, in addition to moor that somebody else shared.
[−] asibahi 29d ago
Slightly related: I am an Arab who speaks Arabic and reads Arabic and the only place I ever see the unicode character ﷽ is by programmers giving an example of "unicode is too hard".

Perhaps as a graphical element at the beginning of books, too.

It is a part of the Arabic Presentation Forms block which explicitly is for supporting legacy encodings and should not be used.

[−] da_rob 29d ago
Well-written article!

I wish there was some kind of standard to tell CLI apps what features to expect from the system pager, so they can act accordingly …

Right now, apps can talk to the terminal to check for feature support, but all of that falls apart when the output is piped to a pager. (Do we support inline links? ANSI colors? Sixel support??)

Shameless plug, specifically regarding Sixel support: I needed a pager with better image support than just less -r and made https://github.com/roblillack/lessi

[−] ancientcatz 29d ago
If I remember correctly, gum also provides a pager feature: https://github.com/charmbracelet/gum
[−] jauntywundrkind 29d ago
It's not great but I made a typescript library to wrap pickers recently, such as skim, fuzzel, fzf, dmenu, rofi, etc. Some very similar problems.

Would love if anyone has thoughts or suggestions. It was quick and dirty, and works fine for my use, but I'm not sure where else I could take this, how else I might splice apart the problem, what else would suit it. https://tangled.org/jauntywk.bsky.social/picker-power

[−] efaref 29d ago
I wrote streampager a few years ago to scratch a similar itch. It works well enough for my own uses (and is/was used in library form as the built-in pager for sapling and jj).

I think it still needs some work for more general use which I unfortunately don't have time for at the moment.

[−] thegdsks 29d ago
How does this compare to less with syntax highlighting? I've been using bat as a pager (bat --paging=always) and it covers most of what I need. Curious what the advantage is for larger files.
[−] pimlottc 29d ago
The TL;DR doesn’t really say what this new pager offers compared to less; it seems to mostly be a learning project:

> lore supports only a subset of what less does, but in a more intuitive and useful manner for my daily activity. I also find value in understanding it from the ground up, bytes to terminal views, and continuing to refine it as I learn more about what I actually want and need in a terminal pager.

[−] fragmede 29d ago
A Splunk, a Splunk! My kingdom for a Splunk!

(too bad Cisco bought them and made it too expensive).

Also, no "less does more than more and most does more than less" joke?

[−] gandreani 29d ago
I really like this post! I think it's the clearest explanation I've seen of the different characteristics of utf-8 strings
[−] broken-kebab 29d ago
I suggest writing an intro which would answer 'why' you made it.
[−] mnkyprskbd 29d ago
bat is the king of pagers. https://github.com/sharkdp/bat
[−] dostick 29d ago
From the title I thought it’s about a dead man’s switch.
[−] jzer0cool 29d ago
Was curious but the git link there doesn't load?
[−] sourcegrift 29d ago
Also called vi -
[−] umutnaber 29d ago
good work
[−] vomayank 29d ago
[flagged]
[−] cocodill 29d ago
For a bubbletea application I'd expect more bubbles and tea there. But still, nice project.