Settings

Theme

Show HN: Ov – feature rich terminal pager

github.com

181 points by noborus 3 years ago · 52 comments · 1 min read

Reader

I made a terminal pager that can be used instead of more, less, tail -f. It has a mode that distinguishes between headers and columns.

throwawaybutwhy 3 years ago

Suppose it is a technicality, but if it can't handle large (larger than available memory, that is) files [0], it's not a pager.

[0] https://github.com/noborus/ov/issues/201

  • benj111 3 years ago

    It is a technicality and it is still a pager.

    • throwawaybutwhy 3 years ago

      You are right, of course, and I stand corrected, performance and/or ability to fully replace less have no bearing on whether a program is a pager.

      • VWWHFSfQ 3 years ago

        Nah I still wouldn't call it a pager. They used the correct term themselves as "text viewer".

  • noborusOP 3 years ago

    I see memory efficiency as an issue, but not as a priority issue as it was 30 years ago.

    • ktpsns 3 years ago

      In data science/industry it frequently happens for people to open files bigger then the available memory in less. "Big data" is a somewhat independent concept of the fact that RAM was smaller 30 years ago.

Sakos 3 years ago

I'm impressed by the documentation. Commonly used options with examples fairly high up, then a complete overview of all the options below that.

Definitely going to give this a try.

rakoo 3 years ago

ov looks really nice and probable deserves a try. I like the section thing, it's going to be useful for diffs to go file by file.

One feature I discovered recently in less that I'm always using now is filtering: type '&' and then the thing you're looking for, and less will only show matching lines.

  • trancilo 3 years ago

    using filtering in Less. That is a great tip. This opens up a whole new way of reading logs for me. thanks

  • noborusOP 3 years ago

    Filtering in less is one of the features that ov doesn't have yet. I will refer to it. thank you.

pxc 3 years ago

Looks like posting this to Hacker News got it packaged for Nixpkgs¹! I had to add it via package override when the article came out, but it's since been added to Nixpkgs. :)

If you're a NixOS newbie and you don't want to wait for the PR to land, you can add it with a package override by pasting in the function body from the PR and prepending a `with` expression for the original Nixpkgs used in the override, like:

  nixpkgs.config.packageOverrides = superPkgs: {
    ov = with superPkgs; buildGoModule rec {
      pname = "ov";
      version = "0.13.0";
      <...>
      meta = with lib; {
        description = "Feature-rich terminal-based text viewer";
        homepage = "https://noborus.github.io/ov";
        license = licenses.mit;
        platforms = platforms.linux ++ platforms.darwin;
      };
    };
  };
Hopefully in a week or two, Nixpkgs will provide another convenient way for Linux and macOS users to quickly try out this new pager! I know I'll be following along to see how it develops. :)

--

1: https://github.com/NixOS/nixpkgs/pull/209034

omani 3 years ago

hey OP, nice tool. can we use $HOME/config/ for the config file? keeps the home clean.

kbd 3 years ago

Anyone tried using this for a scrollback pager for kitty terminal? I have a convoluted nvim incantation right now I’d love to replace.

  • shaicoleman 3 years ago

    Yes, it works by adding to kitty.conf:

      scrollback_pager ov
    • kbd 3 years ago

      Yeah I experimented with it, seemed to work out of the box. I used `ov -f` so it starts at the end of the scrollback. Searching behaves strangely (different from vim). Seems to run fast but I haven't tried it on giant scrollbacks yet.

pseufaux 3 years ago

I didn’t see any indication in the readme if this supports syntax highlighting. Any plans to add it?

adamredwoods 3 years ago

Any markdown support? I don't see any in the feature list. :(

John23832 3 years ago

I tried testing this using /dev/random and I got a lot of flickering.

```

< /dev/random ov

```

armchairhacker 3 years ago

I'm surprised there aren't more pagers besides `less` and `more`. Alternatives I've found online:

- https://linux.die.net/man/1/most (multiple files/windows at once)

- https://github.com/sharkdp/bat (uses `less` under the hood, syntax highlighting and git diffs)

- https://linux.die.net/man/1/lesskey (add parameters to `less`)

- https://github.com/ivanov/kanten (looks abandoned)

- "Just use vim" (and vim's paging is really good, so this is viable, in fact probably the most viable so far)

`less` is a great program, despite being old there aren't really many flaws. It's one of those tools that don't really need updates or improvements. But I do think there are a few features which would be nice to have (automatic ANSI coloring, tailing, syntax highlighting, support for files like sqlite and tar - which of which are in ov).

The one thing which `less` may have over `ov` (besides already being on most distros) is speed. `less` takes in really large files, or forever terminal output, and is still really fast. And I find that when I use `less` I use it with large files or terminal output often. Though I don't actually know if `ov` is any slower, it's something the dev should watch out for (I don't see "speed" mentioned in the README).

href 3 years ago

If the log-file viewing capabilities look interesting to you, check out lnav, which is built for that and excels at it:

https://lnav.org/

  • neilv 3 years ago

    Nice! I've been in rapid-response situations where I had to pull logs from various sources (including embedded devices) that weren't unified in a central logging service. I could get the logs onto my workstation, but then manually lining up who-saw-what-when involved a headache, even with Emacs. lnav seems to have a few features to support this.

    One very useful feature for this I didn't see listed for lnav was to support adjusting for timestamps in different timezones, like maybe you have a desktop's log in local time that you're trying to reconcile with servers. (A related but less-important bonus would be to be able to specify smaller arbitrary clock drift/offsets for each log.)

    • tstack 3 years ago

      > One very useful feature for this I didn't see listed for lnav was to support adjusting for timestamps in different timezones, like maybe you have a desktop's log in local time that you're trying to reconcile with servers. (A related but less-important bonus would be to be able to specify smaller arbitrary clock drift/offsets for each log.)

      You can adjust the timestamps for a file using the ":adjust-log-time" command (https://docs.lnav.org/en/latest/commands.html#adjust-log-tim...). For example, if you wanted to shift the timestamps back an hour, you can do:

          :adjust-log-time -1h
      
      The shift is applied to the messages in the file that the top line in the view belongs to.

      If you want to do the shift programmatically, you can UPDATE the "time_offset" column of the "lnav_file" table directly (see https://docs.lnav.org/en/latest/sqltab.html#lnav-file)

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection