styles

package
v0.178.0 Latest Latest
Warning

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

Go to latest
Published: Aug 21, 2026 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const InlineDiffContextLines = 2

InlineDiffContextLines is the unchanged-context line count shown above/below each change in the *inline* diffs: the Edit approval preview and the post-run Edit/MultiEdit diffs in the conversation. The full /diff viewer keeps the wider diffview default so it stays a full-file review surface.

Variables

This section is empty.

Functions

func IsLightTheme added in v0.178.0

func IsLightTheme(theme ui.Theme) bool

isLightTheme classifies the theme by the luminance of its assistant (primary text) color. Dark themes have light text (high luminance); light themes have dark text (low luminance).

func RenderTraceTree added in v0.178.0

func RenderTraceTree(roots []*telemetry.TraceSpan, style TreeStyle) string

RenderTraceTree renders the span tree via lipgloss/v2/tree with durations right-aligned in a column:

session (standard, success)          42.1s
├── chat deepseek/deepseek-v4-flash   3.2s
╰── execute_tool Bash                27.5s

Failed spans carry a trailing [error: <type>] marker.

func SnippetStartLine added in v0.178.0

func SnippetStartLine(filePath, oldString string) int

func ThemeIsDark added in v0.178.0

func ThemeIsDark(sp *Provider) bool

themeIsDark reports whether the active theme is dark, defaulting to dark when no theme is set. Used to pick the embedded editor's background.

Types

type CharmTheme added in v0.178.0

type CharmTheme struct{}

CharmTheme is built on the official Charm palette (charmtone). It's the modern, on-brand option that uses the same semantic tokens Crush ships with - Sapphire as the primary blue, Cherry for errors, Julep for success, Smoke/Iron as neutrals over a Pepper base.

func NewCharmTheme added in v0.178.0

func NewCharmTheme() *CharmTheme

func (*CharmTheme) GetAccentColor added in v0.178.0

func (t *CharmTheme) GetAccentColor() string

func (*CharmTheme) GetAssistantColor added in v0.178.0

func (t *CharmTheme) GetAssistantColor() string

func (*CharmTheme) GetBorderColor added in v0.178.0

func (t *CharmTheme) GetBorderColor() string

func (*CharmTheme) GetDiffAddColor added in v0.178.0

func (t *CharmTheme) GetDiffAddColor() string

func (*CharmTheme) GetDiffRemoveColor added in v0.178.0

func (t *CharmTheme) GetDiffRemoveColor() string

func (*CharmTheme) GetDimColor added in v0.178.0

func (t *CharmTheme) GetDimColor() string

func (*CharmTheme) GetErrorColor added in v0.178.0

func (t *CharmTheme) GetErrorColor() string

func (*CharmTheme) GetStatusColor added in v0.178.0

func (t *CharmTheme) GetStatusColor() string

func (*CharmTheme) GetSuccessColor added in v0.178.0

func (t *CharmTheme) GetSuccessColor() string

func (*CharmTheme) GetUserColor added in v0.178.0

func (t *CharmTheme) GetUserColor() string

type DiffInfo added in v0.178.0

type DiffInfo struct {
	FilePath   string
	OldContent string
	NewContent string
	Title      string
}

DiffInfo carries the inputs for a single diff render.

type DiffRenderer added in v0.178.0

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

DiffRenderer is a thin adapter that preserves the legacy public surface (RenderEditToolArguments / RenderMultiEditToolArguments / RenderWriteToolArguments / RenderDiff / RenderColoredDiff) and delegates the actual diff rendering to the diffview package. The internal renderer there uses go-udiff for a correct LCS-based diff algorithm and optional chroma syntax highlighting.

func NewDiffRenderer added in v0.178.0

func NewDiffRenderer(styleProvider *Provider) *DiffRenderer

NewDiffRenderer creates a new diff renderer with colored output.

func NewToolDiffRenderer added in v0.178.0

func NewToolDiffRenderer(styleProvider *Provider) *DiffRenderer

NewToolDiffRenderer creates a tool diff renderer (alias for NewDiffRenderer).

func (*DiffRenderer) RenderColoredDiff added in v0.178.0

func (d *DiffRenderer) RenderColoredDiff(oldContent, newContent string) string

