mirror of
				https://github.com/jesseduffield/lazygit.git
				synced 2025-10-30 23:57:43 +02:00 
			
		
		
		
	use ptmx map so that we can have multiple ptmx's stored for resizing
This commit is contained in:
		| @@ -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{}, | ||||
|   | ||||
| @@ -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() | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user