mirror of
https://github.com/jesseduffield/lazydocker.git
synced 2026-07-25 08:31:03 +00:00
support clicking on tabs
This commit is contained in:
parent
0e76f61359
commit
405bb85ed0
6 changed files with 89 additions and 12 deletions
4
Gopkg.lock
generated
4
Gopkg.lock
generated
|
|
@ -131,11 +131,11 @@
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
digest = "1:44d8be68f77843be5c779fcaf4793693a40ec96b83b5080a18bfd80123a4b2b2"
|
digest = "1:697738bf0065442016622def39cf22041c6f40df99d5315d845b0d528f96377f"
|
||||||
name = "github.com/jesseduffield/gocui"
|
name = "github.com/jesseduffield/gocui"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
pruneopts = "NUT"
|
pruneopts = "NUT"
|
||||||
revision = "d99ac1a5a23de099e34cb8723e51114bb2b44d23"
|
revision = "32197598edc52af42d76b8cba78ed788074b4647"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
|
|
|
||||||
|
|
@ -194,7 +194,7 @@ func GetDefaultConfig() UserConfig {
|
||||||
Gui: GuiConfig{
|
Gui: GuiConfig{
|
||||||
ScrollHeight: 2,
|
ScrollHeight: 2,
|
||||||
ScrollPastBottom: false,
|
ScrollPastBottom: false,
|
||||||
MouseEvents: false,
|
MouseEvents: true,
|
||||||
Theme: ThemeConfig{
|
Theme: ThemeConfig{
|
||||||
ActiveBorderColor: []string{"green", "bold"},
|
ActiveBorderColor: []string{"green", "bold"},
|
||||||
InactiveBorderColor: []string{"white"},
|
InactiveBorderColor: []string{"white"},
|
||||||
|
|
|
||||||
|
|
@ -414,5 +414,10 @@ func (gui *Gui) keybindings(g *gocui.Gui) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := g.SetTabClickBinding("main", gui.onMainTabClick); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,3 +31,29 @@ func (gui *Gui) autoScrollMain(g *gocui.Gui, v *gocui.View) error {
|
||||||
gui.getMainView().Autoscroll = true
|
gui.getMainView().Autoscroll = true
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (gui *Gui) onMainTabClick(tabIndex int) error {
|
||||||
|
gui.Log.Warn(tabIndex)
|
||||||
|
|
||||||
|
viewName := gui.currentViewName()
|
||||||
|
|
||||||
|
switch viewName {
|
||||||
|
case "services":
|
||||||
|
gui.State.Panels.Services.ContextIndex = tabIndex
|
||||||
|
return gui.handleServiceSelect(gui.g, gui.getServicesView())
|
||||||
|
case "containers":
|
||||||
|
gui.State.Panels.Containers.ContextIndex = tabIndex
|
||||||
|
return gui.handleContainerSelect(gui.g, gui.getContainersView())
|
||||||
|
case "images":
|
||||||
|
gui.State.Panels.Images.ContextIndex = tabIndex
|
||||||
|
return gui.handleImageSelect(gui.g, gui.getImagesView())
|
||||||
|
case "volumes":
|
||||||
|
gui.State.Panels.Volumes.ContextIndex = tabIndex
|
||||||
|
return gui.handleVolumeSelect(gui.g, gui.getVolumesView())
|
||||||
|
case "status":
|
||||||
|
gui.State.Panels.Status.ContextIndex = tabIndex
|
||||||
|
return gui.handleStatusSelect(gui.g, gui.getStatusView())
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
||||||
47
vendor/github.com/jesseduffield/gocui/gui.go
generated
vendored
47
vendor/github.com/jesseduffield/gocui/gui.go
generated
vendored
|
|
@ -39,18 +39,26 @@ const (
|
||||||
Output216 = OutputMode(termbox.Output216)
|
Output216 = OutputMode(termbox.Output216)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type tabClickHandler func(int) error
|
||||||
|
|
||||||
|
type tabClickBinding struct {
|
||||||
|
viewName string
|
||||||
|
handler tabClickHandler
|
||||||
|
}
|
||||||
|
|
||||||
// Gui represents the whole User Interface, including the views, layouts
|
// Gui represents the whole User Interface, including the views, layouts
|
||||||
// and keybindings.
|
// and keybindings.
|
||||||
type Gui struct {
|
type Gui struct {
|
||||||
tbEvents chan termbox.Event
|
tbEvents chan termbox.Event
|
||||||
userEvents chan userEvent
|
userEvents chan userEvent
|
||||||
views []*View
|
views []*View
|
||||||
currentView *View
|
currentView *View
|
||||||
managers []Manager
|
managers []Manager
|
||||||
keybindings []*keybinding
|
keybindings []*keybinding
|
||||||
maxX, maxY int
|
tabClickBindings []*tabClickBinding
|
||||||
outputMode OutputMode
|
maxX, maxY int
|
||||||
stop chan struct{}
|
outputMode OutputMode
|
||||||
|
stop chan struct{}
|
||||||
|
|
||||||
// BgColor and FgColor allow to configure the background and foreground
|
// BgColor and FgColor allow to configure the background and foreground
|
||||||
// colors of the GUI.
|
// colors of the GUI.
|
||||||
|
|
@ -325,6 +333,16 @@ func (g *Gui) DeleteKeybindings(viewname string) {
|
||||||
g.keybindings = s
|
g.keybindings = s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetTabClickBinding sets a binding for a tab click event
|
||||||
|
func (g *Gui) SetTabClickBinding(viewName string, handler tabClickHandler) error {
|
||||||
|
g.tabClickBindings = append(g.tabClickBindings, &tabClickBinding{
|
||||||
|
viewName: viewName,
|
||||||
|
handler: handler,
|
||||||
|
})
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// getKey takes an empty interface with a key and returns the corresponding
|
// getKey takes an empty interface with a key and returns the corresponding
|
||||||
// typed Key or rune.
|
// typed Key or rune.
|
||||||
func getKey(key interface{}) (Key, rune, error) {
|
func getKey(key interface{}) (Key, rune, error) {
|
||||||
|
|
@ -743,6 +761,17 @@ func (g *Gui) onKey(ev *termbox.Event) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
if v.Frame && my == v.y0 {
|
||||||
|
if len(v.Tabs) > 0 {
|
||||||
|
tabIndex := v.GetClickedTabIndex(mx - v.x0)
|
||||||
|
|
||||||
|
for _, binding := range g.tabClickBindings {
|
||||||
|
if binding.viewName == v.Name() {
|
||||||
|
return binding.handler(tabIndex)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if err := v.SetCursor(mx-v.x0-1, my-v.y0-1); err != nil {
|
if err := v.SetCursor(mx-v.x0-1, my-v.y0-1); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
17
vendor/github.com/jesseduffield/gocui/view.go
generated
vendored
17
vendor/github.com/jesseduffield/gocui/view.go
generated
vendored
|
|
@ -627,3 +627,20 @@ func Loader() cell {
|
||||||
func (v *View) IsTainted() bool {
|
func (v *View) IsTainted() bool {
|
||||||
return v.tainted
|
return v.tainted
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetClickedTabIndex tells us which tab was clicked
|
||||||
|
func (v *View) GetClickedTabIndex(x int) int {
|
||||||
|
if len(v.Tabs) <= 1 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
charIndex := 0
|
||||||
|
for i, tab := range v.Tabs {
|
||||||
|
charIndex += len(tab + " - ")
|
||||||
|
if x < charIndex {
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue