summaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2024-06-12 16:52:27 +0200
committerStefan Haller <stefan@haller-berlin.de>2024-06-23 12:36:40 +0200
commitf98da780de98b464085e8608a03539ed239690be (patch)
tree813d33b48e67b98ab7bdc45d64556ed5ab773bb0 /pkg
parentc401f345302c96cb77b8c506ac74c6778d937e61 (diff)
Fix possible off-by-one error wrt PTY size
All PTYs were created with the size of the main view, on the assumption that main and secondary always have the same size. That's not true though; in horizontal split mode, the width of the two views can differ by one because of rounding, and when using a pager that draws a horizontal line across the width of the view, this is visible and looks very ugly.
Diffstat (limited to 'pkg')
-rw-r--r--pkg/gui/pty.go13
1 files changed, 7 insertions, 6 deletions
diff --git a/pkg/gui/pty.go b/pkg/gui/pty.go
index cf3176f75..969e1aada 100644
--- a/pkg/gui/pty.go
+++ b/pkg/gui/pty.go
@@ -15,8 +15,8 @@ import (
"github.com/samber/lo"
)
-func (gui *Gui) desiredPtySize() *pty.Winsize {
- width, height := gui.Views.Main.Size()
+func (gui *Gui) desiredPtySize(view *gocui.View) *pty.Winsize {
+ width, height := view.Size()
return &pty.Winsize{Cols: uint16(width), Rows: uint16(height)}
}
@@ -25,11 +25,12 @@ func (gui *Gui) onResize() error {
gui.Mutexes.PtyMutex.Lock()
defer gui.Mutexes.PtyMutex.Unlock()
- for _, ptmx := range gui.viewPtmxMap {
+ for viewName, ptmx := range gui.viewPtmxMap {
// TODO: handle resizing properly: we need to actually clear the main view
// and re-read the output from our pty. Or we could just re-run the original
// command from scratch
- if err := pty.Setsize(ptmx, gui.desiredPtySize()); err != nil {
+ view, _ := gui.g.View(viewName)
+ if err := pty.Setsize(ptmx, gui.desiredPtySize(view)); err != nil {
return utils.WrapError(err)
}
}
@@ -44,7 +45,7 @@ func (gui *Gui) onResize() error {
// pseudo-terminal meaning we'll get the behaviour we want from the underlying
// command.
func (gui *Gui) newPtyTask(view *gocui.View, cmd *exec.Cmd, prefix string) error {
- width, _ := gui.Views.Main.Size()
+ width, _ := view.Size()
pager := gui.git.Config.GetPager(width)
externalDiffCommand := gui.Config.GetUserConfig().Git.Paging.ExternalDiffCommand
@@ -69,7 +70,7 @@ func (gui *Gui) newPtyTask(view *gocui.View, cmd *exec.Cmd, prefix string) error
var ptmx *os.File
start := func() (*exec.Cmd, io.Reader) {
var err error
- ptmx, err = pty.StartWithSize(cmd, gui.desiredPtySize())
+ ptmx, err = pty.StartWithSize(cmd, gui.desiredPtySize(view))
if err != nil {
gui.c.Log.Error(err)
}