ui

package
v1.0.14 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 12, 2026 License: MIT Imports: 30 Imported by: 0

Documentation

Index

Constants

View Source
const ThemeNameVT100 = "vt100"

ThemeNameVT100 is the DEC green phosphor theme (Unicode borders).

View Source
const ThemeNameVT52 = "vt52"

ThemeNameVT52 is the built-in theme that uses ASCII borders and glyphs.

Variables

View Source
var CatppuccinFrappe = Theme{
	Name:          "catppuccin-frappe",
	Bg:            "#303446",
	Fg:            "#c6d0f5",
	Border:        "#626880",
	BorderFocus:   "#8caaee",
	Selected:      "#8caaee",
	Unread:        "#a6d189",
	Dimmed:        "#51576d",
	StatusBar:     "#292c3c",
	StatusFg:      "#c6d0f5",
	Error:         "#e78284",
	Overlay:       "#292c3c",
	OverlayBorder: "#8caaee",
}
View Source
var CatppuccinLatte = Theme{
	Name:          "catppuccin-latte",
	Bg:            "#eff1f5",
	Fg:            "#4c4f69",
	Border:        "#9ca0b0",
	BorderFocus:   "#1e66f5",
	Selected:      "#1e66f5",
	Unread:        "#40a02b",
	Dimmed:        "#8c8fa1",
	StatusBar:     "#e6e9ef",
	StatusFg:      "#4c4f69",
	Error:         "#d20f39",
	Overlay:       "#e6e9ef",
	OverlayBorder: "#1e66f5",
}
View Source
var CatppuccinMacchiato = Theme{
	Name:          "catppuccin-macchiato",
	Bg:            "#24273a",
	Fg:            "#cad3f5",
	Border:        "#5b6078",
	BorderFocus:   "#8aadf4",
	Selected:      "#8aadf4",
	Unread:        "#a6da95",
	Dimmed:        "#494d64",
	StatusBar:     "#1e2030",
	StatusFg:      "#cad3f5",
	Error:         "#ed8796",
	Overlay:       "#1e2030",
	OverlayBorder: "#8aadf4",
}
View Source
var CatppuccinMocha = Theme{
	Name:          "catppuccin-mocha",
	Bg:            "#1e1e2e",
	Fg:            "#cdd6f4",
	Border:        "#6c7086",
	BorderFocus:   "#89b4fa",
	Selected:      "#89b4fa",
	Unread:        "#a6e3a1",
	Dimmed:        "#585b70",
	StatusBar:     "#313244",
	StatusFg:      "#cdd6f4",
	Error:         "#f38ba8",
	Overlay:       "#313244",
	OverlayBorder: "#89b4fa",
}
View Source
var CoralSunset = Theme{
	Name:          "coral-sunset",
	Bg:            "#444154",
	Fg:            "#fec9c1",
	Border:        "#fc8b79",
	BorderFocus:   "#ff7062",
	Selected:      "#ff7062",
	Unread:        "#fec9c1",
	Dimmed:        "#7a637f",
	StatusBar:     "#7a637f",
	StatusFg:      "#fec9c1",
	Error:         "#ff7062",
	Overlay:       "#7a637f",
	OverlayBorder: "#ff7062",
}

CoralSunset — muted purples with warm coral accents

