1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
package widgets
import (
"image"
"strings"
ui "github.com/gizak/termui/v3"
)
const KEYBINDS = `
Quit: q or <C-c>
Process navigation
- k and <Up>: up
- j and <Down>: down
- <C-u>: half page up
- <C-d>: half page down
- <C-b>: full page up
- <C-f>: full page down
- gg and <Home>: jump to top
- G and <End>: jump to bottom
Process actions:
- <Tab>: toggle process grouping
- dd: kill selected process or group of processes with SIGTERM (15)
- d3: kill selected process or group of processes with SIGQUIT (3)
- d9: kill selected process or group of processes with SIGKILL (9)
Process sorting
- c: CPU
- m: Mem
- p: PID
CPU and Mem graph scaling:
- h: scale in
- l: scale out
`
type HelpMenu struct {
ui.Block
}
func NewHelpMenu() *HelpMenu {
return &HelpMenu{
Block: *ui.NewBlock(),
}
}
func (self *HelpMenu) Resize(termWidth, termHeight int) {
var textWidth = 0
for _, line := range strings.Split(KEYBINDS, "\n") {
textWidth = maxInt(len(line), textWidth)
}
textWidth += 2
textHeight := 28
x := (termWidth - textWidth) / 2
y := (termHeight - textHeight) / 2
self.Block.SetRect(x, y, textWidth+x, textHeight+y)
}
func (self *HelpMenu) Draw(buf *ui.Buffer) {
self.Block.Draw(buf)
for y, line := range strings.Split(KEYBINDS, "\n") {
for x, rune := range line {
buf.SetCell(
ui.NewCell(rune, ui.NewStyle(7)),
image.Pt(self.Inner.Min.X+x, self.Inner.Min.Y+y-1),
)
}
}
}
func maxInt(a int, b int) int {
if a > b {
return a
}
return b
}
|