RenderColoredDiff is a minimal compatibility wrapper that renders a simple diff with a placeholder title and file path.

func (*DiffRenderer) RenderDiff added in v0.178.0

func (d *DiffRenderer) RenderDiff(info DiffInfo) string

RenderDiff renders a full diff between OldContent and NewContent with a title, file header with addition/removal stats, and the underlying DiffView body. Empty contents are handled gracefully (new file, deleted file).

func (*DiffRenderer) RenderEditToolArguments added in v0.178.0

func (d *DiffRenderer) RenderEditToolArguments(args map[string]any) string

RenderEditToolArguments renders Edit tool arguments as a diff. When the target file can be read and old_string is found in it, it diffs the real file content so the configured context lines surround the change with actual neighbouring file lines; otherwise it falls back to a snippet diff of old_string vs new_string.

func (*DiffRenderer) RenderMultiEditToolArguments added in v0.178.0

func (d *DiffRenderer) RenderMultiEditToolArguments(args map[string]any) string

RenderMultiEditToolArguments renders MultiEdit tool arguments as a sequence of snippet diffs (one per edit).

func (*DiffRenderer) RenderWriteToolArguments added in v0.178.0

func (d *DiffRenderer) RenderWriteToolArguments(args map[string]any) string

RenderWriteToolArguments renders Write tool arguments. If the target file already exists, the rendered output is a full diff against the new content; otherwise it's a NEW FILE badge plus a numbered preview of the first lines.

func (*DiffRenderer) SetContextLines added in v0.178.0

func (d *DiffRenderer) SetContextLines(n int) *DiffRenderer

SetContextLines overrides the number of unchanged context lines shown above and below each change. Pass 0 (the default) to keep the diffview default. Returns the renderer for chaining.

func (*DiffRenderer) SetMaxLines added in v0.178.0

func (d *DiffRenderer) SetMaxLines(n int) *DiffRenderer

SetMaxLines overrides the new-file preview line cap: 0 keeps the default, a positive n caps at n, and a negative n renders every line (for callers that bound the height themselves, like the scrollable approval box). Chains.

func (*DiffRenderer) SetStartLine added in v0.178.0

func (d *DiffRenderer) SetStartLine(n int) *DiffRenderer

SetStartLine tells the renderer that the diffed content is a snippet whose first line is line n in the real file (1-based), so gutter line numbers show the actual file positions instead of counting from 1. Pass 0 (the default) when the content is already whole-file. Chains.

func (*DiffRenderer) SetWidth added in v0.178.0

func (d *DiffRenderer) SetWidth(w int) *DiffRenderer

SetWidth tells the renderer the available terminal width so the underlying DiffView can pick a width-adaptive layout (split when >= 160 cols).

type DiffStats added in v0.178.0

type DiffStats struct {
	LinesAdded   int
	LinesRemoved int
	LinesChanged int
}

DiffStats represents statistics about a diff.

type DraculaTheme added in v0.178.0

type DraculaTheme struct{}

DraculaTheme provides the popular Dracula color scheme

func NewDraculaTheme added in v0.178.0

func NewDraculaTheme() *DraculaTheme

func (*DraculaTheme) GetAccentColor added in v0.178.0

func (t *DraculaTheme) GetAccentColor() string

func (*DraculaTheme) GetAssistantColor added in v0.178.0

func (t *DraculaTheme) GetAssistantColor() string

func (*DraculaTheme) GetBorderColor added in v0.178.0

func (t *DraculaTheme) GetBorderColor() string

func (*DraculaTheme) GetDiffAddColor added in v0.178.0

func (t *DraculaTheme) GetDiffAddColor() string

func (*DraculaTheme) GetDiffRemoveColor added in v0.178.0

func (t *DraculaTheme) GetDiffRemoveColor() string

func (*DraculaTheme) GetDimColor added in v0.178.0

func (t *DraculaTheme) GetDimColor() string

func (*DraculaTheme) GetErrorColor added in v0.178.0

func (t *DraculaTheme) GetErrorColor() string

func (*DraculaTheme) GetStatusColor added in v0.178.0

func (t *DraculaTheme) GetStatusColor() string

func (*DraculaTheme) GetSuccessColor added in v0.178.0

func (t *DraculaTheme) GetSuccessColor() string