View Source
var DefaultKeys = KeyMap{
	Up:       key.NewBinding(key.WithKeys("k", "up"), key.WithHelp("k/↑", "up")),
	Down:     key.NewBinding(key.WithKeys("j", "down"), key.WithHelp("j/↓", "down")),
	Left:     key.NewBinding(key.WithKeys("h", "left"), key.WithHelp("h/←", "move left")),
	Right:    key.NewBinding(key.WithKeys("l", "right"), key.WithHelp("l/→", "move right")),
	NextPane: key.NewBinding(key.WithKeys("tab", "]"), key.WithHelp("tab/]", "next pane")),
	PrevPane: key.NewBinding(key.WithKeys("shift+tab", "["), key.WithHelp("shift+tab/[", "prev pane")),
	Enter:    key.NewBinding(key.WithKeys("enter"), key.WithHelp("enter", "open")),
	Back:     key.NewBinding(key.WithKeys("esc"), key.WithHelp("esc", "back")),

	Refresh:     key.NewBinding(key.WithKeys("f"), key.WithHelp("f", "refresh feed")),
	RefreshAll:  key.NewBinding(key.WithKeys("F", "I"), key.WithHelp("F/I", "refresh all")),
	MarkRead:    key.NewBinding(key.WithKeys("r"), key.WithHelp("r", "mark read")),
	MarkAllRead: key.NewBinding(key.WithKeys("R"), key.WithHelp("R", "mark all read")),
	OpenBrowser: key.NewBinding(key.WithKeys("o"), key.WithHelp("o", "open in browser")),
	NextLink:    key.NewBinding(key.WithKeys("ctrl+n", "alt+n"), key.WithHelp("ctrl+n", "next link")),
	PrevLink:    key.NewBinding(key.WithKeys("ctrl+p", "alt+p"), key.WithHelp("ctrl+p", "prev link")),
	Search:      key.NewBinding(key.WithKeys("/"), key.WithHelp("/", "search")),
	UnreadOnly:  key.NewBinding(key.WithKeys("u"), key.WithHelp("u", "toggle unread only")),

	FeedManager:   key.NewBinding(key.WithKeys("m"), key.WithHelp("m", "feed manager")),
	ThemePicker:   key.NewBinding(key.WithKeys("T"), key.WithHelp("T", "theme picker")),
	Settings:      key.NewBinding(key.WithKeys("S"), key.WithHelp("S", "settings")),
	UpdateInstall: key.NewBinding(key.WithKeys("U"), key.WithHelp("U", "install update")),
	UpdateIgnore:  key.NewBinding(key.WithKeys("i"), key.WithHelp("i", "ignore update")),
	Help:          key.NewBinding(key.WithKeys("?"), key.WithHelp("?", "help")),
	Quit:          key.NewBinding(key.WithKeys("q"), key.WithHelp("q", "quit")),

	Summary:  key.NewBinding(key.WithKeys("s"), key.WithHelp("s", "AI summary")),
	CopyText: key.NewBinding(key.WithKeys("c"), key.WithHelp("c", "copy")),
	SaveMD:   key.NewBinding(key.WithKeys("M"), key.WithHelp("M", "save .md")),

	Add:       key.NewBinding(key.WithKeys("a"), key.WithHelp("a", "add")),
	AddFolder: key.NewBinding(key.WithKeys("n"), key.WithHelp("n", "add folder")),
	Edit:      key.NewBinding(key.WithKeys("e"), key.WithHelp("e", "edit")),
	Delete:    key.NewBinding(key.WithKeys("d"), key.WithHelp("d", "delete")),
	Import:    key.NewBinding(key.WithKeys("i"), key.WithHelp("i", "import OPML")),
	Export:    key.NewBinding(key.WithKeys("x"), key.WithHelp("x", "export OPML")),
	Move:      key.NewBinding(key.WithKeys("v"), key.WithHelp("v", "move to folder")),

	Confirm:   key.NewBinding(key.WithKeys("enter"), key.WithHelp("enter", "confirm")),
	Cancel:    key.NewBinding(key.WithKeys("esc"), key.WithHelp("esc", "cancel")),
	Space:     key.NewBinding(key.WithKeys(" "), key.WithHelp("space", "toggle")),
	Yes:       key.NewBinding(key.WithKeys("y"), key.WithHelp("y", "yes")),
	No:        key.NewBinding(key.WithKeys("n"), key.WithHelp("n", "no")),
	Tab:       key.NewBinding(key.WithKeys("tab"), key.WithHelp("tab", "next field")),
	Backspace: key.NewBinding(key.WithKeys("backspace")),
}
View Source
var Dracula = Theme{
	Name:          "dracula",
	Bg:            "#282a36",
	Fg:            "#f8f8f2",
	Border:        "#6272a4",
	BorderFocus:   "#bd93f9",
	Selected:      "#bd93f9",
	Unread:        "#50fa7b",
	Dimmed:        "#6272a4",
	StatusBar:     "#21222c",
	StatusFg:      "#f8f8f2",
	Error:         "#ff5555",
	Overlay:       "#21222c",
	OverlayBorder: "#bd93f9",
}
View Source
var GruvboxDark = Theme{
	Name:          "gruvbox-dark",
	Bg:            "#282828",
	Fg:            "#ebdbb2",
	Border:        "#504945",
	BorderFocus:   "#83a598",
	Selected:      "#83a598",
	Unread:        "#b8bb26",
	Dimmed:        "#504945",
	StatusBar:     "#1d2021",
	StatusFg:      "#ebdbb2",
	Error:         "#fb4934",
	Overlay:       "#32302f",
	OverlayBorder: "#83a598",
}
View Source
var GruvboxLight = Theme{
	Name:          "gruvbox-light",
	Bg:            "#fbf1c7",
	Fg:            "#3c3836",
	Border:        "#bdae93",
	BorderFocus:   "#076678",
	Selected:      "#076678",
	Unread:        "#79740e",
	Dimmed:        "#bdae93",
	StatusBar:     "#f2e5bc",
	StatusFg:      "#3c3836",
	Error:         "#cc241d",
	Overlay:       "#f2e5bc",
	OverlayBorder: "#076678",
}
View Source
var LavenderFieldsForever = Theme{
	Name:          "lavender-fields-forever",
	Bg:            "#382d72",
	Fg:            "#e5ccf4",
	Border:        "#b7c2c6",
	BorderFocus:   "#a080e1",
	Selected:      "#a080e1",
	Unread:        "#e5ccf4",
	Dimmed:        "#5c509c",
	StatusBar:     "#5c509c",
	StatusFg:      "#e5ccf4",
	Error:         "#ff7062",
	Overlay:       "#5c509c",
	OverlayBorder: "#a080e1",
}

