blob: 6f026fe73370b0be071f7d1f8a66367ee8a51866 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
package types
import (
"github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/config"
)
type ContextKind int
const (
SIDE_CONTEXT ContextKind = iota
MAIN_CONTEXT
TEMPORARY_POPUP
PERSISTENT_POPUP
EXTRAS_CONTEXT
// only used by the one global context
GLOBAL_CONTEXT
)
type ParentContexter interface {
SetParentContext(Context)
// we return a bool here to tell us whether or not the returned value just wraps a nil
GetParentContext() (Context, bool)
}
type IBaseContext interface {
HasKeybindings
ParentContexter
GetKind() ContextKind
GetViewName() string
GetWindowName() string
SetWindowName(string)
GetKey() ContextKey
IsFocusable() bool
// if a context is transient, then it only appears via some keybinding on another
// context. Until we add support for having multiple of the same context, no two
// of the same transient context can appear at once meaning one might be 'stolen'
// from another window.
IsTransient() bool
// returns the desired title for the view upon activation. If there is no desired title (returns empty string), then
// no title will be set
Title() string
GetOptionsMap() map[string]string
AddKeybindingsFn(KeybindingsFn)
AddMouseKeybindingsFn(MouseKeybindingsFn)
// This is a bit of a hack at the moment: we currently only set an onclick function so that
// our list controller can come along and wrap it in a list-specific click handler.
// We'll need to think of a better way to do this.
AddOnClickFn(func() error)
}
type Context interface {
IBaseContext
HandleFocus(opts ...OnFocusOpts) error
HandleFocusLost() error
HandleRender() error
HandleRenderToMain() error
}
type IListContext interface {
Context
GetSelectedItemId() string
GetList() IList
OnSearchSelect(selectedLineIdx int) error
FocusLine()
GetViewTrait() IViewTrait
}
type IViewTrait interface {
FocusPoint(yIdx int)
SetViewPortContent(content string)
SetContent(content string)
SetFooter(value string)
SetOriginX(value int)
ViewPortYBounds() (int, int)
ScrollLeft()
ScrollRight()
PageDelta() int
SelectedLineIdx() int
}
type OnFocusOpts struct {
ClickedViewName string
ClickedViewLineIdx int
}
type ContextKey string
type KeybindingsOpts struct {
GetKey func(key string) Key
Config config.KeybindingConfig
Guards KeybindingGuards
}
type (
KeybindingsFn func(opts KeybindingsOpts) []*Binding
MouseKeybindingsFn func(opts KeybindingsOpts) []*gocui.ViewMouseBinding
)
type HasKeybindings interface {
GetKeybindings(opts KeybindingsOpts) []*Binding
GetMouseKeybindings(opts KeybindingsOpts) []*gocui.ViewMouseBinding
GetOnClick() func() error
}
type IController interface {
HasKeybindings
Context() Context
}
type IList interface {
IListCursor
Len() int
}
type IListCursor interface {
GetSelectedLineIdx() int
SetSelectedLineIdx(value int)
MoveSelectedLine(delta int)
RefreshSelectedIdx()
}
type IListPanelState interface {
SetSelectedLineIdx(int)
GetSelectedLineIdx() int
}
type ListItem interface {
// ID is a SHA when the item is a commit, a filename when the item is a file, 'stash@{4}' when it's a stash entry, 'my_branch' when it's a branch
ID() string
// Description is something we would show in a message e.g. '123as14: push blah' for a commit
Description() string
}
|