Skip to content

Commit 6543a1d

Browse files
authored
feat: Make PgUp and PgDown keys move to the previous/next page (#145)
1 parent ded0ab8 commit 6543a1d

File tree

4 files changed

+47
-13
lines changed

4 files changed

+47
-13
lines changed

docs/usage.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
| Ctrl+C | Exit |
1212
| F10 | Exit |
1313
| ↑↓ | Line Up / Down |
14+
| PgUp | Page Up |
15+
| PgDown | Page Down |
1416
| Home | Navigate to Start |
1517
| End | Navigate to End |
1618
| ? | Show/Hide help |

internal/app/lazytable.go

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,19 @@ func (m lazyTableModel) Update(msg tea.Msg) (lazyTableModel, tea.Cmd) {
5050
var cmd tea.Cmd
5151

5252
render := false
53+
captureMessage := false
5354
switch msg := msg.(type) {
5455
case tea.KeyMsg:
55-
m, render = m.handleKey(msg, render)
56+
m, render, captureMessage = m.handleKey(msg, render)
5657

5758
case EntriesUpdateMsg:
5859
m.entries = msg.Entries
5960
render = true
6061
}
61-
m.table, cmd = m.table.Update(msg)
62+
63+
if !captureMessage {
64+
m.table, cmd = m.table.Update(msg)
65+
}
6266

6367
if m.table.Cursor() != m.lastCursor {
6468
render = true
@@ -92,18 +96,20 @@ func (m lazyTableModel) getCellRenderer() func(table.Model, string, table.CellPo
9296
}
9397
}
9498

95-
func (m lazyTableModel) handleKey(msg tea.KeyMsg, render bool) (lazyTableModel, bool) {
99+
func (m lazyTableModel) handleKey(msg tea.KeyMsg, render bool) (lazyTableModel, bool, bool) {
100+
captureMessage := false // when true, the key message must not be forwarded to the inner table
101+
96102
// toggle the reverse display of items.
97103
if key.Matches(msg, m.keys.Reverse) {
98104
m.reverse = !m.reverse
99105
render = true
100106
}
101107

102-
// this function increases the viewport offset by 1 if possible. (scrolls down)
103-
increaseOffset := func() {
108+
// this function increases the viewport offset by n if possible. (scrolls down)
109+
increaseOffset := func(n int) {
104110
maxOffset := max(m.entries.Len()-m.table.Height(), 0)
105111

106-
offset := min(m.offset+1, maxOffset)
112+
offset := min(m.offset+n, maxOffset)
107113
if offset != m.offset {
108114
m.offset = offset
109115
render = true
@@ -113,9 +119,9 @@ func (m lazyTableModel) handleKey(msg tea.KeyMsg, render bool) (lazyTableModel,
113119
}
114120
}
115121

116-
// this function decreases the viewport offset by 1 if possible. (scrolls up)
117-
decreaseOffset := func() {
118-
offset := max(m.offset-1, 0)
122+
// this function decreases the viewport offset by n if possible. (scrolls up)
123+
decreaseOffset := func(n int) {
124+
offset := max(m.offset-n, 0)
119125
if offset != m.offset {
120126
m.offset = offset
121127
render = true
@@ -131,17 +137,29 @@ func (m lazyTableModel) handleKey(msg tea.KeyMsg, render bool) (lazyTableModel,
131137
if key.Matches(msg, m.keys.Down) {
132138
m.follow = false
133139
if m.table.Cursor()+1 == m.table.Height() {
134-
increaseOffset() // move the viewport
140+
increaseOffset(1) // move the viewport
135141
}
136142
}
137143

138144
if key.Matches(msg, m.keys.Up) {
139145
m.follow = false
140146
if m.table.Cursor() == 0 {
141-
decreaseOffset() // move the viewport
147+
decreaseOffset(1) // move the viewport
142148
}
143149
}
144150

151+
if key.Matches(msg, m.keys.PageDown) {
152+
m.follow = false
153+
increaseOffset(m.table.Height() - 1) // move the viewport
154+
captureMessage = !m.follow
155+
}
156+
157+
if key.Matches(msg, m.keys.PageUp) {
158+
m.follow = false
159+
decreaseOffset(m.table.Height() - 1) // move the viewport
160+
captureMessage = !m.follow
161+
}
162+
145163
if key.Matches(msg, m.keys.GotoTop) {
146164
if m.reverse {
147165
// when follow is enabled, rendering will handle setting the offset to the correct value
@@ -164,7 +182,7 @@ func (m lazyTableModel) handleKey(msg tea.KeyMsg, render bool) (lazyTableModel,
164182
render = true
165183
}
166184

167-
return m, render
185+
return m, render, captureMessage
168186
}
169187

170188
func (m lazyTableModel) viewPortCursor() int {

internal/app/logstable.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ func newLogsTableModel(
3232
)
3333
tableLogs.KeyMap.LineUp = application.keys.Up
3434
tableLogs.KeyMap.LineDown = application.keys.Down
35+
tableLogs.KeyMap.PageUp = application.keys.PageUp
36+
tableLogs.KeyMap.PageDown = application.keys.PageDown
3537
tableLogs.KeyMap.GotoBottom = application.keys.GotoBottom
3638
tableLogs.KeyMap.GotoTop = application.keys.GotoTop
3739

internal/keymap/keymap.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ type KeyMap struct {
1111
Up key.Binding
1212
Reverse key.Binding
1313
Down key.Binding
14+
PageUp key.Binding
15+
PageDown key.Binding
1416
Filter key.Binding
1517
ToggleFullHelp key.Binding
1618
GotoTop key.Binding
@@ -20,6 +22,7 @@ type KeyMap struct {
2022

2123
// GetDefaultKeys returns default KeyMap.
2224
func GetDefaultKeys() KeyMap {
25+
const spacebar = " "
2326
return KeyMap{
2427
Exit: key.NewBinding(
2528
key.WithKeys("ctrl+c", "f10"),
@@ -48,6 +51,14 @@ func GetDefaultKeys() KeyMap {
4851
key.WithKeys("down"),
4952
key.WithHelp("↓", "Down"),
5053
),
54+
PageUp: key.NewBinding(
55+
key.WithKeys("pgup"),
56+
key.WithHelp("pgup", "page up"),
57+
),
58+
PageDown: key.NewBinding(
59+
key.WithKeys("pgdown", spacebar),
60+
key.WithHelp("pgdn", "page down"),
61+
),
5162
Filter: key.NewBinding(
5263
key.WithKeys("f"),
5364
key.WithHelp("f", "Filter"),
@@ -69,7 +80,7 @@ func GetDefaultKeys() KeyMap {
6980

7081
func (k KeyMap) ShortHelp() []key.Binding {
7182
return []key.Binding{
72-
k.Back, k.Open, k.Up, k.Down, k.ToggleFullHelp,
83+
k.Back, k.Open, k.Up, k.Down, k.PageUp, k.PageDown, k.ToggleFullHelp,
7384
}
7485
}
7586

@@ -78,6 +89,7 @@ func (k KeyMap) FullHelp() [][]key.Binding {
7889
{k.Up, k.Down},
7990
{k.Back, k.Open},
8091
{k.Filter, k.Reverse},
92+
{k.PageUp, k.PageDown},
8193
{k.GotoTop, k.GotoBottom},
8294
{k.ToggleFullHelp, k.Exit},
8395
}

0 commit comments

Comments
 (0)