LavenderFieldsForever — deep indigo with soft lavender

View Source
var MagentaGeode = Theme{
	Name:          "magenta-geode",
	Bg:            "#47003c",
	Fg:            "#f3b0dc",
	Border:        "#aa4d84",
	BorderFocus:   "#c83fa9",
	Selected:      "#c83fa9",
	Unread:        "#f3b0dc",
	Dimmed:        "#77176e",
	StatusBar:     "#77176e",
	StatusFg:      "#f3b0dc",
	Error:         "#ff7062",
	Overlay:       "#77176e",
	OverlayBorder: "#c83fa9",
}

MagentaGeode — sparkling purples and pinks

View Source
var Nord = Theme{
	Name:          "nord",
	Bg:            "#2e3440",
	Fg:            "#eceff4",
	Border:        "#4c566a",
	BorderFocus:   "#88c0d0",
	Selected:      "#88c0d0",
	Unread:        "#a3be8c",
	Dimmed:        "#4c566a",
	StatusBar:     "#3b4252",
	StatusFg:      "#d8dee9",
	Error:         "#bf616a",
	Overlay:       "#3b4252",
	OverlayBorder: "#88c0d0",
}
View Source
var OneDark = Theme{
	Name:          "one-dark",
	Bg:            "#282c34",
	Fg:            "#abb2bf",
	Border:        "#3e4451",
	BorderFocus:   "#61afef",
	Selected:      "#61afef",
	Unread:        "#98c379",
	Dimmed:        "#3e4451",
	StatusBar:     "#21252b",
	StatusFg:      "#abb2bf",
	Error:         "#e06c75",
	Overlay:       "#21252b",
	OverlayBorder: "#61afef",
}
View Source
var RosePine = Theme{
	Name:          "rose-pine",
	Bg:            "#191724",
	Fg:            "#e0def4",
	Border:        "#403d52",
	BorderFocus:   "#c4a7e7",
	Selected:      "#c4a7e7",
	Unread:        "#9ccfd8",
	Dimmed:        "#403d52",
	StatusBar:     "#1f1d2e",
	StatusFg:      "#e0def4",
	Error:         "#eb6f92",
	Overlay:       "#1f1d2e",
	OverlayBorder: "#c4a7e7",
}
View Source
var RosePineDawn = Theme{
	Name:          "rose-pine-dawn",
	Bg:            "#faf4ed",
	Fg:            "#575279",
	Border:        "#d7d2be",
	BorderFocus:   "#907aa9",
	Selected:      "#907aa9",
	Unread:        "#286983",
	Dimmed:        "#d7d2be",
	StatusBar:     "#fffaf3",
	StatusFg:      "#575279",
	Error:         "#b4637a",
	Overlay:       "#fffaf3",
	OverlayBorder: "#907aa9",
}
View Source
var RosePineMoon = Theme{
	Name:          "rose-pine-moon",
	Bg:            "#232136",
	Fg:            "#e0def4",
	Border:        "#44415a",
	BorderFocus:   "#c4a7e7",
	Selected:      "#c4a7e7",
	Unread:        "#9ccfd8",
	Dimmed:        "#44415a",
	StatusBar:     "#2a2837",
	StatusFg:      "#e0def4",
	Error:         "#eb6f92",
	Overlay:       "#2a2837",
	OverlayBorder: "#c4a7e7",
}
View Source
var TokyoNight = Theme{
	Name:          "tokyo-night",
	Bg:            "#1a1b26",
	Fg:            "#c0caf5",
	Border:        "#414868",
	BorderFocus:   "#7aa2f7",
	Selected:      "#7aa2f7",
	Unread:        "#9ece6a",
	Dimmed:        "#414868",
	StatusBar:     "#16161e",
	StatusFg:      "#a9b1d6",
	Error:         "#f7768e",
	Overlay:       "#16161e",
	OverlayBorder: "#7aa2f7",
}
View Source
var TokyoNightDay = Theme{
	Name:          "tokyo-night-day",
	Bg:            "#e1e2e7",
	Fg:            "#3760bf",
	Border:        "#a8aecb",
	BorderFocus:   "#2e7de9",
	Selected:      "#2e7de9",
	Unread:        "#587539",
	Dimmed:        "#a8aecb",
	StatusBar:     "#d0d5e3",
	StatusFg:      "#3760bf",
	Error:         "#f52a65",
	Overlay:       "#d0d5e3",
	OverlayBorder: "#2e7de9",
}
View Source
var VT100 = Theme{
	Name:          "vt100",
	Bg:            "#000000",
	Fg:            "#33ff33",
	Border:        "#145214",
	BorderFocus:   "#00ff00",
	Selected:      "#00ff00",
	Unread:        "#66ff66",
	Dimmed:        "#3dcc3d",
	StatusBar:     "#001a00",
	StatusFg:      "#33ff33",
	Error:         "#ff6b6b",
	Overlay:       "#001200",
	OverlayBorder: "#00ff00",
}