func (*DraculaTheme) GetUserColor added in v0.178.0

func (t *DraculaTheme) GetUserColor() string

type GithubLightTheme added in v0.178.0

type GithubLightTheme struct{}

GithubLightTheme provides a light theme similar to GitHub's interface

func NewGithubLightTheme added in v0.178.0

func NewGithubLightTheme() *GithubLightTheme

func (*GithubLightTheme) GetAccentColor added in v0.178.0

func (t *GithubLightTheme) GetAccentColor() string

func (*GithubLightTheme) GetAssistantColor added in v0.178.0

func (t *GithubLightTheme) GetAssistantColor() string

func (*GithubLightTheme) GetBorderColor added in v0.178.0

func (t *GithubLightTheme) GetBorderColor() string

func (*GithubLightTheme) GetDiffAddColor added in v0.178.0

func (t *GithubLightTheme) GetDiffAddColor() string

func (*GithubLightTheme) GetDiffRemoveColor added in v0.178.0

func (t *GithubLightTheme) GetDiffRemoveColor() string

func (*GithubLightTheme) GetDimColor added in v0.178.0

func (t *GithubLightTheme) GetDimColor() string

func (*GithubLightTheme) GetErrorColor added in v0.178.0

func (t *GithubLightTheme) GetErrorColor() string

func (*GithubLightTheme) GetStatusColor added in v0.178.0

func (t *GithubLightTheme) GetStatusColor() string

func (*GithubLightTheme) GetSuccessColor added in v0.178.0

func (t *GithubLightTheme) GetSuccessColor() string

func (*GithubLightTheme) GetUserColor added in v0.178.0

func (t *GithubLightTheme) GetUserColor() string

type Provider added in v0.56.0

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

Provider centralizes all styling logic and provides complete abstraction from Lipgloss. Components should NEVER import lipgloss directly - they interact with styling through this provider.

func NewProvider added in v0.56.0

func NewProvider(themeService ui.ThemeService) *Provider

NewProvider creates a new style provider

func (*Provider) ClampToSize added in v0.122.1

func (p *Provider) ClampToSize(s string, width, height int) string

ClampToSize hard-truncates s to width columns and height rows (ANSI-aware) so a frame containing an over-wide or over-tall line cannot wrap and corrupt the inline (non-alt-screen) render. MaxWidth/MaxHeight truncate rather than pad or wrap.

func (*Provider) GetCurrentTheme added in v0.118.0

func (p *Provider) GetCurrentTheme() ui.Theme

GetCurrentTheme returns the active theme, exposing it for callers that need to derive colors outside of Provider's pre-baked render methods (e.g. the diffview Style selector).

func (*Provider) GetHeight added in v0.56.0

func (p *Provider) GetHeight(s string) int

GetHeight returns the rendered height of a string

func (*Provider) GetSpinnerStyle added in v0.56.0

func (p *Provider) GetSpinnerStyle() lipgloss.Style

GetSpinnerStyle returns a lipgloss.Style for use with third-party components like Bubbles spinner This is an exception to complete abstraction, needed for library compatibility

func (*Provider) GetThemeColor added in v0.56.0

func (p *Provider) GetThemeColor(colorName string) string

GetThemeColor returns a theme color for custom styling (use sparingly)

func (*Provider) GetThemeService added in v0.61.0

func (p *Provider) GetThemeService() ui.ThemeService

GetThemeService returns the underlying theme service for advanced integrations This is needed for components like the markdown renderer that need direct theme access

func (*Provider) GetWidth added in v0.56.0

func (p *Provider) GetWidth(s string) int

GetWidth returns the rendered width of a string

func (*Provider) JoinHorizontal added in v0.56.0

func (p *Provider) JoinHorizontal(strs ...string) string

JoinHorizontal joins strings horizontally

func (*Provider) JoinVertical added in v0.56.0

func (p *Provider) JoinVertical(strs ...string) string

JoinVertical joins strings vertically

func (*Provider) PlaceCenter added in v0.56.0

func (p *Provider) PlaceCenter(width, height int, content string) string

PlaceCenter places content in the center of the given dimensions

func (*Provider) PlaceCenterTop added in v0.56.0

func (p *Provider) PlaceCenterTop(width, height int, content string) string

