1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-01-04 03:48:07 +02:00

use ptmx map so that we can have multiple ptmx's stored for resizing

This commit is contained in:
Jesse Duffield 2022-08-06 11:48:08 +10:00
parent 524bf83a4a
commit 54fb73080a
2 changed files with 16 additions and 18 deletions

View File

@ -90,7 +90,11 @@ type Gui struct {
waitForIntro sync.WaitGroup
fileWatcher *fileWatcher
viewBufferManagerMap map[string]*tasks.ViewBufferManager
stopChan chan struct{}
// holds a mapping of view names to ptmx's. This is for rendering command outputs
// from within a pty. The point of keeping track of them is so that if we re-size
// the window, we can tell the pty it needs to resize accordingly.
viewPtmxMap map[string]*os.File
stopChan chan struct{}
// when lazygit is opened outside a git directory we want to open to the most
// recent repo with the recent repos popup showing
@ -171,7 +175,6 @@ type GuiRepoState struct {
IsRefreshingFiles bool
Searching searchingState
Ptmx *os.File
StartupStage StartupStage // Allows us to not load everything at once
ContextManager ContextManager
@ -303,7 +306,6 @@ func (gui *Gui) resetState(startArgs types.StartArgs, reuseState bool) {
UserVerticalScrolling: false,
},
},
Ptmx: nil,
Modes: &types.Modes{
Filtering: filtering.New(startArgs.FilterPath),
CherryPicking: cherrypicking.New(),
@ -366,6 +368,7 @@ func NewGui(
Updater: updater,
statusManager: &statusManager{},
viewBufferManagerMap: map[string]*tasks.ViewBufferManager{},
viewPtmxMap: map[string]*os.File{},
showRecentRepos: showRecentRepos,
RepoPathStack: &utils.StringStack{},
RepoStateMap: map[Repo]*GuiRepoState{},

View File

@ -11,6 +11,7 @@ import (
"github.com/creack/pty"
"github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/utils"
)
func (gui *Gui) desiredPtySize() *pty.Winsize {
@ -23,18 +24,13 @@ func (gui *Gui) onResize() error {
gui.Mutexes.PtyMutex.Lock()
defer gui.Mutexes.PtyMutex.Unlock()
if gui.State.Ptmx == nil {
return nil
}
gui.Log.Warn("resizing")
// 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(gui.State.Ptmx, gui.desiredPtySize()); err != nil {
panic(err)
return err
for _, 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 {
return utils.WrapError(err)
}
}
return nil
@ -73,7 +69,7 @@ func (gui *Gui) newPtyTask(view *gocui.View, cmd *exec.Cmd, prefix string) error
}
gui.Mutexes.PtyMutex.Lock()
gui.State.Ptmx = ptmx
gui.viewPtmxMap[view.Name()] = ptmx
gui.Mutexes.PtyMutex.Unlock()
return cmd, ptmx
@ -82,8 +78,7 @@ func (gui *Gui) newPtyTask(view *gocui.View, cmd *exec.Cmd, prefix string) error
onClose := func() {
gui.Mutexes.PtyMutex.Lock()
ptmx.Close()
ptmx = nil
gui.State.Ptmx = nil
delete(gui.viewPtmxMap, view.Name())
gui.Mutexes.PtyMutex.Unlock()
}