wip
This commit is contained in:
parent
348e88e70b
commit
63332d4042
@ -3,7 +3,6 @@ package ui
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/fatih/color"
|
||||
"github.com/jroimartin/gocui"
|
||||
)
|
||||
|
||||
@ -39,7 +38,7 @@ func (view *CommandView) Setup(v *gocui.View) error {
|
||||
view.view = v
|
||||
view.view.Frame = false
|
||||
view.view.BgColor = gocui.ColorDefault + gocui.AttrReverse
|
||||
|
||||
view.view.Editable = true
|
||||
// set keybindings
|
||||
// if err := view.gui.SetKeybinding(view.Name, gocui.KeyArrowDown, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.CursorDown() }); err != nil {
|
||||
// return err
|
||||
@ -76,10 +75,7 @@ func (i *CommandView) Edit(v *gocui.View, key gocui.Key, ch rune, mod gocui.Modi
|
||||
}
|
||||
|
||||
func (view *CommandView) KeyHelp() string {
|
||||
control := color.New(color.Bold).SprintFunc()
|
||||
return control("[^C]") + ": Quit " +
|
||||
control("[^Space]") + ": Switch View "
|
||||
|
||||
return "Type string to filter"
|
||||
}
|
||||
|
||||
func (view *CommandView) Render() error {
|
||||
|
@ -3,6 +3,7 @@ package ui
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"regexp"
|
||||
|
||||
"strings"
|
||||
|
||||
@ -141,12 +142,26 @@ func (view *FileTreeView) getAbsPositionNode() (node *filetree.FileNode) {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
evaluator = func(curNode *filetree.FileNode) bool {
|
||||
return !curNode.Parent.Data.ViewInfo.Collapsed && !curNode.Data.ViewInfo.Hidden
|
||||
var filterBytes []byte
|
||||
var filterRegex *regexp.Regexp
|
||||
read, err := Views.Command.view.Read(filterBytes)
|
||||
if read > 0 && err == nil {
|
||||
regex, err := regexp.Compile(string(filterBytes))
|
||||
if err == nil {
|
||||
filterRegex = regex
|
||||
}
|
||||
}
|
||||
|
||||
err := view.ModelTree.VisitDepthParentFirst(visiter, evaluator)
|
||||
evaluator = func(curNode *filetree.FileNode) bool {
|
||||
regexMatch := true
|
||||
if filterRegex != nil {
|
||||
match := filterRegex.Find([]byte(curNode.Path()))
|
||||
regexMatch = match != nil
|
||||
}
|
||||
return !curNode.Parent.Data.ViewInfo.Collapsed && !curNode.Data.ViewInfo.Hidden && regexMatch
|
||||
}
|
||||
|
||||
err = view.ModelTree.VisitDepthParentFirst(visiter, evaluator)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -170,10 +185,33 @@ func (view *FileTreeView) toggleShowDiffType(diffType filetree.DiffType) error {
|
||||
return view.Render()
|
||||
}
|
||||
|
||||
func filterRegex() *regexp.Regexp {
|
||||
if Views.Command == nil || Views.Command.view == nil {
|
||||
return nil
|
||||
}
|
||||
var filterBytes []byte
|
||||
read, err := Views.Command.view.Read(filterBytes)
|
||||
if read > 0 && err == nil {
|
||||
regex, err := regexp.Compile(string(filterBytes))
|
||||
if err == nil {
|
||||
return regex
|
||||
}
|
||||
}
|
||||
if read > 0 && err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (view *FileTreeView) updateViewTree() {
|
||||
regex := filterRegex()
|
||||
// keep the view selection in parity with the current DiffType selection
|
||||
view.ModelTree.VisitDepthChildFirst(func(node *filetree.FileNode) error {
|
||||
node.Data.ViewInfo.Hidden = view.HiddenDiffTypes[node.Data.DiffType]
|
||||
if regex != nil {
|
||||
match := regex.Find([]byte(node.Path()))
|
||||
node.Data.ViewInfo.Hidden = match != nil
|
||||
}
|
||||
return nil
|
||||
}, nil)
|
||||
|
||||
|
17
ui/ui.go
17
ui/ui.go
@ -42,6 +42,18 @@ func toggleView(g *gocui.Gui, v *gocui.View) error {
|
||||
return err
|
||||
}
|
||||
|
||||
func focusFilterView(g *gocui.Gui, v *gocui.View) error {
|
||||
_, err := g.SetCurrentView(Views.Command.Name)
|
||||
Render()
|
||||
return err
|
||||
}
|
||||
|
||||
func returnToTreeView(g *gocui.Gui, v *gocui.View) error {
|
||||
_, err := g.SetCurrentView(Views.Tree.Name)
|
||||
Render()
|
||||
return err
|
||||
}
|
||||
|
||||
func CursorDown(g *gocui.Gui, v *gocui.View) error {
|
||||
cx, cy := v.Cursor()
|
||||
|
||||
@ -90,7 +102,10 @@ func keybindings(g *gocui.Gui) error {
|
||||
if err := g.SetKeybinding("main", gocui.KeyCtrlSpace, gocui.ModNone, toggleView); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := g.SetKeybinding("command", gocui.KeyCtrlSlash, gocui.ModNone, toggleView); err != nil {
|
||||
if err := g.SetKeybinding("", gocui.KeyCtrlSlash, gocui.ModNone, focusFilterView); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := g.SetKeybinding("command", gocui.KeyEnter, gocui.ModNone, returnToTreeView); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user