diff --git a/go.mod b/go.mod index ebfcb92..c1a3594 100644 --- a/go.mod +++ b/go.mod @@ -3,5 +3,9 @@ module github.com/viktomas/godu require ( github.com/gdamore/tcell v1.1.1 github.com/gosuri/uilive v0.0.0-20170323041506-ac356e6e42cd + github.com/mattn/go-isatty v0.0.11 // indirect + github.com/mattn/go-runewidth v0.0.4 github.com/stretchr/testify v1.3.0 ) + +go 1.13 diff --git a/go.sum b/go.sum index 23c1232..2cb564e 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ github.com/gosuri/uilive v0.0.0-20170323041506-ac356e6e42cd h1:1e+0Z+T4t1mKL5xxv github.com/gosuri/uilive v0.0.0-20170323041506-ac356e6e42cd/go.mod h1:qkLSc0A5EXSP6B04TrN4oQoxqFI7A8XvoXSlJi8cwk8= github.com/lucasb-eyer/go-colorful v0.0.0-20181028223441-12d3b2882a08 h1:5MnxBC15uMxFv5FY/J/8vzyaBiArCOkMdFT9Jsw78iY= github.com/lucasb-eyer/go-colorful v0.0.0-20181028223441-12d3b2882a08/go.mod h1:NXg0ArsFk0Y01623LgUqoqcouGDB+PwCCQlrwrG6xJ4= +github.com/mattn/go-isatty v0.0.11 h1:FxPOTFNqGkuDUGi3H/qkUbQO4ZiBa2brKq5r0l8TGeM= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -16,6 +18,8 @@ github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0 h1:FVCohIoYO7IJoDDVpV2pdq7SgrMH6wHnuTyrdrxJNoY= diff --git a/interactive/reporter.go b/interactive/reporter.go index 7bfc03d..0bb4293 100644 --- a/interactive/reporter.go +++ b/interactive/reporter.go @@ -3,6 +3,7 @@ package interactive import ( "fmt" + "github.com/mattn/go-runewidth" "github.com/viktomas/godu/core" ) @@ -63,7 +64,7 @@ func ReportFolder(folder *core.File, markedFiles map[*core.File]struct{}) []Line marking = "*" } report[index] = Line{ - Text: []rune(fmt.Sprintf("%s%s %s", marking, formatBytes(file.Size), name)), + Text: stringToRune(fmt.Sprintf("%s%s %s", marking, formatBytes(file.Size), name)), IsMarked: isMarked, } } @@ -97,3 +98,15 @@ func formatBytes(bytesInt int64) string { } return fmt.Sprintf("%4.0f%s", amount, unit) } + +// leave space for unicode string which may occupy more than 1 space +func stringToRune(input string) []rune { + output := []rune{} + for _, ch := range []rune(input) { + output = append(output, ch) + for i := 1; i < runewidth.RuneWidth(ch); i++ { + output = append(output, ' ') + } + } + return output +}