-
Notifications
You must be signed in to change notification settings - Fork 3
Implement terminal_pager for log subcommand #46
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
// Unfortunately need to access _internal namespace of termcolor to check if a tty. | ||
if (!m_grabbed && termcolor::_internal::is_atty(std::cout)) | ||
{ | ||
// Should we do anything with cerr? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should probably capture std::cerr
too as by default (at least on some platforms) it outputs to the same place as std::cout
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We do need a strategy for what to do with cerr
, but I don't know what is best yet.
Currently cerr
will be written to the normal terminal buffer, so it won't be seen whilst the alternative buffer is being used but it reappears when the alternative buffer is disabled. This is perhaps not a good solution, but I don't think it is too bad for a first implementation. Some other options:
- Capture it and sent it to the same place as
cout
, it will appear in the output flow in the alternative buffer. We'd probably need to colour it to make is easily visible as it could be anywhere. - Capture it and display it at the bottom of the alternative buffer for better visibility, but then there might be quite a lot of information displayed.
- Capture it and if anything at all is written to it we could avoid using the pager at all, just display the errors in the normal terminal flow.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have a preference for option 1, but I think we can discuss it in a dedicated issue and solve it in a dedicated PR so that it does not block this one, WDYT?
The start of a terminal pager for various
git2cpp
commands, initially enabled forlog
subcommand. Fixes #45.pager.mp4
Supports the following keys to navigate:
If cout is not to a tty or the output is short enough to fit within a single page the pager is not used.
Still to do, probably in separate PRs:
To add to other subcommands, see how it is used in
log_subcommand.cpp
. Theterminal_pager
constructor does the required initialisation, and it displays on theshow
call. I suppose I could have done theshow
automatically in the destructor but that didn't seem a good idea.Awaiting a new release of JupyterLite before we can easily try it in the terminal.