PlaceCenterTop places content in the center-top of the given dimensions

func (*Provider) PlaceHorizontal added in v0.56.0

func (p *Provider) PlaceHorizontal(width int, left string, right string) string

PlaceHorizontal places two components horizontally with the second one on the right

func (*Provider) RenderApprovalButton added in v0.56.0

func (p *Provider) RenderApprovalButton(text string, selected bool, isApprove bool) string

RenderApprovalButton renders an approval-style button with custom colors and fixed width

func (*Provider) RenderAssistantText added in v0.56.0

func (p *Provider) RenderAssistantText(text string) string

RenderAssistantText renders text in the assistant color

func (*Provider) RenderBold added in v0.56.0

func (p *Provider) RenderBold(text string) string

RenderBold renders text with bold styling

func (*Provider) RenderBoldText added in v0.56.0

func (p *Provider) RenderBoldText(text string) string

RenderBoldText renders bold text

func (*Provider) RenderBordered added in v0.56.0

func (p *Provider) RenderBordered(content string, width int) string

RenderBordered renders content with a border

func (*Provider) RenderBorderedBox added in v0.56.0

func (p *Provider) RenderBorderedBox(text, borderColor string, paddingV, paddingH int) string

RenderBorderedBox renders text inside a rounded border with padding

func (*Provider) RenderButton added in v0.56.0

func (p *Provider) RenderButton(text string, selected bool) string

RenderButton renders a button or selectable option

func (*Provider) RenderCenteredBoldWithColor added in v0.56.0

func (p *Provider) RenderCenteredBoldWithColor(text, hexColor string, width int) string

RenderCenteredBoldWithColor renders text centered, bold, and with a specific color

func (*Provider) RenderCenteredBorderedBox added in v0.56.0

func (p *Provider) RenderCenteredBorderedBox(text, borderColor string, width, height, paddingV, paddingH int) string

RenderCenteredBorderedBox renders text in a centered bordered box with specified dimensions

func (*Provider) RenderCodeBlock added in v0.56.0

func (p *Provider) RenderCodeBlock(code string, width int) string

RenderCodeBlock renders a code block with subtle background

func (*Provider) RenderCreatedText added in v0.60.0

func (p *Provider) RenderCreatedText(text string) string

RenderCreatedText renders "created" status text (success color, bold)

func (*Provider) RenderCursor added in v0.56.0

func (p *Provider) RenderCursor(text string) string

RenderCursor renders text with cursor styling. It uses lipgloss Reverse, which swaps the foreground/background of whatever theme colours are in effect, so the cursor stays legible on every theme instead of relying on a hardcoded grey-on-black pair.

func (*Provider) RenderDiffAddition added in v0.56.0

func (p *Provider) RenderDiffAddition(content string) string

RenderDiffAddition renders a diff addition line

func (*Provider) RenderDiffRemoval added in v0.56.0

func (p *Provider) RenderDiffRemoval(content string) string

RenderDiffRemoval renders a diff removal line

func (*Provider) RenderDimText added in v0.56.0

func (p *Provider) RenderDimText(text string) string

RenderDimText renders text in a dimmed style

func (*Provider) RenderErrorIcon added in v0.60.0

func (p *Provider) RenderErrorIcon(text string) string

RenderErrorIcon renders an error icon (X mark, etc.)

func (*Provider) RenderErrorText added in v0.56.0

func (p *Provider) RenderErrorText(text string) string

RenderErrorText renders text in the error color

func (*Provider) RenderHeader added in v0.56.0

func (p *Provider) RenderHeader(text string, width int) string

RenderHeader renders a centered header

func (*Provider) RenderInputField added in v0.56.0

func (p *Provider) RenderInputField(content string, width int, focused bool, branchLabel string) string

RenderInputField renders an input field with border. When branchLabel is non-empty it is embedded in the top border, right-aligned, as a titled border (e.g. "╭──────── ⎇ main ─╮"); pass "" for a plain border.

func (*Provider) RenderInputPlaceholder added in v0.56.0

func (p *Provider) RenderInputPlaceholder(text string) string

RenderInputPlaceholder renders placeholder text

func (*Provider) RenderLeftAlignedBorderedBox added in v0.56.0

