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