VT100 — DEC-style green phosphor on black CRT

View Source
var VT52 = Theme{
	Name:          "vt52",
	Bg:            "#000000",
	Fg:            "#ffcc66",
	Border:        "#6b4e14",
	BorderFocus:   "#ffb020",
	Selected:      "#ffb020",
	Unread:        "#ffe6a8",
	Dimmed:        "#a67c2e",
	StatusBar:     "#1a1206",
	StatusFg:      "#ffcc66",
	Error:         "#ff6666",
	Overlay:       "#140e04",
	OverlayBorder: "#ffb020",
}

VT52 — P4-style amber phosphor on black; ASCII borders when this theme is active (see ThemeUsesASCII).

Functions

func TerminalBackgroundSequences

func TerminalBackgroundSequences(themeName string) (set string, reset string)

TerminalBackgroundSequences returns ANSI OSC sequences that set and later reset the terminal's default background color for xterm-compatible terminals.

func ThemeUsesASCII

func ThemeUsesASCII(themeName string) bool

ThemeUsesASCII reports whether the theme uses ASCII box-drawing and punctuation.

Types

type AISummaryFetchedMsg

type AISummaryFetchedMsg struct {
	ArticleID int64
	Summary   string
	Err       error
}

type AIValidateDoneMsg

type AIValidateDoneMsg struct {
	Err error
}

AIValidateDoneMsg is sent after settings triggers an async AI credential check.

type ArticleContentFetchedMsg

type ArticleContentFetchedMsg struct {
	ArticleID int64
	Content   string
	Err       error
}

type ArticleReadUpdatedMsg

type ArticleReadUpdatedMsg struct {
	ArticleID int64
	FeedID    int64
	WasRead   bool
	Read      bool
	Advance   bool
	Err       error
}

type ArticlesLoadedMsg

type ArticlesLoadedMsg struct {
	FeedID   int64
	Articles []db.Article
	Err      error
}

type ClipboardCopiedMsg

type ClipboardCopiedMsg struct {
	Err error
}

type ErrMsg

type ErrMsg struct{ Err error }

type FeedDeletedMsg

type FeedDeletedMsg struct {
	FeedID int64
	Err    error
}

type FeedManager

type FeedManager struct {
	// contains filtered or unexported fields
}

func NewFeedManager

func NewFeedManager(database *db.DB) FeedManager

