Skip to content
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

Allow --line-range to count from the back of the file to act similar to "tail" #2944

Open
PlasmaHH opened this issue Apr 23, 2024 · 1 comment
Labels
feature-request New feature or request

Comments

@PlasmaHH
Copy link

For python users it would probably best if -r acts somewhat like the python syntax...

So for negative numbers it could count from backwards, so "tail -n 5" would be "bat -r -5:" or so and then one could display the first and last portion of a file like "bat -r :5 -r -5:"

@PlasmaHH PlasmaHH added the feature-request New feature or request label Apr 23, 2024
@ajesipow
Copy link

ajesipow commented May 18, 2024

I would also welcome such a feature and would be happy to contribute a PR for it.

But I think it's not a trivial change and would likely have performance implications that may not be desired.

I see two options:

  1. Doing a first quick pass on the input to determine the max line count, then calculating the absolute values for LineRange from the negative relative line number accordingly. A second pass would handle lines just as today. No buffering needed.

  2. Buffering the input for multiple lines in Controller::print_file_ranges instead of the single-line line_buffer. The buffer size would need to be equivalent to how far from the end of the input the user wants the output (which could be very large of course - resulting in potentially unexpected memory usage). LineRange would also need adapting to represent the relative negative value somehow and this would most likely be a breaking change.

Also, today a range with a relative negative value such as 10:-3 is already valid and translated into an absolute line range of 7:10. With the feature discussed here, new users may expect this to translate to "from line 10 to the 3rd to last line" instead.

Alternatively, to not break the existing logic, relative negative numbers may only occur in an open-ended range, i.e. -3: or :-3.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature-request New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants