mirror of
https://github.com/charmbracelet/gum
synced 2024-05-17 21:56:42 +02:00
40 lines
851 B
Go
40 lines
851 B
Go
// Package pager provides a pager (similar to less) for the terminal.
|
|
//
|
|
// $ cat file.txt | gum page
|
|
package pager
|
|
|
|
import (
|
|
"github.com/charmbracelet/bubbles/viewport"
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
"github.com/charmbracelet/lipgloss"
|
|
)
|
|
|
|
type model struct {
|
|
viewport viewport.Model
|
|
helpStyle lipgloss.Style
|
|
}
|
|
|
|
func (m model) Init() tea.Cmd {
|
|
return nil
|
|
}
|
|
|
|
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
switch msg := msg.(type) {
|
|
case tea.WindowSizeMsg:
|
|
m.viewport.Width = msg.Width
|
|
m.viewport.Height = msg.Height - 1
|
|
case tea.KeyMsg:
|
|
switch msg.String() {
|
|
case "q", "ctrl+c", "esc":
|
|
return m, tea.Quit
|
|
}
|
|
}
|
|
var cmd tea.Cmd
|
|
m.viewport, cmd = m.viewport.Update(msg)
|
|
return m, cmd
|
|
}
|
|
|
|
func (m model) View() string {
|
|
return m.viewport.View() + "\n" + m.helpStyle.Render("↑/↓: Navigate • q: Quit")
|
|
}
|