func NewFeedManagerWithSource

func NewFeedManagerWithSource(database *db.DB, sourceCfg config.SourceConfig) FeedManager

func NewRemoteFeedManager

func NewRemoteFeedManager(sourceName string, feeds []db.Feed, folders []db.Folder) FeedManager

func (FeedManager) Update

func (fm FeedManager) Update(msg tea.Msg, keys KeyMap) (FeedManager, tea.Cmd, bool)

func (*FeedManager) View

func (fm *FeedManager) View(width, height int, styles Styles, icons bool) string

type FeedRefreshedMsg

type FeedRefreshedMsg struct {
	FeedID      int64
	Title       string
	Description string
	FaviconURL  string
	Articles    []db.Article
	Err         error
	Result      *feed.FetchResult // full result; always non-nil when coming from refreshFeedCmd
	Manual      bool              // true when triggered by user keypress (f), not startup auto-refresh
}

type FeedSavedMsg

type FeedSavedMsg struct {
	Feed db.Feed
	Err  error
}

type FeedsLoadedMsg

type FeedsLoadedMsg struct {
	Feeds         []db.Feed
	Folders       []db.Folder
	RemoteStreams map[int64]string
	Err           error
}

type FeedsReadUpdatedMsg

type FeedsReadUpdatedMsg struct {
	FeedIDs []int64
	Err     error
}

type FolderDeletedMsg

type FolderDeletedMsg struct {
	FolderID int64
	Err      error
}

type FolderSavedMsg

type FolderSavedMsg struct {
	Folder db.Folder
	Err    error
}

type KeyMap

type KeyMap struct {
	Up       key.Binding
	Down     key.Binding
	Left     key.Binding
	Right    key.Binding
	NextPane key.Binding
	PrevPane key.Binding
	Enter    key.Binding
	Back     key.Binding

	Refresh     key.Binding
	RefreshAll  key.Binding
	MarkRead    key.Binding
	MarkAllRead key.Binding
	OpenBrowser key.Binding
	NextLink    key.Binding
	PrevLink    key.Binding
	Search      key.Binding
	UnreadOnly  key.Binding

	FeedManager   key.Binding
	ThemePicker   key.Binding
	Settings      key.Binding
	UpdateInstall key.Binding
	UpdateIgnore  key.Binding
	Help          key.Binding
	Quit          key.Binding

	Summary  key.Binding // fetch/show AI summary (articles or content pane)
	CopyText key.Binding // copy summary to clipboard
	SaveMD   key.Binding // save summary as .md file

	// Feed manager specific
	Add       key.Binding
	AddFolder key.Binding
	Edit      key.Binding
	Delete    key.Binding
	Import    key.Binding
	Export    key.Binding
	Move      key.Binding

	// Overlay / input
	Confirm   key.Binding
	Cancel    key.Binding
	Space     key.Binding
	Yes       key.Binding
	No        key.Binding
	Tab       key.Binding
	Backspace key.Binding
}

type Model

type Model struct {
	// contains filtered or unexported fields
}

func NewModel

func NewModel(database *db.DB, cfg config.Config, currentVersion string, previewManualUpdate bool) Model

func (Model) Init

func (m Model) Init() tea.Cmd

func (Model) Update

func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd)

func (Model) View

func (m Model) View() string

type OPMLExportedMsg

type OPMLExportedMsg struct {
	Path string
	Err  error
}

type OPMLImportedMsg

type OPMLImportedMsg struct {
	Count int
	Err   error
}

type RemoteFeedAddedMsg

type RemoteFeedAddedMsg struct {
	StreamID     string
	Title        string
	FeedCount    int
	SettingsOnly bool
	Source       config.SourceConfig
	Err          error
}

type RestartedMsg

type RestartedMsg struct {
	Err error
}

type Settings

type Settings struct {
	// contains filtered or unexported fields
}

func (Settings) ApplyTo

func (s Settings) ApplyTo(cfg config.Config) config.Config

ApplyTo merges the settings screen state back into a Config.

func (Settings) Update

func (s Settings) Update(msg tea.Msg, keys KeyMap) (Settings, tea.Cmd, bool)

func (Settings) View

func (s Settings) View(width, height int, chrome managerChrome) string

type StatusClearMsg

type StatusClearMsg struct{}

type Styles

