1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2024-12-14 11:23:09 +02:00
lazygit/pkg/gui/gui_driver.go

105 lines
2.4 KiB
Go
Raw Normal View History

2022-08-09 12:27:44 +02:00
package gui
import (
2022-12-24 07:46:01 +02:00
"fmt"
"strings"
2022-08-09 12:27:44 +02:00
"time"
"github.com/gdamore/tcell/v2"
"github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/commands/models"
"github.com/jesseduffield/lazygit/pkg/config"
"github.com/jesseduffield/lazygit/pkg/gui/keybindings"
"github.com/jesseduffield/lazygit/pkg/gui/types"
integrationTypes "github.com/jesseduffield/lazygit/pkg/integration/types"
2022-08-09 12:27:44 +02:00
)
// this gives our integration test a way of interacting with the gui for sending keypresses
// and reading state.
type GuiDriver struct {
2022-08-09 12:27:44 +02:00
gui *Gui
}
var _ integrationTypes.GuiDriver = &GuiDriver{}
2022-08-09 12:27:44 +02:00
func (self *GuiDriver) PressKey(keyStr string) {
2022-08-09 12:27:44 +02:00
key := keybindings.GetKey(keyStr)
var r rune
var tcellKey tcell.Key
switch v := key.(type) {
case rune:
r = v
tcellKey = tcell.KeyRune
case gocui.Key:
tcellKey = tcell.Key(v)
}
self.gui.g.ReplayedEvents.Keys <- gocui.NewTcellKeyEventWrapper(
tcell.NewEventKey(tcellKey, r, tcell.ModNone),
0,
)
}
func (self *GuiDriver) Keys() config.KeybindingConfig {
2022-08-09 12:27:44 +02:00
return self.gui.Config.GetUserConfig().Keybinding
}
func (self *GuiDriver) CurrentContext() types.Context {
2022-08-09 12:27:44 +02:00
return self.gui.c.CurrentContext()
}
func (self *GuiDriver) ContextForView(viewName string) types.Context {
2023-03-21 11:57:52 +02:00
context, ok := self.gui.helpers.View.ContextForView(viewName)
if !ok {
return nil
}
return context
}
func (self *GuiDriver) Fail(message string) {
currentView := self.gui.g.CurrentView()
fullMessage := fmt.Sprintf(
"%s\nFinal Lazygit state:\n%s\nUpon failure, focused view was '%s'.\nLog:\n%s", message,
self.gui.g.Snapshot(),
currentView.Name(),
strings.Join(self.gui.CmdLog, "\n"),
)
2022-08-09 12:27:44 +02:00
self.gui.g.Close()
// need to give the gui time to close
time.Sleep(time.Millisecond * 100)
panic(fullMessage)
2022-08-09 12:27:44 +02:00
}
// logs to the normal place that you log to i.e. viewable with `lazygit --logs`
func (self *GuiDriver) Log(message string) {
2022-08-09 12:27:44 +02:00
self.gui.c.Log.Warn(message)
}
// logs in the actual UI (in the commands panel)
func (self *GuiDriver) LogUI(message string) {
2022-08-09 12:27:44 +02:00
self.gui.c.LogAction(message)
}
func (self *GuiDriver) CheckedOutRef() *models.Branch {
2022-08-09 12:27:44 +02:00
return self.gui.helpers.Refs.GetCheckedOutRef()
}
2022-08-14 12:13:39 +02:00
func (self *GuiDriver) MainView() *gocui.View {
return self.gui.mainView()
}
func (self *GuiDriver) SecondaryView() *gocui.View {
return self.gui.secondaryView()
}
2022-08-22 11:34:02 +02:00
func (self *GuiDriver) View(viewName string) *gocui.View {
view, err := self.gui.g.View(viewName)
if err != nil {
panic(err)
}
return view
}