summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2023-08-05 16:09:02 +1000
committerJesse Duffield <jessedduffield@gmail.com>2023-08-05 16:09:02 +1000
commitec7e9f92283117eb0eeb7e4e16cd540f4e8cb2be (patch)
tree9913901f8205bbe3e41dd784815c751d4a397db9
parentab5875c78fcd7fc2f0cdbc867dc84ef4331a5de3 (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.go42
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
}