type Styles struct {
	Theme Theme
	// PlainUI is true for the vt52 theme (ASCII borders and glyphs).
	PlainUI bool
	// Density is normalized ("comfortable" | "compact") and matches config.Display.Density.
	Density string

	// Pane containers
	FeedsPane          lipgloss.Style
	ArticlesPane       lipgloss.Style
	ContentPane        lipgloss.Style
	PaneHeaderActive   lipgloss.Style
	PaneHeaderInactive lipgloss.Style

	// Feed list items
	FeedItem                  lipgloss.Style
	FeedItemSelected          lipgloss.Style
	FeedItemSelectedFocused   lipgloss.Style
	FeedItemSelectedUnfocused lipgloss.Style
	UnreadBadge               lipgloss.Style

	// Article list items
	ArticleUnread   lipgloss.Style
	ArticleRead     lipgloss.Style
	ArticleSelected lipgloss.Style
	ArticleTime     lipgloss.Style
	UnreadDot       lipgloss.Style

	// Content pane
	ContentTitle     lipgloss.Style
	ContentMeta      lipgloss.Style
	ContentBody      lipgloss.Style
	ContentFocusLine lipgloss.Style

	// Status bar
	StatusBar       lipgloss.Style
	StatusError     lipgloss.Style
	StatusSpinner   lipgloss.Style
	StatusHint      lipgloss.Style
	StatusBarJoiner lipgloss.Style
	StatusNotice    lipgloss.Style

	// Overlay chrome
	Overlay      lipgloss.Style
	OverlayTitle lipgloss.Style
	OverlayHint  lipgloss.Style

	// Inputs inside overlays/feed manager
	InputFocused   lipgloss.Style
	InputUnfocused lipgloss.Style
	InputLabel     lipgloss.Style

	// Help screen
	HelpSection     lipgloss.Style
	HelpSectionBody lipgloss.Style
	HelpKey         lipgloss.Style
	HelpDesc        lipgloss.Style

	// Spinner
	Spinner lipgloss.Style
}

func BuildStyles

func BuildStyles(t Theme, density string) Styles

func (Styles) InlineMidDot

func (s Styles) InlineMidDot() string

func (Styles) ListItemLineStride

func (s Styles) ListItemLineStride() int

ListItemLineStride is the number of terminal lines one feed/article list row occupies.

func (Styles) StatusBarSepText

func (s Styles) StatusBarSepText() string

func (Styles) ThemePickerCursor

func (s Styles) ThemePickerCursor() string

type SummarySavedMsg

type SummarySavedMsg struct {
	Path string
	Err  error
}

type Theme

type Theme struct {
	Name          string
	Bg            lipgloss.Color
	Fg            lipgloss.Color
	Border        lipgloss.Color
	BorderFocus   lipgloss.Color
	Selected      lipgloss.Color
	Unread        lipgloss.Color
	Dimmed        lipgloss.Color
	StatusBar     lipgloss.Color
	StatusFg      lipgloss.Color
	Error         lipgloss.Color
	Overlay       lipgloss.Color
	OverlayBorder lipgloss.Color
}

func ApplyDisplayOverrides

func ApplyDisplayOverrides(t Theme, cfg config.Config) Theme

ApplyDisplayOverrides returns the effective theme for cfg (merge vt52/vt100 tweaks).

func MergeRetroTweak

func MergeRetroTweak(base Theme, tw config.RetroTerminalTweak) Theme

MergeRetroTweak applies optional #rrggbb overrides from config onto a base retro theme.

func MergedBuiltinThemeAtIndex

func MergedBuiltinThemeAtIndex(cfg config.Config, idx int) Theme

MergedBuiltinThemeAtIndex returns the theme at idx with cfg-based retro overrides applied.

func MergedThemeFromConfig

func MergedThemeFromConfig(cfg config.Config) (Theme, int)

MergedThemeFromConfig resolves cfg.Theme to a builtin theme and applies retro overrides.

func ThemeByName

func ThemeByName(name string) (Theme, int)

type UpdateCheckedMsg

type UpdateCheckedMsg struct {
	Result update.CheckResult
	Manual bool
	Err    error
}

type UpdateDownloadedMsg

type UpdateDownloadedMsg struct {
	Asset update.DownloadedAsset
	Err   error
}

type UpdateInstalledMsg

type UpdateInstalledMsg struct {
	Result update.InstallResult
	Err    error
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL