summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Mattern <rephorm@rephorm.com>2019-06-03 14:13:31 -0700
committerBrian Mattern <rephorm@rephorm.com>2019-06-03 14:38:09 -0700
commit2aea13bf0a89e9719d40e6ddb200b89982f18ebd (patch)
treeff34f87bcf405451e636549c51de82e286ffb87f
parent5941bec6c13e802336ec51bb25024fa75a087dcf (diff)
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 <Escape> and fix README file formatting.
-rw-r--r--README.md8
-rw-r--r--main.go89
-rw-r--r--src/widgets/help.go2
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 `<C-c>`
- Process navigation:
- `k` and `<Up>`: up
- - `j` and `<Down`: down
+ - `j` and `<Down>`: down
- `<C-u>`: half page up
- `<C-d>`: half page down
- `<C-b>`: 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):
- - <Enter> accept filter
- - <C-c>: clear filter
+ - `<Enter>` accept filter
+ - `<C-c>` and `<Escape>`: 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 "<C-c>", "<Escape>":
+ proc.SetFilter("")
+ proc.SetEditingFilter(false)
+ ui.Render(proc)
+ case "<Enter>":
+ proc.SetEditingFilter(false)
+ ui.Render(proc)
+ case "<Backspace>":
+ 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 == "<Resize>" {
+
+ if proc.EditingFilter() && handleEditFilterEvents(e) {
+ break
+ }
+ switch e.ID {
+ case "q", "<C-c>":
+ return
+ case "?":
+ helpVisible = !helpVisible
+ case "<Resize>":
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 "<C-c>":
- proc.SetFilter("")
- proc.SetEditingFilter(false)
- ui.Render(proc)
- case "<Enter>":
- proc.SetEditingFilter(false)
- ui.Render(proc)
- case "<Backspace>":
- if filter := proc.Filter(); filter != "" {
- proc.SetFilter(filter[:len(filter)-1])
- }
- ui.Render(proc)
- }
- } else if helpVisible {
- switch e.ID {
- case "q", "<C-c>":
- return
case "?":
- helpVisible = false
- ui.Render(grid)
+ ui.Clear()
+ ui.Render(help)
case "<Escape>":
helpVisible = false
ui.Render(grid)
+ case "<Resize>":
+ ui.Render(help)
}
} else {
switch e.ID {
- case "q", "<C-c>":
- 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 "<Resize>":
+ ui.Render(grid)
+ if statusbar {
+ ui.Render(bar)
+ }
case "<MouseLeft>":
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):
- <Enter>: accept filter
- - <C-c> clear filter
+ - <C-c> and <Escape>: clear filter
CPU and Mem graph scaling:
- h: scale in