From 348e88e70bb4bba614feeb33534de901ca3a3b9e Mon Sep 17 00:00:00 2001 From: Will Murphy Date: Sat, 23 Jun 2018 19:31:57 -0400 Subject: [PATCH 1/7] start adding search bar --- ui/commandview.go | 94 ++++++++++++++++++++++++++++++++++++++++++++++ ui/filetreeview.go | 19 ++++++---- ui/statusview.go | 10 ++--- ui/ui.go | 26 ++++++++++--- 4 files changed, 130 insertions(+), 19 deletions(-) create mode 100644 ui/commandview.go diff --git a/ui/commandview.go b/ui/commandview.go new file mode 100644 index 0000000..55d21ef --- /dev/null +++ b/ui/commandview.go @@ -0,0 +1,94 @@ +package ui + +import ( + "fmt" + + "github.com/fatih/color" + "github.com/jroimartin/gocui" +) + +// with special thanks to https://gist.github.com/jroimartin/3b2e943a3811d795e0718b4a95b89bec + +type CommandView struct { + Name string + gui *gocui.Gui + view *gocui.View + maxLength int +} + +type Input struct { + name string + x, y int + w int + maxLength int +} + +func NewCommandView(name string, gui *gocui.Gui) (commandview *CommandView) { + commandview = new(CommandView) + + // populate main fields + commandview.Name = name + commandview.gui = gui + + return commandview +} + +func (view *CommandView) Setup(v *gocui.View) error { + + // set view options + view.view = v + view.view.Frame = false + view.view.BgColor = gocui.ColorDefault + gocui.AttrReverse + + // 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 + // } + // if err := view.gui.SetKeybinding(view.Name, gocui.KeyArrowUp, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.CursorUp() }); err != nil { + // return err + // } + + view.Render() + + return nil +} + +func (view *CommandView) CursorDown() error { + return nil +} + +func (view *CommandView) CursorUp() error { + return nil +} + +func (i *CommandView) Edit(v *gocui.View, key gocui.Key, ch rune, mod gocui.Modifier) { + cx, _ := v.Cursor() + ox, _ := v.Origin() + limit := ox+cx+1 > i.maxLength + switch { + case ch != 0 && mod == 0 && !limit: + v.EditWrite(ch) + case key == gocui.KeySpace && !limit: + v.EditWrite(' ') + case key == gocui.KeyBackspace || key == gocui.KeyBackspace2: + v.EditDelete(true) + } +} + +func (view *CommandView) KeyHelp() string { + control := color.New(color.Bold).SprintFunc() + return control("[^C]") + ": Quit " + + control("[^Space]") + ": Switch View " + +} + +func (view *CommandView) Render() error { + view.gui.Update(func(g *gocui.Gui) error { + view.view.Clear() + fmt.Fprintln(view.view, "Filter: ") + + return nil + }) + // todo: blerg + return nil +} diff --git a/ui/filetreeview.go b/ui/filetreeview.go index 50110b2..3b51195 100644 --- a/ui/filetreeview.go +++ b/ui/filetreeview.go @@ -4,10 +4,11 @@ import ( "errors" "fmt" + "strings" + + "github.com/fatih/color" "github.com/jroimartin/gocui" "github.com/wagoodman/docker-image-explorer/filetree" - "github.com/fatih/color" - "strings" ) type FileTreeView struct { @@ -67,6 +68,9 @@ func (view *FileTreeView) Setup(v *gocui.View) error { if err := view.gui.SetKeybinding(view.Name, gocui.KeyCtrlU, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return view.toggleShowDiffType(filetree.Unchanged) }); err != nil { return err } + if err := view.gui.SetKeybinding(view.Name, gocui.KeyCtrlSlash, gocui.ModNone, func(*gocui.Gui, *gocui.View) error { return nil }); err != nil { + return err + } view.updateViewTree() view.Render() @@ -97,7 +101,6 @@ func (view *FileTreeView) setLayer(layerIndex int) error { _, _ = fmt.Fprintln(v, view.RefTrees[layerIndex]) } - view.view.SetCursor(0, 0) view.TreeIndex = 0 view.ModelTree = newTree @@ -186,11 +189,11 @@ func (view *FileTreeView) updateViewTree() { func (view *FileTreeView) KeyHelp() string { control := color.New(color.Bold).SprintFunc() - return control("[Space]") + ": Collapse dir " + - control("[^A]") + ": Added files " + - control("[^R]") + ": Removed files " + - control("[^M]") + ": Modified files " + - control("[^U]") + ": Unmodified files" + return control("[Space]") + ": Collapse dir " + + control("[^A]") + ": Added files " + + control("[^R]") + ": Removed files " + + control("[^M]") + ": Modified files " + + control("[^U]") + ": Unmodified files" } func (view *FileTreeView) Render() error { diff --git a/ui/statusview.go b/ui/statusview.go index 719d097..b661810 100644 --- a/ui/statusview.go +++ b/ui/statusview.go @@ -3,8 +3,8 @@ package ui import ( "fmt" - "github.com/jroimartin/gocui" "github.com/fatih/color" + "github.com/jroimartin/gocui" ) type StatusView struct { @@ -43,7 +43,6 @@ func (view *StatusView) Setup(v *gocui.View) error { return nil } - func (view *StatusView) CursorDown() error { return nil } @@ -54,15 +53,16 @@ func (view *StatusView) CursorUp() error { func (view *StatusView) KeyHelp() string { control := color.New(color.Bold).SprintFunc() - return control("[^C]") + ": Quit " + - control("[^Space]") + ": Switch View " + return control("[^C]") + ": Quit " + + control("[^Space]") + ": Switch View " + + control("[^/]") + ": Filter files" } func (view *StatusView) Render() error { view.gui.Update(func(g *gocui.Gui) error { view.view.Clear() - fmt.Fprintln(view.view, view.KeyHelp() + " | " + Views.lookup[view.gui.CurrentView().Name()].KeyHelp()) + fmt.Fprintln(view.view, view.KeyHelp()+" | "+Views.lookup[view.gui.CurrentView().Name()].KeyHelp()) return nil }) diff --git a/ui/ui.go b/ui/ui.go index b5ee34a..410cf6b 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -3,23 +3,24 @@ package ui import ( "log" + "github.com/fatih/color" "github.com/jroimartin/gocui" "github.com/wagoodman/docker-image-explorer/filetree" "github.com/wagoodman/docker-image-explorer/image" - "github.com/fatih/color" ) const debug = false var Formatting struct { - Header func(...interface{})(string) + Header func(...interface{}) string } var Views struct { - Tree *FileTreeView - Layer *LayerView - Status *StatusView - lookup map[string]View + Tree *FileTreeView + Layer *LayerView + Status *StatusView + Command *CommandView + lookup map[string]View } type View interface { @@ -89,6 +90,9 @@ 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 { + return err + } return nil } @@ -133,6 +137,13 @@ func layout(g *gocui.Gui) error { } Views.Status.Setup(view) + } + if view, err := g.SetView(Views.Command.Name, -1, maxY-bottomRows-2, maxX, maxY-1); err != nil { + if err != gocui.ErrUnknownView { + return err + } + Views.Command.Setup(view) + } return nil @@ -164,6 +175,9 @@ func Run(layers []*image.Layer, refTrees []*filetree.FileTree) { Views.Status = NewStatusView("status", g) Views.lookup[Views.Status.Name] = Views.Status + Views.Command = NewCommandView("command", g) + Views.lookup[Views.Command.Name] = Views.Command + g.Cursor = false //g.Mouse = true g.SetManagerFunc(layout) From 63332d40429c5cd42ed99eed2ef2d13038e5eac8 Mon Sep 17 00:00:00 2001 From: Will Murphy Date: Sun, 24 Jun 2018 13:48:26 -0400 Subject: [PATCH 2/7] wip --- ui/commandview.go | 8 ++------ ui/filetreeview.go | 46 ++++++++++++++++++++++++++++++++++++++++++---- ui/ui.go | 17 ++++++++++++++++- 3 files changed, 60 insertions(+), 11 deletions(-) diff --git a/ui/commandview.go b/ui/commandview.go index 55d21ef..d94e471 100644 --- a/ui/commandview.go +++ b/ui/commandview.go @@ -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 { diff --git a/ui/filetreeview.go b/ui/filetreeview.go index 3b51195..774fb74 100644 --- a/ui/filetreeview.go +++ b/ui/filetreeview.go @@ -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) diff --git a/ui/ui.go b/ui/ui.go index 410cf6b..e3d0136 100644 --- a/ui/ui.go +++ b/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 } From 789643261f44d6ddf6bc9020ec8558d2f5110412 Mon Sep 17 00:00:00 2001 From: Will Murphy Date: Sun, 24 Jun 2018 15:04:29 -0400 Subject: [PATCH 3/7] mostly working --- filetree/node.go | 24 ++++++++--------- ui/commandview.go | 5 ++-- ui/filetreeview.go | 65 ++++++++++++++++++++++++++++++---------------- ui/ui.go | 6 +++-- 4 files changed, 61 insertions(+), 39 deletions(-) diff --git a/filetree/node.go b/filetree/node.go index 979ecf1..05596b4 100644 --- a/filetree/node.go +++ b/filetree/node.go @@ -1,14 +1,14 @@ package filetree import ( + "archive/tar" + "fmt" "sort" "strings" - "github.com/fatih/color" - "fmt" - "github.com/phayes/permbits" "github.com/dustin/go-humanize" - "github.com/wagoodman/docker-image-explorer/_vendor-20180604210951/github.com/Microsoft/go-winio/archive/tar" + "github.com/fatih/color" + "github.com/phayes/permbits" ) const ( @@ -16,11 +16,11 @@ const ( ) type FileNode struct { - Tree *FileTree - Parent *FileNode - Name string - Data NodeData - Children map[string]*FileNode + Tree *FileTree + Parent *FileNode + Name string + Data NodeData + Children map[string]*FileNode } func NewNode(parent *FileNode, name string, data FileInfo) (node *FileNode) { @@ -125,7 +125,7 @@ func (node *FileNode) MetadataString() string { userGroup := fmt.Sprintf("%d:%d", user, group) size := humanize.Bytes(uint64(node.Data.FileInfo.TarHeader.FileInfo().Size())) - return style.Sprint(fmt.Sprintf(AttributeFormat,dir, fileMode, userGroup, size)) + return style.Sprint(fmt.Sprintf(AttributeFormat, dir, fileMode, userGroup, size)) } func (node *FileNode) VisitDepthChildFirst(visiter Visiter, evaluator VisitEvaluator) error { @@ -161,7 +161,7 @@ func (node *FileNode) VisitDepthParentFirst(visiter Visiter, evaluator VisitEval } // never visit the root node - if node != node.Tree.Root{ + if node != node.Tree.Root { err = visiter(node) if err != nil { return err @@ -225,7 +225,7 @@ func (node *FileNode) deriveDiffType(diffType DiffType) error { } - return node.AssignDiffType(myDiffType) + return node.AssignDiffType(myDiffType) } func (node *FileNode) AssignDiffType(diffType DiffType) error { diff --git a/ui/commandview.go b/ui/commandview.go index d94e471..f10eb59 100644 --- a/ui/commandview.go +++ b/ui/commandview.go @@ -32,7 +32,7 @@ func NewCommandView(name string, gui *gocui.Gui) (commandview *CommandView) { return commandview } -func (view *CommandView) Setup(v *gocui.View) error { +func (view *CommandView) Setup(v *gocui.View, header *gocui.View) error { // set view options view.view = v @@ -80,8 +80,7 @@ func (view *CommandView) KeyHelp() string { func (view *CommandView) Render() error { view.gui.Update(func(g *gocui.Gui) error { - view.view.Clear() - fmt.Fprintln(view.view, "Filter: ") + fmt.Fprintln(view.view, "") return nil }) diff --git a/ui/filetreeview.go b/ui/filetreeview.go index ad9bd6a..285c3ab 100644 --- a/ui/filetreeview.go +++ b/ui/filetreeview.go @@ -4,9 +4,6 @@ import ( "errors" "fmt" "regexp" - - "strings" - "strings" "github.com/fatih/color" @@ -108,12 +105,6 @@ func (view *FileTreeView) setLayer(layerIndex int) error { } view.ModelTree.VisitDepthChildFirst(visitor, nil) - if debug { - v, _ := view.gui.View("debug") - v.Clear() - _, _ = fmt.Fprintln(v, view.RefTrees[layerIndex]) - } - view.view.SetCursor(0, 0) view.TreeIndex = 0 view.ModelTree = newTree @@ -197,31 +188,61 @@ func (view *FileTreeView) toggleShowDiffType(diffType filetree.DiffType) error { } func filterRegex() *regexp.Regexp { + debugPrint("Entered filterRegex()") 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 + filterString := strings.TrimSpace(Views.Command.view.Buffer()) + if len(filterString) < 1 { + debugPrint(fmt.Sprintf("returing nil from fitlerRegex() because string is too short (%s)", filterString)) + return nil + } + + debugPrint("Compiling regex from " + filterString) + regex, err := regexp.Compile(filterString) + if err != nil { + debugPrint("Returning nil from filterRegex") + return nil + } + + return regex +} + +func debugPrint(s string) { + if debug && Views.Tree != nil && Views.Tree.gui != nil { + v, _ := Views.Tree.gui.View("debug") + if v != nil { + if len(v.ViewBuffer()) > 100 { + v.Clear() + } + _, _ = fmt.Fprintln(v, s) } } - if read > 0 && err != nil { - panic(err) - } - return nil } func (view *FileTreeView) updateViewTree() { regex := filterRegex() + if regex == nil { + debugPrint("Nil regex in updateViewTree()") + } // 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 + visibleChild := false + for _, child := range node.Children { + if !child.Data.ViewInfo.Hidden { + visibleChild = true + } + } + if regex != nil && !visibleChild { + match := regex.FindString(node.Path()) + node.Data.ViewInfo.Hidden = len(match) == 0 + debugPrint(fmt.Sprintf("Not nil regex, match was %s", string(match))) + if len(match) == 0 { + debugPrint(fmt.Sprintf("Hiding '%s' because of failure to match /%v/", node.Path(), regex)) + } else { + debugPrint(fmt.Sprintf("Showing '%s' because of matching /%v/", node.Path(), regex)) + } } return nil }, nil) diff --git a/ui/ui.go b/ui/ui.go index 10cf544..3b7a2f8 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -10,7 +10,7 @@ import ( "github.com/wagoodman/docker-image-explorer/image" ) -const debug = false +const debug = true var Formatting struct { Header func(...interface{}) string @@ -45,12 +45,14 @@ func toggleView(g *gocui.Gui, v *gocui.View) error { } func focusFilterView(g *gocui.Gui, v *gocui.View) error { + debugPrint("focusFilterView()") _, err := g.SetCurrentView(Views.Command.Name) Render() return err } func returnToTreeView(g *gocui.Gui, v *gocui.View) error { + debugPrint("returnToTreeView()") _, err := g.SetCurrentView(Views.Tree.Name) Render() return err @@ -177,7 +179,7 @@ func layout(g *gocui.Gui) error { if err != gocui.ErrUnknownView { return err } - Views.Command.Setup(view) + Views.Command.Setup(view, nil) } From a816a8f372ccdf26d8754a0257cbcdef27bce68e Mon Sep 17 00:00:00 2001 From: Will Murphy Date: Sun, 24 Jun 2018 15:08:47 -0400 Subject: [PATCH 4/7] Fix segfault on empty tree view --- ui/filetreeview.go | 4 +++- ui/ui.go | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ui/filetreeview.go b/ui/filetreeview.go index 285c3ab..354002a 100644 --- a/ui/filetreeview.go +++ b/ui/filetreeview.go @@ -173,7 +173,9 @@ func (view *FileTreeView) getAbsPositionNode() (node *filetree.FileNode) { func (view *FileTreeView) toggleCollapse() error { node := view.getAbsPositionNode() - node.Data.ViewInfo.Collapsed = !node.Data.ViewInfo.Collapsed + if node != nil { + node.Data.ViewInfo.Collapsed = !node.Data.ViewInfo.Collapsed + } view.updateViewTree() return view.Render() } diff --git a/ui/ui.go b/ui/ui.go index 3b7a2f8..a24aa91 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -54,7 +54,9 @@ func focusFilterView(g *gocui.Gui, v *gocui.View) error { func returnToTreeView(g *gocui.Gui, v *gocui.View) error { debugPrint("returnToTreeView()") _, err := g.SetCurrentView(Views.Tree.Name) - Render() + if Views.Tree != nil { + Views.Tree.Render() + } return err } From 3023304586d9fe2a9888e49daa6594a58b36d771 Mon Sep 17 00:00:00 2001 From: Will Murphy Date: Sun, 24 Jun 2018 15:34:46 -0400 Subject: [PATCH 5/7] render changes immediately --- ui/ui.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/ui.go b/ui/ui.go index a24aa91..e7fa7df 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -55,7 +55,8 @@ func returnToTreeView(g *gocui.Gui, v *gocui.View) error { debugPrint("returnToTreeView()") _, err := g.SetCurrentView(Views.Tree.Name) if Views.Tree != nil { - Views.Tree.Render() + debugPrint("returnToTreeView calls Views.Tree.Render()") + Views.Tree.ReRender() } return err } From cd9da2dc2e22b774323e5e296a826ca5226fe770 Mon Sep 17 00:00:00 2001 From: Will Murphy Date: Sun, 24 Jun 2018 15:41:56 -0400 Subject: [PATCH 6/7] run search on every keystroke --- ui/commandview.go | 6 ++++++ ui/ui.go | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ui/commandview.go b/ui/commandview.go index f10eb59..dbe59b2 100644 --- a/ui/commandview.go +++ b/ui/commandview.go @@ -36,9 +36,11 @@ func (view *CommandView) Setup(v *gocui.View, header *gocui.View) error { // set view options view.view = v + view.maxLength = 200 view.view.Frame = false view.view.BgColor = gocui.ColorDefault + gocui.AttrReverse view.view.Editable = true + view.view.Editor = view // 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 @@ -72,6 +74,10 @@ func (i *CommandView) Edit(v *gocui.View, key gocui.Key, ch rune, mod gocui.Modi case key == gocui.KeyBackspace || key == gocui.KeyBackspace2: v.EditDelete(true) } + if Views.Tree != nil { + debugPrint("Edit() calls Views.Tree.Render()") + Views.Tree.ReRender() + } } func (view *CommandView) KeyHelp() string { diff --git a/ui/ui.go b/ui/ui.go index e7fa7df..5db536d 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -55,7 +55,6 @@ func returnToTreeView(g *gocui.Gui, v *gocui.View) error { debugPrint("returnToTreeView()") _, err := g.SetCurrentView(Views.Tree.Name) if Views.Tree != nil { - debugPrint("returnToTreeView calls Views.Tree.Render()") Views.Tree.ReRender() } return err From d82df143744eeaccacaf19074dbf4c9815af8086 Mon Sep 17 00:00:00 2001 From: Will Murphy Date: Sun, 24 Jun 2018 15:46:52 -0400 Subject: [PATCH 7/7] Stop debug printing all the time --- ui/commandview.go | 1 - ui/filetreeview.go | 31 ++++++------------------------- ui/ui.go | 15 +++++++++++++-- 3 files changed, 19 insertions(+), 28 deletions(-) diff --git a/ui/commandview.go b/ui/commandview.go index dbe59b2..14fe2be 100644 --- a/ui/commandview.go +++ b/ui/commandview.go @@ -75,7 +75,6 @@ func (i *CommandView) Edit(v *gocui.View, key gocui.Key, ch rune, mod gocui.Modi v.EditDelete(true) } if Views.Tree != nil { - debugPrint("Edit() calls Views.Tree.Render()") Views.Tree.ReRender() } } diff --git a/ui/filetreeview.go b/ui/filetreeview.go index 354002a..5f38dc7 100644 --- a/ui/filetreeview.go +++ b/ui/filetreeview.go @@ -190,43 +190,25 @@ func (view *FileTreeView) toggleShowDiffType(diffType filetree.DiffType) error { } func filterRegex() *regexp.Regexp { - debugPrint("Entered filterRegex()") if Views.Command == nil || Views.Command.view == nil { return nil } filterString := strings.TrimSpace(Views.Command.view.Buffer()) if len(filterString) < 1 { - debugPrint(fmt.Sprintf("returing nil from fitlerRegex() because string is too short (%s)", filterString)) return nil } - debugPrint("Compiling regex from " + filterString) regex, err := regexp.Compile(filterString) if err != nil { - debugPrint("Returning nil from filterRegex") return nil } return regex } -func debugPrint(s string) { - if debug && Views.Tree != nil && Views.Tree.gui != nil { - v, _ := Views.Tree.gui.View("debug") - if v != nil { - if len(v.ViewBuffer()) > 100 { - v.Clear() - } - _, _ = fmt.Fprintln(v, s) - } - } -} - func (view *FileTreeView) updateViewTree() { regex := filterRegex() - if regex == nil { - debugPrint("Nil regex in updateViewTree()") - } + // 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] @@ -239,12 +221,6 @@ func (view *FileTreeView) updateViewTree() { if regex != nil && !visibleChild { match := regex.FindString(node.Path()) node.Data.ViewInfo.Hidden = len(match) == 0 - debugPrint(fmt.Sprintf("Not nil regex, match was %s", string(match))) - if len(match) == 0 { - debugPrint(fmt.Sprintf("Hiding '%s' because of failure to match /%v/", node.Path(), regex)) - } else { - debugPrint(fmt.Sprintf("Showing '%s' because of matching /%v/", node.Path(), regex)) - } } return nil }, nil) @@ -285,3 +261,8 @@ func (view *FileTreeView) Render() error { }) return nil } + +func (view *FileTreeView) ReRender() error { + view.updateViewTree() + return view.Render() +} diff --git a/ui/ui.go b/ui/ui.go index 5db536d..59b69bb 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -2,6 +2,7 @@ package ui import ( "errors" + "fmt" "log" "github.com/fatih/color" @@ -12,6 +13,18 @@ import ( const debug = true +func debugPrint(s string) { + if debug && Views.Tree != nil && Views.Tree.gui != nil { + v, _ := Views.Tree.gui.View("debug") + if v != nil { + if len(v.BufferLines()) > 20 { + v.Clear() + } + _, _ = fmt.Fprintln(v, s) + } + } +} + var Formatting struct { Header func(...interface{}) string StatusBar func(...interface{}) string @@ -45,14 +58,12 @@ func toggleView(g *gocui.Gui, v *gocui.View) error { } func focusFilterView(g *gocui.Gui, v *gocui.View) error { - debugPrint("focusFilterView()") _, err := g.SetCurrentView(Views.Command.Name) Render() return err } func returnToTreeView(g *gocui.Gui, v *gocui.View) error { - debugPrint("returnToTreeView()") _, err := g.SetCurrentView(Views.Tree.Name) if Views.Tree != nil { Views.Tree.ReRender()