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

[Feature request] Add setting to enable maximum column for TSV hyghlighting #2915

Closed
jrom99 opened this issue Mar 25, 2024 · 2 comments
Closed
Labels
feature-request New feature or request

Comments

@jrom99
Copy link

jrom99 commented Mar 25, 2024

The following file

TSV file, with bat --wrap never notes.tsv:
image

Same file, with bat --wrap never --tabs 0 notes.tsv:
image

I'm not sure what is causing the misalignment bug, but my problem is that some columns data is a lot wider than their headers, and I'd like bat to have a setting to use the largest visible width for these, since setting --tabs to an arbitrary big value applies to all columns.

I tried using column -ts $'\t' notes.tsv | bat -l tsv to columnate the data, but then bat doesn't understand the file:

image

But column -ts $'\t' -o $'\t' notes.tsv | bat -l tsv --wrap never --tabs 0 seems to work, but I think it'd be better to have it as a setting.

System information

bat 0.23.0
GNOME Terminal 3.49.92 using VTE 0.74.0 +BIDI +GNUTLS +ICU +SYSTEMD
Ubuntu 23.10 (Gnome 45 on Wayland)

@jrom99 jrom99 added the feature-request New feature or request label Mar 25, 2024
@keith-hall
Copy link
Collaborator

Hi, thanks for sharing your feature request.

I tried using column -ts $'\t' notes.tsv | bat -l tsv to columnate the data, but then bat doesn't understand the file

That is expected, as there is no way for bat to know with a variable-space-separated file whether a field contains a space character or not and would highlight it wrongly/misleadingly.

But column -ts $'\t' -o $'\t' notes.tsv | bat -l tsv --wrap never --tabs 0 seems to work, but I think it'd be better to have it as a setting.

Nice solution. In my testing the --tabs 0 has no effect here, but maybe I'm missing something.
In terms of making a setting for it, well, bat reads the input one line at a time (especially when piping from stdin), so there is no way in advance for it to know the max width of each column. Indeed, the syntax highlighting engine wouldn't support it anyway. So I think your column pre-processing is the way to go. Now that we have $LESSOPEN support (#2444), perhaps that can also be utilized somehow - perhaps with a wrapper script - to "make it easier" than having to type the whole thing out each time you work with a tsv file?

@jrom99
Copy link
Author

jrom99 commented Mar 25, 2024

I'm not sure what $LESSOPEN does, but it seems to be defined as LESSOPEN=| /usr/bin/lesspipe %s on my computer. I didn't know that bat read one line at a time, thanks for the information, at the end I put this in my .bashrc:

tsv() {
  column -ts $'\t' -o $'\t' "$1" | bat -l tsv --wrap never --tabs 0 --file-name "$1"
}

The --file-name parameter is really useful!

@jrom99 jrom99 closed this as completed Mar 25, 2024
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