From 2aea13bf0a89e9719d40e6ddb200b89982f18ebd Mon Sep 17 00:00:00 2001 From: Brian Mattern Date: Mon, 3 Jun 2019 14:13:31 -0700 Subject: [PATCH] Refactor filter editing input handling. Only swallow events that are explicitly handled by the editor. Fall through to the default event handling for all other events. Also, cancel editing on and fix README file formatting. --- README.md | 8 ++-- main.go | 89 ++++++++++++++++++++++++--------------------- src/widgets/help.go | 2 +- 3 files changed, 53 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 3c060ac..444d3ad 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ snap connect gotop-cjbassi:system-observe - Quit: `q` or `` - Process navigation: - `k` and ``: up - - `j` and ``: down - ``: half page up - ``: half page down - ``: full page up @@ -88,10 +88,10 @@ snap connect gotop-cjbassi:system-observe - `m`: Mem - `p`: PID - Process filtering: - - /: start editing filter + - `/`: start editing filter - (while editing): - - accept filter - - : clear filter + - `` accept filter + - `` and ``: clear filter - CPU and Mem graph scaling: - `h`: scale in - `l`: scale out diff --git a/main.go b/main.go index 2eb653c..48f750c 100644 --- a/main.go +++ b/main.go @@ -274,6 +274,33 @@ func initWidgets() { } } +// handleEditFilterEvents handles events while editing the proc filter. +// Returns true if the event was handled. +func handleEditFilterEvents(e ui.Event) bool { + if utf8.RuneCountInString(e.ID) == 1 { + proc.SetFilter(proc.Filter() + e.ID) + ui.Render(proc) + return true + } + switch e.ID { + case "", "": + proc.SetFilter("") + proc.SetEditingFilter(false) + ui.Render(proc) + case "": + proc.SetEditingFilter(false) + ui.Render(proc) + case "": + if filter := proc.Filter(); filter != "" { + proc.SetFilter(filter[:len(filter)-1]) + } + ui.Render(proc) + default: + return false + } + return true +} + func eventLoop() { drawTicker := time.NewTicker(updateInterval).C @@ -297,8 +324,16 @@ func eventLoop() { } } case e := <-uiEvents: - // Handle resize event always. - if e.ID == "" { + + if proc.EditingFilter() && handleEditFilterEvents(e) { + break + } + switch e.ID { + case "q", "": + return + case "?": + helpVisible = !helpVisible + case "": payload := e.Payload.(ui.Resize) termWidth, termHeight := payload.Width, payload.Height if statusbar { @@ -309,55 +344,23 @@ func eventLoop() { } help.Resize(payload.Width, payload.Height) ui.Clear() - - if helpVisible { - ui.Render(help) - } else { - ui.Render(grid) - if statusbar { - ui.Render(bar) - } - } } - if proc.EditingFilter() { - if utf8.RuneCountInString(e.ID) == 1 { - proc.SetFilter(proc.Filter() + e.ID) - ui.Render(proc) - } + if helpVisible { switch e.ID { - case "": - proc.SetFilter("") - proc.SetEditingFilter(false) - ui.Render(proc) - case "": - proc.SetEditingFilter(false) - ui.Render(proc) - case "": - if filter := proc.Filter(); filter != "" { - proc.SetFilter(filter[:len(filter)-1]) - } - ui.Render(proc) - } - } else if helpVisible { - switch e.ID { - case "q", "": - return case "?": - helpVisible = false - ui.Render(grid) + ui.Clear() + ui.Render(help) case "": helpVisible = false ui.Render(grid) + case "": + ui.Render(help) } } else { switch e.ID { - case "q", "": - return case "?": - helpVisible = true - ui.Clear() - ui.Render(help) + ui.Render(grid) case "h": graphHorizontalScale += graphHorizontalScaleDelta cpu.HorizontalScale = graphHorizontalScale @@ -370,6 +373,11 @@ func eventLoop() { mem.HorizontalScale = graphHorizontalScale ui.Render(cpu, mem) } + case "": + ui.Render(grid) + if statusbar { + ui.Render(bar) + } case "": payload := e.Payload.(ui.Mouse) proc.HandleClick(payload.X, payload.Y) @@ -414,7 +422,6 @@ func eventLoop() { proc.ChangeProcSortMethod(w.ProcSortMethod(e.ID)) ui.Render(proc) case "/": - proc.SetFilter("") proc.SetEditingFilter(true) ui.Render(proc) } diff --git a/src/widgets/help.go b/src/widgets/help.go index 47b3c14..97cfbd6 100644 --- a/src/widgets/help.go +++ b/src/widgets/help.go @@ -33,7 +33,7 @@ Process filtering: - /: start editing filter - (while editing): - : accept filter - - clear filter + - and : clear filter CPU and Mem graph scaling: - h: scale in