noborus / ov Goto Github PK
View Code? Open in Web Editor NEW🎑Feature-rich terminal-based text viewer. It is a so-called terminal pager.
Home Page: https://noborus.github.io/ov
License: MIT License
🎑Feature-rich terminal-based text viewer. It is a so-called terminal pager.
Home Page: https://noborus.github.io/ov
License: MIT License
Would you consider simplifying the mark keybindings a bit by either adding a new mark keybind that allows users to toggle the setting of a mark, or changing the behavior of the current mark keybind to allow for toggling? Each press of the bind would be removing a mark if it already exists, or adding a mark if it does not already exist.
Also thanks for implementing #206, it is very helpful.
Stop the main package in cmd/ov/
.
Move the main package to just below the repository.
Should I change the repository name?
To help find data in columnar displays.
An example would be the output of 'ps', often I would want to find specif processes (by name or owner) and sort them on one of the columns.
I tried multiple combinations in the config.yaml file without success.
When using --column-rainbow setting both background and foreground is a necessity.
Text after " ◯" disappears.
$ cat sample2.txt
column1 | column2
---------+------------
◯ほげ | 2023-06-04
b | 2023-06-05
$ ov --config /dev/null sample2.txt
Deleted "◯" from the file, and "ほげ" was displayed correctly, so I guess "◯" was the culprit.
The terminal emulator is iTerm2 and this problem occurs only when Ambiguous characters are double-width
is checked.
When it is not checked, it is displayed as follows:
Often the status line gives little to no information at all, being able to hide it as an option and show/hide it dynamically would make for a better UX, specially at night when the white status background is very bright.
User colors would also be appreciated.
Would you consider adding an option to disable default keybinds? Users would then be required to manually specify the key that they want each action to be bound to. This will be helpful in disabling unused keybinds instead of having to manually specify a placeholder like ' ' for each action.
I am using ov as the pager of psql, and sometimes I would like to save the result of the query to a file.
Is it possible to add "Save to file" like less's -O
and s
?
The man pager needs to support the move escape sequence.
CTRL-Z is not supported for key binding, but drawing is not fixed even after suspending with STOP signal and restarting.
One of the property of pagers like less
is that they are memory bounded by default, so they don't read the entire file into memory and can easily be used on huge files (say 100s of GBs)
Looking at less
source code, this doesn't seem trivial to implement.
But this would be a great win for ov
!
In less when jumping to the end of the file via END
or G
the file is also reread. That is very handy when viewing logfiles that grow while viewing them.
For example,
G
or END
to jump to the end of the fileG
or END
againThe second invocation (and in fact also the first invocation) would also display lines that were added to the file after step 2 (the first jump to the files end).
Table switch -c has no effect, file content is just displayed as usal (e.g. by calling "ov -c -d: /etc/passwd"). Using ov Version 0.4.0. Same effect with $HEAD. Distro is Mint 19.3.
Originally posted by @larsklemstein in #5 (comment)
If I do:
(while :; do echo random-$RANDOM; sleep 0.01; done;) | ov
The bottom status line shows STDIN and stops at 100 lines and it doesn't matter what terminal size I use or whether I have interacted with the page. Using the sync-hotkey didn't do anything. This behavior is odd.
Is there a "follow mode" planned?
--
Anyway, very good pager! I like it very much!
I have a Windows 11 host using Windows Terminal 1.16 connected to a WSL instance.
I can not figure out why but the default mouse configuration and the clipboard is not working as expected. Nothing I select gets added to the clipboard. I disabled mouse support and then I can select text which goes to clipboard.
Is that expected behaviour on Windows?
Hello Expert,
One feature request if possible and if you could enable space key press to scroll the file as all other existing pager doing... i know you have key binding to achieve the task but it is good to have by default second if you could add ctrl + > and ctrl + < key bind to jump directly on top and bottom of page this is also available by default in all the pager programs rest all looks good so far ...
I tried the keybinding for page_up/page_down with space and other key combination but result is not what i am expecting . Second i also noticed ov line number is wasting unnecessary terminal space need to be optimised. Below screenshot you can see this space can be reduced when line number enabled.
for cavemen (and women) like me who have difficulties remembering what Cornflower Blue is for color.
https://www.ditig.com/256-colors-cheat-sheet
Maybe names like
ansi<number>
rgb<R><G><B>
In vscode terminal with the setting
"terminal.integrated.cursorStyle": "line"
when invoking ov
on a file (make sure that it is long enough so that it stays in pager mode) then quitting, the cursor changes from the expected line type to block
Re-execute the command when reloading in exec mode.
It's the equivalent of the watch command.
I see that mark navigation and creation are already implemented so would it be possible to also add mark deletion and visualization (something like an icon in the sidebar)?
Also thanks for making ov, I have been looking for a less replacement for quite some time.
pager
is often called and used by other applications.
It is easy to start using if there is a usage example.
Currently left
and right
commands scroll one column by one, so it takes time to scroll very long lines. It would be so nice if this was configurable. less
has the option for it:
-# or --shift
Specifies the default number of positions to scroll
horizontally in the RIGHTARROW and LEFTARROW commands. If
the number specified is zero, it sets the default number
of positions to one half of the screen width.
Alternately, the number may be specified as a fraction of
the width of the screen, starting with a decimal point: .5
is half of the screen width, .3 is three tenths of the
screen width, and so on. If the number is specified as a
fraction, the actual number of scroll positions is
recalculated if the terminal window is resized.
Thanks for the tool. I've been using it for months and now I really like it!
Hi, cool project – tried it yesterday and instantly liked it!
The help has this entry:
[Home] * go to begin of line
[End] * go to end of line
but when I press [Home] or [End], it moves the cursor to beginning/end of the current file, which also seems to be the default in less.
Is the documentation wrong or the implementation?
Is there another way to move the curser to beginning/end of line?
Hey,there.
I would like to use ov in another application. Until,now,ov exists as standalone application. Can it be provided as golang package so that it can be used in other applications too?
I created a file test.txt
and executed:
$ ov --follow-mode test.txt
In another terminal I kept adding content to test.txt
(and saving it, of course), but the text in ov's terminal was not updating.
Hi Expert,
I have syntax highlighter enable for my terminal app by using Chromaterm tool and i have noticed while reading log and syntax highlighter enable ov is having some latency so syntax highlight is taking some delay to trigger where as if i use less/moar/bat pager i do not have this behaviour.
The pager hangs and does nothing
e.g.
package main
import (
"bytes"
"github.com/noborus/ov/oviewer"
)
func main() {
doc, err := oviewer.NewDocument()
if err != nil {
panic(err)
}
if err := doc.ReadAll(bytes.NewBufferString("hiho")); err != nil {
panic(err)
}
ov, err := oviewer.NewOviewer(doc)
if err != nil {
panic(err)
}
if err := ov.Run(); err != nil {
panic(err)
}
}
```
Make the previous version viewable as a history.
Is it possible to change the --section
param based on the file extension? I'm using bat, I wonder if there's a way to send over some metadata or somehow combine the two?
When paging a .py
file it would be great to have def|class
pre-filled as the --section
When used on a file with many lines there is flickering while the lines load until it is fully loaded
I'm thinking for some option to make px aux|ov -c
work in an easy way and honestly I'd prefer some smartness on the ov's side (e.g. to detect basic columns like awk
does). Ideally -c
alone would match against \s+
as a column separator, but otherwise it'd be useful if a regexp could be a separator at all, as vanilla ps idents with several spaces.
Yes, I know it can be fixed on ps side, but I think it's be a quality-of-life improvement done on the ov side.
Hi Noboru,
I want to use the oviewer module for my application but I cannot get QuitSmall to work -- I set it to true but I notice two odd behaviors:
Test program below.
Passing to ov a file with a handful lines, or running "echo test | ./ov -F" yields the behavior I need, but how to achieve that same behavior when my application is an external user of oviewer?
Thanks in advance!
Eloy Paris.-
==========
package main
import (
"bytes"
"fmt"
"log"
"time"
"github.com/noborus/ov/oviewer"
)
func main() {
var b bytes.Buffer
for i := 0; i < 5; i++ {
b.WriteString(fmt.Sprintf("%d\n", i))
}
fmt.Println("Sleeping 3 seconds before calling NewRoot()")
time.Sleep(3 *time.Second)
ov, err := oviewer.NewRoot(&b)
if err != nil {
log.Fatal(err)
}
// oviewer.NewRoot() clears the screen; why?
ov.QuitSmall = true
time.Sleep(3 *time.Second)
if err := ov.Run(); err != nil {
log.Fatal(err)
}
if ov.IsWriteOriginal {
ov.WriteOriginal()
}
}
Hello,
I like your pager software! Very cool.
I'm replacing less with ov. I need to configure ov for similar keybindings to less, so I added the configuration file .ov.yaml
. I noticed that the program expects it to be in $HOME
directory.
I understand this is a common place for unix software to place files, but it is cleaner if software follows the XDG Base Directory Specification. The default path for configuration files is then indicated by $XDG_CONFIG_HOME
, the default value is $HOME/.config/
.
This way, users have control over where software configuration files are located, and the dotfiles won't clutter the home directory.
Will you consider switching the default path for the configuration file?
If you wish, I can open a PR for this.
best regards
I'm on the hunt for a new pager to replace less , mainly for man page paging. As it seams non of the pagers I found have incremental searching. Would it be too difficult to implement ?
It would be nice to have ov
available from the core tap https://github.com/Homebrew/homebrew-core
Hi Expert,
I have noticed OV is taking lot of terminal space when line number enabled. it would be good to surpasses the line number column width so when line number enable ov only take space as it required to save terminal width for other useful purpose. Thanks
Vim has the 'smartcase'
option which works as follows:
Override the 'ignorecase' option if the search pattern contains upper case characters. Only used when the search pattern is typed and 'ignorecase' option is on.
I use that option in Vim, so I would like to have it in ov
as well. It could be implemented as follows:
if config.SmartCaseSearch {
caseSensitive = searchInput.HasUpperCase()
} else {
caseSensitive = config.CaseSensitive
}
Would it be possible to detect or set the input parsing to process logfmt
style text and create the columns (using the keys as head) on the fly? Afaik the output gets re-rerendered
so it could be possible to deal with new keys that suddenly increase the number of columns. If this would be possible one would also probably want to have a filter to include/exclude columns base on the key names.
It would ease the use of ov if it would provide all the same keybindings as less. Currently only some of its keybindungs are supported. Currently unsupported are e.g. j
and k
for scrolling down and up or space
and ctrl-f
for pagewise scrolling.
In less
, there is the --jump-target=n
option which allows the position of the given search result to be offset. Its function is described in the less
man page: "...If any form of the -j option is used... forward searches (invoked with "n" or "N") begin at the line immediately after the target line, and repeated backward searches begin at the target line... For example, if '-j4' is used, the target line is the fourth line on the screen, so forward searches begin at the fifth line on the screen."
This feature is really useful when searching through the content being displayed on screen. Many times when I search for a term, I want to see the context that came before it along as what comes after. Thus, if the search term is scrolled to the vertical center of the screen (rather than the top), the user can see the lines that come both before and after the term. This is just one use-case for the less
flag mentioned above. I rely on this feature daily, and it is one of the only things keeping me from completely switching from less
to ov
.
Consider the following example searching for the term 'search' using less FILE_PATH
Currently, begin_left and end_right don't change active column. That is, suppose the first column is active, press Shift-End and the last column is displayed, but the active column is still the first one, then press left and nothing happens (counter-intuitively!). I expected that the last -1 column would be active.
Is it possible to change this behavior or introduce new commands which scroll to beginning/end of line and set first/last column to be active?
The help says:
-w, --wrap wrap mode (default true)
but I had trouble finding the way to disable wrap mode.
# NG
$ ov --wrap false sample.txt
# OK
$ ov --wrap=false sample.txt
If the help was something like this, it would be kinder:
-w, --wrap=[true|false] wrap mode (default true)
The last column is not fully displayed.
See that the value of the second column is truncated to the length of the first column.
$ ov --config ~/.config/ov/psql.yaml --view-mode psql sample.txt
General:
TabWidth: 4
Mode:
psql:
Header: 2
AlternateRows: false
ColumnMode: true
LineNumMode: false
WrapMode: false
ColumnDelimiter: "|"
like less'
&pattern * Display only matching lines.
This Issue is the next level of #28.
Many users are used to be able to use a count for keybindings. While this may be only nice-to-have (but still very handy) in most cases, it becomes very apparent with the g
keybinding.
It basically has the same functionality in ov as in less, but in ov it is quite cumbersome.
To jump to line 10 in less, one can type:
10g
In ov one has to type:
g10<enter>
Not much, as it is only 1 keystroke more, but since the order of the count and the commands keybinding is exchanged it is hard to use for people accustomed to less.
It gets even worse when trying to jump to the beginning of the file.
In less one can type:
g
by just omitting the count.
I ov it is still necessary to type:
1g<enter>
Therefore I think it would be a nice addition to support a count for commands as this can come in handy for most commands and makes ov much easier to use for previous less-users.
Less allows for --pattern
to prefill searches. This is helpful for navigating git diffs, and other common formats passed to a pager. Would be awesome if this could be supported.
Hi,
Just wanted to let you know that I made an AUR package for ov and you can find it here: https://aur.archlinux.org/packages/ov-bin
In case you want to add it to the README, feel free or LMK and I'll create a PR when I'll find some time.
BR,
Julian
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.