Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
| Ctrl+C | Exit |
| F10 | Exit |
| ↑↓ | Line Up / Down |
| PgUp | Page Up |
| PgDown | Page Down |
| Home | Navigate to Start |
| End | Navigate to End |
| ? | Show/Hide help |
Expand Down
42 changes: 30 additions & 12 deletions internal/app/lazytable.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,19 @@ func (m lazyTableModel) Update(msg tea.Msg) (lazyTableModel, tea.Cmd) {
var cmd tea.Cmd

render := false
captureMessage := false
switch msg := msg.(type) {
case tea.KeyMsg:
m, render = m.handleKey(msg, render)
m, render, captureMessage = m.handleKey(msg, render)

case EntriesUpdateMsg:
m.entries = msg.Entries
render = true
}
m.table, cmd = m.table.Update(msg)

if !captureMessage {
m.table, cmd = m.table.Update(msg)
}

if m.table.Cursor() != m.lastCursor {
render = true
Expand Down Expand Up @@ -92,18 +96,20 @@ func (m lazyTableModel) getCellRenderer() func(table.Model, string, table.CellPo
}
}

func (m lazyTableModel) handleKey(msg tea.KeyMsg, render bool) (lazyTableModel, bool) {
func (m lazyTableModel) handleKey(msg tea.KeyMsg, render bool) (lazyTableModel, bool, bool) {
captureMessage := false // when true, the key message must not be forwarded to the inner table

// toggle the reverse display of items.
if key.Matches(msg, m.keys.Reverse) {
m.reverse = !m.reverse
render = true
}

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

offset := min(m.offset+1, maxOffset)
offset := min(m.offset+n, maxOffset)
if offset != m.offset {
m.offset = offset
render = true
Expand All @@ -113,9 +119,9 @@ func (m lazyTableModel) handleKey(msg tea.KeyMsg, render bool) (lazyTableModel,
}
}

// this function decreases the viewport offset by 1 if possible. (scrolls up)
decreaseOffset := func() {
offset := max(m.offset-1, 0)
// this function decreases the viewport offset by n if possible. (scrolls up)
decreaseOffset := func(n int) {
offset := max(m.offset-n, 0)
if offset != m.offset {
m.offset = offset
render = true
Expand All @@ -131,17 +137,29 @@ func (m lazyTableModel) handleKey(msg tea.KeyMsg, render bool) (lazyTableModel,
if key.Matches(msg, m.keys.Down) {
m.follow = false
if m.table.Cursor()+1 == m.table.Height() {
increaseOffset() // move the viewport
increaseOffset(1) // move the viewport
}
}

if key.Matches(msg, m.keys.Up) {
m.follow = false
if m.table.Cursor() == 0 {
decreaseOffset() // move the viewport
decreaseOffset(1) // move the viewport
}
}

if key.Matches(msg, m.keys.PageDown) {
m.follow = false
increaseOffset(m.table.Height() - 1) // move the viewport
captureMessage = !m.follow
}

if key.Matches(msg, m.keys.PageUp) {
m.follow = false
decreaseOffset(m.table.Height() - 1) // move the viewport
captureMessage = !m.follow
}

if key.Matches(msg, m.keys.GotoTop) {
if m.reverse {
// when follow is enabled, rendering will handle setting the offset to the correct value
Expand All @@ -164,7 +182,7 @@ func (m lazyTableModel) handleKey(msg tea.KeyMsg, render bool) (lazyTableModel,
render = true
}

return m, render
return m, render, captureMessage
}

func (m lazyTableModel) viewPortCursor() int {
Expand Down
2 changes: 2 additions & 0 deletions internal/app/logstable.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ func newLogsTableModel(
)
tableLogs.KeyMap.LineUp = application.keys.Up
tableLogs.KeyMap.LineDown = application.keys.Down
tableLogs.KeyMap.PageUp = application.keys.PageUp
tableLogs.KeyMap.PageDown = application.keys.PageDown
tableLogs.KeyMap.GotoBottom = application.keys.GotoBottom
tableLogs.KeyMap.GotoTop = application.keys.GotoTop

Expand Down
14 changes: 13 additions & 1 deletion internal/keymap/keymap.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ type KeyMap struct {
Up key.Binding
Reverse key.Binding
Down key.Binding
PageUp key.Binding
PageDown key.Binding
Filter key.Binding
ToggleFullHelp key.Binding
GotoTop key.Binding
Expand All @@ -20,6 +22,7 @@ type KeyMap struct {

// GetDefaultKeys returns default KeyMap.
func GetDefaultKeys() KeyMap {
const spacebar = " "
return KeyMap{
Exit: key.NewBinding(
key.WithKeys("ctrl+c", "f10"),
Expand Down Expand Up @@ -48,6 +51,14 @@ func GetDefaultKeys() KeyMap {
key.WithKeys("down"),
key.WithHelp("↓", "Down"),
),
PageUp: key.NewBinding(
key.WithKeys("pgup"),
key.WithHelp("pgup", "page up"),
),
PageDown: key.NewBinding(
key.WithKeys("pgdown", spacebar),
key.WithHelp("pgdn", "page down"),
),
Filter: key.NewBinding(
key.WithKeys("f"),
key.WithHelp("f", "Filter"),
Expand All @@ -69,7 +80,7 @@ func GetDefaultKeys() KeyMap {

func (k KeyMap) ShortHelp() []key.Binding {
return []key.Binding{
k.Back, k.Open, k.Up, k.Down, k.ToggleFullHelp,
k.Back, k.Open, k.Up, k.Down, k.PageUp, k.PageDown, k.ToggleFullHelp,
}
}

Expand All @@ -78,6 +89,7 @@ func (k KeyMap) FullHelp() [][]key.Binding {
{k.Up, k.Down},
{k.Back, k.Open},
{k.Filter, k.Reverse},
{k.PageUp, k.PageDown},
{k.GotoTop, k.GotoBottom},
{k.ToggleFullHelp, k.Exit},
}
Expand Down
Loading