diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2023-08-05 16:09:02 +1000 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2023-08-05 16:09:02 +1000 |
commit | ec7e9f92283117eb0eeb7e4e16cd540f4e8cb2be (patch) | |
tree | 9913901f8205bbe3e41dd784815c751d4a397db9 | |
parent | ab5875c78fcd7fc2f0cdbc867dc84ef4331a5de3 (diff) |
Fix confirmation view sizing
The proper fix is to actually have these two functions share code,
or for views to be able to manage their own heights based on their contents.
But I want to get this out for the sake of a Lazygit Anniversary release.
-rw-r--r-- | pkg/gui/controllers/helpers/confirmation_helper.go | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/pkg/gui/controllers/helpers/confirmation_helper.go b/pkg/gui/controllers/helpers/confirmation_helper.go index fe18dd638..c920df39f 100644 --- a/pkg/gui/controllers/helpers/confirmation_helper.go +++ b/pkg/gui/controllers/helpers/confirmation_helper.go @@ -61,17 +61,45 @@ func (self *ConfirmationHelper) DeactivateConfirmationPrompt() { self.clearConfirmationViewKeyBindings() } +// Temporary hack: we're just duplicating the logic in `gocui.lineWrap` func getMessageHeight(wrap bool, message string, width int) int { - lines := strings.Split(message, "\n") + if !wrap { + return len(strings.Split(message, "\n")) + } + lineCount := 0 - // if we need to wrap, calculate height to fit content within view's width - if wrap { - for _, line := range lines { - lineCount += runewidth.StringWidth(line)/width + 1 + lines := strings.Split(message, "\n") + + for _, line := range lines { + n := 0 + lastWhitespaceIndex := -1 + for i, currChr := range line { + rw := runewidth.RuneWidth(currChr) + n += rw + + if n > width { + if currChr == ' ' { + n = 0 + } else if currChr == '-' { + n = rw + } else if lastWhitespaceIndex != -1 && lastWhitespaceIndex+1 != i { + if line[lastWhitespaceIndex] == '-' { + n = i - lastWhitespaceIndex + } else { + n = i - lastWhitespaceIndex + 1 + } + } else { + n = rw + } + lineCount++ + lastWhitespaceIndex = -1 + } else if currChr == ' ' || currChr == '-' { + lastWhitespaceIndex = i + } } - } else { - lineCount = len(lines) + lineCount++ } + return lineCount } |