func (p *Provider) RenderLeftAlignedBorderedBox(text, borderColor string, width, height, paddingV, paddingH int) string

RenderLeftAlignedBorderedBox renders text in a left-aligned bordered box with specified dimensions

func (*Provider) RenderListItem added in v0.56.0

func (p *Provider) RenderListItem(content string, selected bool) string

RenderListItem renders a list item (selected or unselected)

func (*Provider) RenderListItemWithDescription added in v0.56.0

func (p *Provider) RenderListItemWithDescription(title, description string, selected bool) string

RenderListItemWithDescription renders a list item with a description

func (*Provider) RenderMetricText added in v0.60.0

func (p *Provider) RenderMetricText(text string) string

RenderMetricText renders metric/info text (e.g., byte counts, line counts)

func (*Provider) RenderModal added in v0.56.0

func (p *Provider) RenderModal(content string, width int) string

RenderModal renders a modal with rounded border

func (*Provider) RenderModalTitle added in v0.56.0

func (p *Provider) RenderModalTitle(title string) string

RenderModalTitle renders a modal title with emphasis

func (*Provider) RenderPathText added in v0.60.0

func (p *Provider) RenderPathText(text string) string

RenderPathText renders a file path with accent color and bold

func (*Provider) RenderSelectedIndicator added in v0.128.0

func (p *Provider) RenderSelectedIndicator(text string) string

RenderSelectedIndicator renders the status-bar indicator holding the selection as a padded pill: reverse video paints the cell background in the accent color with the terminal background as text color, which works on any theme (Theme exposes no background color). The one-column side padding adds two columns of width - splitPartsIntoLines accounts for it.

func (*Provider) RenderSeparator added in v0.56.0

func (p *Provider) RenderSeparator(width int, char string) string

RenderSeparator renders a horizontal separator line

func (*Provider) RenderSpinner added in v0.56.0

func (p *Provider) RenderSpinner(frame string) string

RenderSpinner renders a spinner with status color

func (*Provider) RenderStatusBadge added in v0.56.0

func (p *Provider) RenderStatusBadge(text string, positive bool) string

RenderStatusBadge renders a status badge (e.g., "ENABLED", "DISABLED")

func (*Provider) RenderStatusLine added in v0.76.5

func (p *Provider) RenderStatusLine(content string) string

RenderStatusLine renders a status line with no padding

func (*Provider) RenderStyledText added in v0.56.0

func (p *Provider) RenderStyledText(text string, opts StyleOptions) string

RenderStyledText renders text with custom Lipgloss-compatible styling This is an escape hatch for complex styling not covered by other methods

func (*Provider) RenderSuccessIcon added in v0.60.0

func (p *Provider) RenderSuccessIcon(text string) string

RenderSuccessIcon renders a success icon (checkmark, etc.)

func (*Provider) RenderSuccessText added in v0.56.0

func (p *Provider) RenderSuccessText(text string) string

RenderSuccessText renders text in the success color

func (*Provider) RenderTitledCard added in v0.143.0

func (p *Provider) RenderTitledCard(content, title, borderColor, titleColor string, width int) string

RenderTitledCard renders content in a rounded, width-set, padded box with title spliced into the top border (right-aligned). Reuses the same top-border splice as RenderInputField. Pass "" for title to get a plain bordered box at the given width.

func (*Provider) RenderTopAlignedBorderedBox added in v0.56.0

func (p *Provider) RenderTopAlignedBorderedBox(text, borderColor string, width, height, paddingV, paddingH int) string

RenderTopAlignedBorderedBox renders text in a top-left aligned bordered box with specified dimensions

func (*Provider) RenderUpdatedText added in v0.60.0

func (p *Provider) RenderUpdatedText(text string) string

RenderUpdatedText renders "updated" status text (status/warning color, bold)

func (*Provider) RenderUserText added in v0.56.0

func (p *Provider) RenderUserText(text string) string

RenderUserText renders text in the user color

func (*Provider) RenderWarningText added in v0.56.0

func (p *Provider) RenderWarningText(text string) string

RenderWarningText renders text in the warning/status color

func (*Provider) RenderWithColor added in v0.56.0

func (p *Provider) RenderWithColor(text, hexColor string) string

RenderWithColor renders text with a specific hex color

