Skip to content

Commit c477c68

Browse files
rebeliceclaude
andcommitted
fix(ui): improve preview pane and JSONB viewer scrolling
- Fix JSONB viewer dimensions based on terminal size (max 100 chars wide) - Change preview pane scroll keys from Ctrl+↑↓ to J/K for consistency - Change JSONB viewer open key from J to v to free up J/K for scrolling - Add J/K scroll support in JSONB viewer's preview pane - Update help text to reflect new key bindings 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent f46c598 commit c477c68

3 files changed

Lines changed: 37 additions & 15 deletions

File tree

internal/app/app.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1227,10 +1227,10 @@ func (a *App) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
12271227
// Handle preview pane scrolling (when visible)
12281228
if activeTable != nil && activeTable.PreviewPane != nil && activeTable.PreviewPane.Visible {
12291229
switch msg.String() {
1230-
case "ctrl+up":
1230+
case "K":
12311231
activeTable.PreviewPane.ScrollUp()
12321232
return a, nil
1233-
case "ctrl+down":
1233+
case "J":
12341234
activeTable.PreviewPane.ScrollDown()
12351235
return a, nil
12361236
}
@@ -1419,12 +1419,19 @@ func (a *App) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
14191419
}
14201420
}
14211421
return a, nil
1422-
case "J":
1423-
// Open JSONB viewer if cell contains JSONB (uppercase J to avoid conflict with vim down)
1422+
case "v":
1423+
// Open JSONB viewer if cell contains JSONB
14241424
selectedRow, selectedCol := activeTable.GetSelectedCell()
14251425
if selectedRow >= 0 && selectedCol >= 0 && selectedRow < len(activeTable.Rows) && selectedCol < len(activeTable.Columns) {
14261426
cellValue := activeTable.Rows[selectedRow][selectedCol]
14271427
if jsonb.IsJSONB(cellValue) {
1428+
// Set viewer dimensions based on terminal size (with max width limit)
1429+
viewerWidth := a.state.Width * 2 / 3
1430+
if viewerWidth > 100 {
1431+
viewerWidth = 100
1432+
}
1433+
a.jsonbViewer.Width = viewerWidth
1434+
a.jsonbViewer.Height = a.state.Height * 3 / 4
14281435
if err := a.jsonbViewer.SetValue(cellValue); err == nil {
14291436
a.showJSONBViewer = true
14301437
}
@@ -3007,6 +3014,13 @@ func (a *App) handleMouseEvent(msg tea.MouseMsg) (tea.Model, tea.Cmd) {
30073014
cellValue := activeTable.Rows[actualRow][actualCol]
30083015
// Check if it's JSON/JSONB data
30093016
if jsonb.IsJSONB(cellValue) {
3017+
// Set viewer dimensions based on terminal size (with max width limit)
3018+
viewerWidth := a.state.Width * 2 / 3
3019+
if viewerWidth > 100 {
3020+
viewerWidth = 100
3021+
}
3022+
a.jsonbViewer.Width = viewerWidth
3023+
a.jsonbViewer.Height = a.state.Height * 3 / 4
30103024
if err := a.jsonbViewer.SetValue(cellValue); err == nil {
30113025
a.showJSONBViewer = true
30123026
}

internal/ui/components/jsonb_viewer.go

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -444,14 +444,6 @@ func (jv *JSONBViewer) Update(msg tea.KeyMsg) (*JSONBViewer, tea.Cmd) {
444444
jv.adjustScroll()
445445
}
446446

447-
case "J":
448-
// Jump to next sibling
449-
jv.jumpToNextSibling()
450-
451-
case "K":
452-
// Jump to previous sibling
453-
jv.jumpToPrevSibling()
454-
455447
case "p":
456448
// Toggle preview pane
457449
if jv.previewPane != nil {
@@ -460,6 +452,22 @@ func (jv *JSONBViewer) Update(msg tea.KeyMsg) (*JSONBViewer, tea.Cmd) {
460452
jv.previewPane.Toggle()
461453
}
462454

455+
case "K":
456+
// Scroll preview pane up (when visible), otherwise jump to previous sibling
457+
if jv.previewPane != nil && jv.previewPane.Visible {
458+
jv.previewPane.ScrollUp()
459+
} else {
460+
jv.jumpToPrevSibling()
461+
}
462+
463+
case "J":
464+
// Scroll preview pane down (when visible), otherwise jump to next sibling
465+
if jv.previewPane != nil && jv.previewPane.Visible {
466+
jv.previewPane.ScrollDown()
467+
} else {
468+
jv.jumpToNextSibling()
469+
}
470+
463471
case "P":
464472
// Jump to parent
465473
jv.jumpToParent()
@@ -846,7 +854,7 @@ func (jv *JSONBViewer) RenderPreviewPanel(width, height int) string {
846854
// Footer with help text
847855
helpParts := []string{}
848856
if jv.previewPane.IsScrollable() {
849-
helpParts = append(helpParts, "Ctrl-↑↓: Scroll")
857+
helpParts = append(helpParts, "J/K: Scroll")
850858
}
851859
helpParts = append(helpParts, "y: Copy", "p: Toggle")
852860

internal/ui/components/preview_pane.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,13 +260,13 @@ func (p *PreviewPane) View() string {
260260
// Build help text - use abbreviated form for narrow panes
261261
helpParts := []string{}
262262
if p.IsScrollable() {
263-
helpParts = append(helpParts, "↑↓")
263+
helpParts = append(helpParts, "J/K:scroll")
264264
}
265265
helpParts = append(helpParts, "y:copy", "p:close")
266266

267267
// Add JSONB hint if content is JSON
268268
if jsonb.IsJSONB(p.Content) {
269-
helpParts = append(helpParts, "J:tree")
269+
helpParts = append(helpParts, "v:tree")
270270
}
271271

272272
helpText := strings.Join(helpParts, " ")

0 commit comments

Comments
 (0)