summaryrefslogtreecommitdiffstats
path: root/pkg/gui/keybindings.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2022-01-28 20:44:36 +1100
committerJesse Duffield <jessedduffield@gmail.com>2022-03-17 19:13:40 +1100
commita90b6efded49abcfa2516db794d7875b0396f558 (patch)
treead9c3738830437064ada223f0978dab1d726b479 /pkg/gui/keybindings.go
parentfa8571e1f4c349e401542285ea238acdbd9d17ec (diff)
start refactoring gui
Diffstat (limited to 'pkg/gui/keybindings.go')
-rw-r--r--pkg/gui/keybindings.go102
1 files changed, 26 insertions, 76 deletions
diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go
index fa2e0e49b..644e4560b 100644
--- a/pkg/gui/keybindings.go
+++ b/pkg/gui/keybindings.go
@@ -9,28 +9,9 @@ import (
"github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/constants"
+ "github.com/jesseduffield/lazygit/pkg/gui/types"
)
-// Binding - a keybinding mapping a key and modifier to a handler. The keypress
-// is only handled if the given view has focus, or handled globally if the view
-// is ""
-type Binding struct {
- ViewName string
- Contexts []string
- Handler func() error
- Key interface{} // FIXME: find out how to get `gocui.Key | rune`
- Modifier gocui.Modifier
- Description string
- Alternative string
- Tag string // e.g. 'navigation'. Used for grouping things in the cheatsheet
- OpensMenu bool
-}
-
-// GetDisplayStrings returns the display string of a file
-func (b *Binding) GetDisplayStrings(isFocused bool) []string {
- return []string{GetKeyDisplay(b.Key), b.Description}
-}
-
var keyMapReversed = map[gocui.Key]string{
gocui.KeyF1: "f1",
gocui.KeyF2: "f2",
@@ -203,10 +184,10 @@ func (gui *Gui) getKey(key string) interface{} {
}
// GetInitialKeybindings is a function.
-func (gui *Gui) GetInitialKeybindings() []*Binding {
+func (gui *Gui) GetInitialKeybindings() []*types.Binding {
config := gui.UserConfig.Keybinding
- bindings := []*Binding{
+ bindings := []*types.Binding{
{
ViewName: "",
Key: gui.getKey(config.Universal.Quit),
@@ -1715,57 +1696,6 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
},
{
ViewName: "files",
- Contexts: []string{string(SUBMODULES_CONTEXT_KEY)},
- Key: gui.getKey(config.Universal.GoInto),
- Handler: gui.forSubmodule(gui.handleSubmoduleEnter),
- Description: gui.Tr.LcEnterSubmodule,
- },
- {
- ViewName: "files",
- Contexts: []string{string(SUBMODULES_CONTEXT_KEY)},
- Key: gui.getKey(config.Universal.Remove),
- Handler: gui.forSubmodule(gui.removeSubmodule),
- Description: gui.Tr.LcRemoveSubmodule,
- OpensMenu: true,
- },
- {
- ViewName: "files",
- Contexts: []string{string(SUBMODULES_CONTEXT_KEY)},
- Key: gui.getKey(config.Submodules.Update),
- Handler: gui.forSubmodule(gui.handleUpdateSubmodule),
- Description: gui.Tr.LcSubmoduleUpdate,
- },
- {
- ViewName: "files",
- Contexts: []string{string(SUBMODULES_CONTEXT_KEY)},
- Key: gui.getKey(config.Universal.New),
- Handler: gui.handleAddSubmodule,
- Description: gui.Tr.LcAddSubmodule,
- },
- {
- ViewName: "files",
- Contexts: []string{string(SUBMODULES_CONTEXT_KEY)},
- Key: gui.getKey(config.Universal.Edit),
- Handler: gui.forSubmodule(gui.handleEditSubmoduleUrl),
- Description: gui.Tr.LcEditSubmoduleUrl,
- },
- {
- ViewName: "files",
- Contexts: []string{string(SUBMODULES_CONTEXT_KEY)},
- Key: gui.getKey(config.Submodules.Init),
- Handler: gui.forSubmodule(gui.handleSubmoduleInit),
- Description: gui.Tr.LcInitSubmodule,
- },
- {
- ViewName: "files",
- Contexts: []string{string(SUBMODULES_CONTEXT_KEY)},
- Key: gui.getKey(config.Submodules.BulkMenu),
- Handler: gui.handleBulkSubmoduleActionsMenu,
- Description: gui.Tr.LcViewBulkSubmoduleOptions,
- OpensMenu: true,
- },
- {
- ViewName: "files",
Contexts: []string{string(FILES_CONTEXT_KEY)},
Key: gui.getKey(config.Universal.ToggleWhitespaceInDiffView),
Handler: gui.toggleWhitespaceInDiffView,
@@ -1841,8 +1771,28 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
},
}
+ type ContextKeybindings struct {
+ contextKey ContextKey
+ viewName string
+ bindings []*types.Binding
+ }
+
+ for _, contextKeybindings := range []ContextKeybindings{
+ {
+ contextKey: SUBMODULES_CONTEXT_KEY,
+ viewName: "files",
+ bindings: gui.Controllers.Submodules.Keybindings(gui.getKey, config),
+ },
+ } {
+ for _, binding := range contextKeybindings.bindings {
+ binding.Contexts = []string{string(contextKeybindings.contextKey)}
+ binding.ViewName = contextKeybindings.viewName
+ bindings = append(bindings, binding)
+ }
+ }
+
for _, viewName := range []string{"status", "branches", "files", "commits", "commitFiles", "stash", "menu"} {
- bindings = append(bindings, []*Binding{
+ bindings = append(bindings, []*types.Binding{
{ViewName: viewName, Key: gui.getKey(config.Universal.PrevBlock), Modifier: gocui.ModNone, Handler: gui.previousSideWindow},
{ViewName: viewName, Key: gui.getKey(config.Universal.NextBlock), Modifier: gocui.ModNone, Handler: gui.nextSideWindow},
{ViewName: viewName, Key: gui.getKey(config.Universal.PrevBlockAlt), Modifier: gocui.ModNone, Handler: gui.previousSideWindow},
@@ -1859,7 +1809,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
log.Fatal("Jump to block keybindings cannot be set. Exactly 5 keybindings must be supplied.")
} else {
for i, window := range windows {
- bindings = append(bindings, &Binding{
+ bindings = append(bindings, &types.Binding{
ViewName: "",
Key: gui.getKey(config.Universal.JumpToBlock[i]),
Modifier: gocui.ModNone,
@@ -1868,7 +1818,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
}
for viewName := range gui.State.Contexts.initialViewTabContextMap() {
- bindings = append(bindings, []*Binding{
+ bindings = append(bindings, []*types.Binding{
{
ViewName: viewName,
Key: gui.getKey(config.Universal.NextTab),