mirror of
https://github.com/anotherhadi/spilltea.git
synced 2026-05-20 09:42:34 +02:00
Change help menus: Only display shortcuts used on the page
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
This commit is contained in:
@@ -54,3 +54,8 @@ func (g GlobalKeyMap) Bindings() []key.Binding {
|
|||||||
g.ScrollUp, g.ScrollDown,
|
g.ScrollUp, g.ScrollDown,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CommonBindings returns keys available on every page.
|
||||||
|
func (g GlobalKeyMap) CommonBindings() []key.Binding {
|
||||||
|
return []key.Binding{g.Quit, g.Help, g.OpenLogs, g.ToggleSidebar}
|
||||||
|
}
|
||||||
|
|||||||
+18
-16
@@ -176,22 +176,24 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
if !m.activeIsEditing() {
|
if !m.activeIsEditing() {
|
||||||
switch {
|
switch {
|
||||||
case key.Matches(msg, keys.Keys.Global.CopyAs):
|
case key.Matches(msg, keys.Keys.Global.CopyAs):
|
||||||
if m.page == pageDiff {
|
var raw, scheme string
|
||||||
if raw := m.diff.CurrentRaw(); raw != "" {
|
switch m.page {
|
||||||
m.copyAs.SetSize(m.width, m.height)
|
case pageDiff:
|
||||||
m.copyAs.Open(copyasUI.OpenMsg{
|
raw = m.diff.CurrentRaw()
|
||||||
RawRequest: raw,
|
scheme = "https"
|
||||||
Scheme: "https",
|
case pageIntercept:
|
||||||
})
|
raw = m.intercept.CurrentRaw()
|
||||||
}
|
scheme = m.intercept.CurrentScheme()
|
||||||
} else if m.page == pageIntercept {
|
case pageHistory:
|
||||||
if raw := m.intercept.CurrentRaw(); raw != "" {
|
raw = m.history.CurrentRaw()
|
||||||
m.copyAs.SetSize(m.width, m.height)
|
scheme = m.history.CurrentScheme()
|
||||||
m.copyAs.Open(copyasUI.OpenMsg{
|
case pageReplay:
|
||||||
RawRequest: raw,
|
raw = m.replay.CurrentRaw()
|
||||||
Scheme: m.intercept.CurrentScheme(),
|
scheme = m.replay.CurrentScheme()
|
||||||
})
|
}
|
||||||
}
|
if raw != "" {
|
||||||
|
m.copyAs.SetSize(m.width, m.height)
|
||||||
|
m.copyAs.Open(copyasUI.OpenMsg{RawRequest: raw, Scheme: scheme})
|
||||||
}
|
}
|
||||||
return m, nil
|
return m, nil
|
||||||
|
|
||||||
|
|||||||
@@ -243,14 +243,6 @@ func lcsAlignedDiff(a, b, aHL, bHL []string) (left, right []diffLine) {
|
|||||||
return left, right
|
return left, right
|
||||||
}
|
}
|
||||||
|
|
||||||
func diffBindings() []key.Binding {
|
|
||||||
g := keys.Keys.Global
|
|
||||||
return []key.Binding{
|
|
||||||
g.Up, g.Down, g.ScrollUp, g.ScrollDown,
|
|
||||||
g.CycleFocus, keys.Keys.Diff.Clear,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type diffKeyMap struct{ width int }
|
type diffKeyMap struct{ width int }
|
||||||
|
|
||||||
func (diffKeyMap) ShortHelp() []key.Binding {
|
func (diffKeyMap) ShortHelp() []key.Binding {
|
||||||
@@ -259,6 +251,9 @@ func (diffKeyMap) ShortHelp() []key.Binding {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m diffKeyMap) FullHelp() [][]key.Binding {
|
func (m diffKeyMap) FullHelp() [][]key.Binding {
|
||||||
all := append(diffBindings(), keys.Keys.Global.Bindings()...)
|
g := keys.Keys.Global
|
||||||
|
pageGlobals := []key.Binding{g.Up, g.Down, g.CycleFocus, g.ScrollUp, g.ScrollDown, g.Left, g.Right, g.Copy, g.CopyAs}
|
||||||
|
all := append(keys.Keys.Diff.Bindings(), pageGlobals...)
|
||||||
|
all = append(all, g.CommonBindings()...)
|
||||||
return keys.ChunkByWidth(all, m.width)
|
return keys.ChunkByWidth(all, m.width)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,13 @@ import (
|
|||||||
|
|
||||||
spilltea "github.com/anotherhadi/spilltea"
|
spilltea "github.com/anotherhadi/spilltea"
|
||||||
|
|
||||||
|
"charm.land/bubbles/v2/help"
|
||||||
|
"charm.land/bubbles/v2/key"
|
||||||
"charm.land/bubbles/v2/viewport"
|
"charm.land/bubbles/v2/viewport"
|
||||||
tea "charm.land/bubbletea/v2"
|
tea "charm.land/bubbletea/v2"
|
||||||
|
"charm.land/lipgloss/v2"
|
||||||
|
"github.com/anotherhadi/spilltea/internal/keys"
|
||||||
|
"github.com/anotherhadi/spilltea/internal/style"
|
||||||
)
|
)
|
||||||
|
|
||||||
func readDoc(name string) string {
|
func readDoc(name string) string {
|
||||||
@@ -23,14 +28,51 @@ var contentMarkdown = strings.Join([]string{
|
|||||||
|
|
||||||
type Model struct {
|
type Model struct {
|
||||||
viewport viewport.Model
|
viewport viewport.Model
|
||||||
|
help help.Model
|
||||||
|
|
||||||
|
width int
|
||||||
|
height int
|
||||||
}
|
}
|
||||||
|
|
||||||
func New() Model {
|
func New() Model {
|
||||||
return Model{
|
return Model{
|
||||||
viewport: viewport.New(),
|
viewport: viewport.New(),
|
||||||
|
help: style.NewHelp(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e Model) Init() tea.Cmd {
|
func (e Model) Init() tea.Cmd {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Model) SetSize(w, h int) {
|
||||||
|
m.width = w
|
||||||
|
m.height = h
|
||||||
|
m.help.SetWidth(w - 2)
|
||||||
|
|
||||||
|
statusH := strings.Count(m.renderStatusBar(), "\n") + 1
|
||||||
|
frameW := windowStyle().GetHorizontalFrameSize()
|
||||||
|
frameH := windowStyle().GetVerticalFrameSize()
|
||||||
|
|
||||||
|
m.viewport.SetWidth(w - frameW)
|
||||||
|
m.viewport.SetHeight(h - frameH - statusH)
|
||||||
|
m.renderMarkdown()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Model) renderStatusBar() string {
|
||||||
|
return lipgloss.NewStyle().Padding(0, 1).Render(m.help.View(docsKeyMap{width: m.width}))
|
||||||
|
}
|
||||||
|
|
||||||
|
type docsKeyMap struct{ width int }
|
||||||
|
|
||||||
|
func (docsKeyMap) ShortHelp() []key.Binding {
|
||||||
|
g := keys.Keys.Global
|
||||||
|
return []key.Binding{g.Up, g.Down, g.Help}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m docsKeyMap) FullHelp() [][]key.Binding {
|
||||||
|
g := keys.Keys.Global
|
||||||
|
pageGlobals := []key.Binding{g.Up, g.Down, g.ScrollUp, g.ScrollDown}
|
||||||
|
all := append(pageGlobals, g.CommonBindings()...)
|
||||||
|
return keys.ChunkByWidth(all, m.width)
|
||||||
|
}
|
||||||
|
|||||||
@@ -35,16 +35,10 @@ func (e Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
step = 1
|
step = 1
|
||||||
}
|
}
|
||||||
e.viewport.SetYOffset(e.viewport.YOffset() + step)
|
e.viewport.SetYOffset(e.viewport.YOffset() + step)
|
||||||
|
case key.Matches(msg, g.Help):
|
||||||
|
e.help.ShowAll = !e.help.ShowAll
|
||||||
|
e.SetSize(e.width, e.height)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return e, nil
|
return e, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Model) SetSize(w, h int) {
|
|
||||||
frameW := windowStyle().GetHorizontalFrameSize()
|
|
||||||
frameH := windowStyle().GetVerticalFrameSize()
|
|
||||||
|
|
||||||
m.viewport.SetWidth(w - frameW)
|
|
||||||
m.viewport.SetHeight(h - frameH)
|
|
||||||
m.renderMarkdown()
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package docs
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
_ "embed"
|
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
tea "charm.land/bubbletea/v2"
|
tea "charm.land/bubbletea/v2"
|
||||||
@@ -20,7 +19,10 @@ func windowStyle() lipgloss.Style {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (e Model) View() tea.View {
|
func (e Model) View() tea.View {
|
||||||
return tea.NewView(windowStyle().Render(e.viewport.View()))
|
return tea.NewView(lipgloss.JoinVertical(lipgloss.Left,
|
||||||
|
windowStyle().Render(e.viewport.View()),
|
||||||
|
e.renderStatusBar(),
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Model) renderMarkdown() {
|
func (m *Model) renderMarkdown() {
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ func (m *Model) recalcSizes() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *Model) renderStatusBar() string {
|
func (m *Model) renderStatusBar() string {
|
||||||
return lipgloss.NewStyle().Padding(0, 1).Render(m.help.View(findingsKeyMap{}))
|
return lipgloss.NewStyle().Padding(0, 1).Render(m.help.View(findingsKeyMap{width: m.width}))
|
||||||
}
|
}
|
||||||
|
|
||||||
// RefreshCmd loads findings from the database.
|
// RefreshCmd loads findings from the database.
|
||||||
@@ -143,14 +143,18 @@ func renderMarkdown(src string, width int) string {
|
|||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
type findingsKeyMap struct{}
|
type findingsKeyMap struct{ width int }
|
||||||
|
|
||||||
func (findingsKeyMap) ShortHelp() []key.Binding {
|
func (findingsKeyMap) ShortHelp() []key.Binding {
|
||||||
g := keys.Keys.Global
|
g := keys.Keys.Global
|
||||||
f := keys.Keys.Findings
|
f := keys.Keys.Findings
|
||||||
return []key.Binding{g.Up, g.Down, f.Dismiss}
|
return []key.Binding{g.Up, g.Down, f.Dismiss, g.Help}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (findingsKeyMap) FullHelp() [][]key.Binding {
|
func (m findingsKeyMap) FullHelp() [][]key.Binding {
|
||||||
return [][]key.Binding{findingsKeyMap{}.ShortHelp()}
|
g := keys.Keys.Global
|
||||||
|
pageGlobals := []key.Binding{g.Up, g.Down, g.ScrollUp, g.ScrollDown}
|
||||||
|
all := append(keys.Keys.Findings.Bindings(), pageGlobals...)
|
||||||
|
all = append(all, g.CommonBindings()...)
|
||||||
|
return keys.ChunkByWidth(all, m.width)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,6 +76,9 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
step = 1
|
step = 1
|
||||||
}
|
}
|
||||||
m.bodyViewport.SetYOffset(m.bodyViewport.YOffset() + step)
|
m.bodyViewport.SetYOffset(m.bodyViewport.YOffset() + step)
|
||||||
|
case key.Matches(msg, g.Help):
|
||||||
|
m.help.ShowAll = !m.help.ShowAll
|
||||||
|
m.recalcSizes()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return m, nil
|
return m, nil
|
||||||
|
|||||||
@@ -152,7 +152,10 @@ func (historyKeyMap) ShortHelp() []key.Binding {
|
|||||||
|
|
||||||
func (m historyKeyMap) FullHelp() [][]key.Binding {
|
func (m historyKeyMap) FullHelp() [][]key.Binding {
|
||||||
h := keys.Keys.History
|
h := keys.Keys.History
|
||||||
|
g := keys.Keys.Global
|
||||||
|
pageGlobals := []key.Binding{g.Up, g.Down, g.CycleFocus, g.ScrollUp, g.ScrollDown, g.Left, g.Right, g.Escape, g.SendToReplay, g.SendToDiff, g.Copy, g.CopyAs}
|
||||||
all := []key.Binding{h.DeleteEntry, h.DeleteAll, h.Filter, h.SqlQuery}
|
all := []key.Binding{h.DeleteEntry, h.DeleteAll, h.Filter, h.SqlQuery}
|
||||||
all = append(all, keys.Keys.Global.Bindings()...)
|
all = append(all, pageGlobals...)
|
||||||
|
all = append(all, g.CommonBindings()...)
|
||||||
return keys.ChunkByWidth(all, m.width)
|
return keys.ChunkByWidth(all, m.width)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ func (interceptKeyMap) ShortHelp() []key.Binding {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m interceptKeyMap) FullHelp() [][]key.Binding {
|
func (m interceptKeyMap) FullHelp() [][]key.Binding {
|
||||||
all := append(keys.Keys.Intercept.Bindings(), keys.Keys.Global.Bindings()...)
|
g := keys.Keys.Global
|
||||||
|
pageGlobals := []key.Binding{g.Up, g.Down, g.CycleFocus, g.ScrollUp, g.ScrollDown, g.Left, g.Right, g.Escape, g.SendToReplay, g.SendToDiff, g.Copy, g.CopyAs}
|
||||||
|
all := append(keys.Keys.Intercept.Bindings(), pageGlobals...)
|
||||||
|
all = append(all, g.CommonBindings()...)
|
||||||
return keys.ChunkByWidth(all, m.width)
|
return keys.ChunkByWidth(all, m.width)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -196,6 +196,7 @@ func (m *Model) refreshListViewport() {
|
|||||||
type pluginsKeyMap struct {
|
type pluginsKeyMap struct {
|
||||||
editing bool
|
editing bool
|
||||||
hasConfig bool
|
hasConfig bool
|
||||||
|
width int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k pluginsKeyMap) ShortHelp() []key.Binding {
|
func (k pluginsKeyMap) ShortHelp() []key.Binding {
|
||||||
@@ -210,11 +211,20 @@ func (k pluginsKeyMap) ShortHelp() []key.Binding {
|
|||||||
key.WithHelp(g.ScrollUp.Help().Key+"/"+g.ScrollDown.Help().Key, "scroll detail"),
|
key.WithHelp(g.ScrollUp.Help().Key+"/"+g.ScrollDown.Help().Key, "scroll detail"),
|
||||||
)
|
)
|
||||||
if k.hasConfig {
|
if k.hasConfig {
|
||||||
return []key.Binding{pk.Toggle, pk.EditConfig, pk.Filter, scrollHint}
|
return []key.Binding{pk.Toggle, pk.EditConfig, pk.Filter, scrollHint, g.Help}
|
||||||
}
|
}
|
||||||
return []key.Binding{pk.Toggle, pk.Filter, scrollHint}
|
return []key.Binding{pk.Toggle, pk.Filter, scrollHint, g.Help}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k pluginsKeyMap) FullHelp() [][]key.Binding {
|
func (k pluginsKeyMap) FullHelp() [][]key.Binding {
|
||||||
return [][]key.Binding{k.ShortHelp()}
|
g := keys.Keys.Global
|
||||||
|
if k.editing {
|
||||||
|
return [][]key.Binding{k.ShortHelp()}
|
||||||
|
}
|
||||||
|
pk := keys.Keys.Plugins
|
||||||
|
pageGlobals := []key.Binding{g.Up, g.Down, g.ScrollUp, g.ScrollDown, g.Escape}
|
||||||
|
all := []key.Binding{pk.Toggle, pk.EditConfig, pk.Filter}
|
||||||
|
all = append(all, pageGlobals...)
|
||||||
|
all = append(all, g.CommonBindings()...)
|
||||||
|
return keys.ChunkByWidth(all, k.width)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,9 +120,9 @@ func (m *Model) renderStatusBar() string {
|
|||||||
escKey := keys.Keys.Global.Escape.Help().Key
|
escKey := keys.Keys.Global.Escape.Help().Key
|
||||||
accent := lipgloss.NewStyle().Foreground(s.Primary)
|
accent := lipgloss.NewStyle().Foreground(s.Primary)
|
||||||
filterLine := pad.Render(accent.Render(filterKey) + " " + s.Bold.Render(m.filter) + s.Faint.Render(" "+escKey+" to clear"))
|
filterLine := pad.Render(accent.Render(filterKey) + " " + s.Bold.Render(m.filter) + s.Faint.Render(" "+escKey+" to clear"))
|
||||||
return lipgloss.JoinVertical(lipgloss.Left, filterLine, pad.Render(m.help.View(pluginsKeyMap{editing: m.editing, hasConfig: m.hasConfig()})))
|
return lipgloss.JoinVertical(lipgloss.Left, filterLine, pad.Render(m.help.View(pluginsKeyMap{editing: m.editing, hasConfig: m.hasConfig(), width: m.width})))
|
||||||
}
|
}
|
||||||
return pad.Render(m.help.View(pluginsKeyMap{editing: m.editing, hasConfig: m.hasConfig()}))
|
return pad.Render(m.help.View(pluginsKeyMap{editing: m.editing, hasConfig: m.hasConfig(), width: m.width}))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Model) renderList() string {
|
func (m *Model) renderList() string {
|
||||||
|
|||||||
@@ -187,6 +187,9 @@ func (replayKeyMap) ShortHelp() []key.Binding {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m replayKeyMap) FullHelp() [][]key.Binding {
|
func (m replayKeyMap) FullHelp() [][]key.Binding {
|
||||||
all := append(keys.Keys.Replay.Bindings(), keys.Keys.Global.Bindings()...)
|
g := keys.Keys.Global
|
||||||
|
pageGlobals := []key.Binding{g.Up, g.Down, g.ScrollUp, g.ScrollDown, g.Left, g.Right, g.Escape, g.Copy, g.CopyAs}
|
||||||
|
all := append(keys.Keys.Replay.Bindings(), pageGlobals...)
|
||||||
|
all = append(all, g.CommonBindings()...)
|
||||||
return keys.ChunkByWidth(all, m.width)
|
return keys.ChunkByWidth(all, m.width)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user