lipgloss icon indicating copy to clipboard operation
lipgloss copied to clipboard

Table width doesn't count the column borders

Open AdrienHorgnies opened this issue 2 months ago • 2 comments

Describe the bug

When the width of the content of a table is less than or equal to the maximum allowed width of the table, but the same number incremented by the number of column borders is greater than the maximum allowed width of the table, the table doesn't wrap nor truncate its content.

In short, the table doesn't count the borders when it computes its width.

Setup Please complete the following information along with version numbers, if applicable.

  • OS: Ubuntu
  • Shell: Bash
  • Terminal Emulator: kitty
  • Terminal Multiplexer: N/A
  • Locale: en_US.UTF-8

go.mod:

module git.fita.dev/lipgloss-table-width-issue

go 1.24.5

require github.com/charmbracelet/lipgloss v1.1.0

require (
        github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
        github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
        github.com/charmbracelet/x/ansi v0.8.0 // indirect
        github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect
        github.com/charmbracelet/x/term v0.2.1 // indirect
        github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
        github.com/mattn/go-isatty v0.0.20 // indirect
        github.com/mattn/go-runewidth v0.0.16 // indirect
        github.com/muesli/termenv v0.16.0 // indirect
        github.com/rivo/uniseg v0.4.7 // indirect
        github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
        golang.org/x/sys v0.30.0 // indirect
)

To Reproduce Steps to reproduce the behavior: Create a table with a single cell and a width of 10, insert a single row with ten characters.

Source Code

package main

import (
        "fmt"
        "os"
        "strconv"

        "github.com/charmbracelet/lipgloss/table"
)

func main() {
        wrapped, _ := strconv.ParseBool(os.Args[1])
        width, _ := strconv.Atoi(os.Args[2])
        t := table.New().Wrap(wrapped).Width(width).Row("0123456789")
        fmt.Println(t)
}

Expected behavior Cell content should be wrapped/truncated so that the table doesn't exceed its width while still showing its borders.

Screenshots Image

Additional context Not required

AdrienHorgnies avatar Oct 07 '25 14:10 AdrienHorgnies

I believe I have found a fix with cd71ba61fd5263da22b25f58997a2ad9fe77a1b8. See:

Image

AdrienHorgnies avatar Oct 07 '25 16:10 AdrienHorgnies

Thanks again for flagging this. Please follow #567 for progress.

meowgorithm avatar Oct 08 '25 17:10 meowgorithm