func (*Provider) RenderWithColorAndBold added in v0.56.0

func (p *Provider) RenderWithColorAndBold(text, hexColor string) string

RenderWithColorAndBold renders text with color and bold

func (*Provider) ToolTitleColor added in v0.143.0

func (p *Provider) ToolTitleColor(toolName string) string

ToolTitleColor returns the accent hex color used to differentiate a tool type on its card's titled border (AC8, no emoji): shells, file mutations, A2A, and generic each get a distinct theme color.

type StyleOptions added in v0.56.0

type StyleOptions struct {
	Foreground   string
	Background   string
	Bold         bool
	Italic       bool
	Faint        bool
	Width        int
	Padding      [2]int
	MarginBottom int
	MarginTop    int
}

StyleOptions provides options for custom text styling

type ThemeProvider added in v0.178.0

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

ThemeProvider implements ui.ThemeService and manages available themes

func NewThemeProvider added in v0.178.0

func NewThemeProvider() *ThemeProvider

NewThemeProvider creates a new theme provider with default themes

func (*ThemeProvider) GetCurrentTheme added in v0.178.0

func (tp *ThemeProvider) GetCurrentTheme() ui.Theme

GetCurrentTheme returns the currently active theme (implements ui.ThemeService interface)

func (*ThemeProvider) GetCurrentThemeName added in v0.178.0

func (tp *ThemeProvider) GetCurrentThemeName() string

GetCurrentThemeName returns the name of the currently active theme (implements ui.ThemeService interface)

func (*ThemeProvider) GetTheme added in v0.178.0

func (tp *ThemeProvider) GetTheme(name string) (ui.Theme, error)

GetTheme returns the theme by name, or the current theme if name is empty

func (*ThemeProvider) ListThemes added in v0.178.0

func (tp *ThemeProvider) ListThemes() []string

ListThemes returns all available theme names (implements ui.ThemeService interface)

func (*ThemeProvider) SetCurrentTheme added in v0.178.0

func (tp *ThemeProvider) SetCurrentTheme(name string) error

SetCurrentTheme is an alias for SetTheme for backward compatibility

func (*ThemeProvider) SetTheme added in v0.178.0

func (tp *ThemeProvider) SetTheme(name string) error

SetTheme sets the current theme by name (implements ui.ThemeService interface)

type TokyoNightTheme added in v0.178.0

type TokyoNightTheme struct{}

TokyoNightTheme is the default theme (same as DefaultTheme)

func NewTokyoNightTheme added in v0.178.0

func NewTokyoNightTheme() *TokyoNightTheme

func (*TokyoNightTheme) GetAccentColor added in v0.178.0

func (t *TokyoNightTheme) GetAccentColor() string

func (*TokyoNightTheme) GetAssistantColor added in v0.178.0

func (t *TokyoNightTheme) GetAssistantColor() string

func (*TokyoNightTheme) GetBorderColor added in v0.178.0

func (t *TokyoNightTheme) GetBorderColor() string

func (*TokyoNightTheme) GetDiffAddColor added in v0.178.0

func (t *TokyoNightTheme) GetDiffAddColor() string

func (*TokyoNightTheme) GetDiffRemoveColor added in v0.178.0

func (t *TokyoNightTheme) GetDiffRemoveColor() string

func (*TokyoNightTheme) GetDimColor added in v0.178.0

func (t *TokyoNightTheme) GetDimColor() string

func (*TokyoNightTheme) GetErrorColor added in v0.178.0

func (t *TokyoNightTheme) GetErrorColor() string

func (*TokyoNightTheme) GetStatusColor added in v0.178.0

func (t *TokyoNightTheme) GetStatusColor() string

func (*TokyoNightTheme) GetSuccessColor added in v0.178.0

func (t *TokyoNightTheme) GetSuccessColor() string

func (*TokyoNightTheme) GetUserColor added in v0.178.0

func (t *TokyoNightTheme) GetUserColor() string

type TreeStyle added in v0.178.0

type TreeStyle struct {
	Enumerator lipgloss.Style // tree connector glyphs
	Duration   lipgloss.Style
	Error      lipgloss.Style // the [error: ...] marker
}

TreeStyle colorizes the rendered tree segments. The zero value renders plain text, which suits markdown/code-fence output.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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