Skip to content

Commit 9f0f53f

Browse files
authored
Merge pull request #82 from simeji/add-page-updown
Add page up/down
2 parents 1faeac4 + 972f301 commit 9f0f53f

File tree

4 files changed

+73
-6
lines changed

4 files changed

+73
-6
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ jid < file.json
120120
|`CTRL` + `K`|Scroll json buffer 1 line upwards|
121121
|`CTRL` + `G`|Scroll json buffer to bottom|
122122
|`CTRL` + `T`|Scroll json buffer to top|
123+
|`CTRL` + `N`|Scroll json buffer 'Page Down'|
124+
|`CTRL` + `P`|Scroll json buffer 'Page Up'|
123125
|`CTRL` + `L`|Change view mode whole json or keys (only object)|
124126
|`ESC`|Hide a candidate box|
125127

cmd/jid/jid.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"github.com/simeji/jid"
99
)
1010

11-
const VERSION = "0.7.3"
11+
const VERSION = "0.7.5"
1212

1313
func main() {
1414
content := os.Stdin
@@ -114,6 +114,12 @@ CTRL-G
114114
CTRL-T
115115
Scroll json buffer to top
116116
117+
CTRL-N
118+
Scroll json buffer 'Page Down'
119+
120+
CTRL-P
121+
Scroll json buffer 'Page Up'
122+
117123
CTRL-L
118124
Change view mode whole json or keys (only object)
119125

engine.go

+27-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"io"
55
"strings"
66

7-
"github.com/nsf/termbox-go"
7+
termbox "github.com/nsf/termbox-go"
88
)
99

1010
const (
@@ -151,6 +151,12 @@ func (e *Engine) Run() EngineResultInterface {
151151
e.scrollToBottom(len(contents))
152152
case termbox.KeyCtrlT:
153153
e.scrollToTop()
154+
case termbox.KeyCtrlN:
155+
_, h := termbox.Size()
156+
e.scrollPageDown(len(contents), h)
157+
case termbox.KeyCtrlP:
158+
_, h := termbox.Size()
159+
e.scrollPageUp(h)
154160
case termbox.KeyCtrlL:
155161
e.toggleKeymode()
156162
case termbox.KeyCtrlU:
@@ -165,14 +171,14 @@ func (e *Engine) Run() EngineResultInterface {
165171
var err error
166172
if e.prettyResult {
167173
cc, _, _, err = e.manager.GetPretty(e.query, true)
168-
}else{
174+
} else {
169175
cc, _, _, err = e.manager.Get(e.query, true)
170176
}
171177

172178
return &EngineResult{
173-
content: cc,
174-
qs: e.query.StringGet(),
175-
err: err,
179+
content: cc,
180+
qs: e.query.StringGet(),
181+
err: err,
176182
}
177183
}
178184
e.confirmCandidate()
@@ -253,6 +259,22 @@ func (e *Engine) scrollToTop() {
253259
e.contentOffset = 0
254260
}
255261

262+
func (e *Engine) scrollPageDown(rownum int, height int) {
263+
co := rownum - 1
264+
if o := rownum - e.contentOffset; o > height {
265+
co = e.contentOffset + (height - DefaultY)
266+
}
267+
e.contentOffset = co
268+
}
269+
270+
func (e *Engine) scrollPageUp(height int) {
271+
co := 0
272+
if o := e.contentOffset - (height - DefaultY); o > 0 {
273+
co = o
274+
}
275+
e.contentOffset = co
276+
}
277+
256278
func (e *Engine) toggleKeymode() {
257279
e.keymode = !e.keymode
258280
}

engine_test.go

+37
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,43 @@ func TestScrollToBottomAndTop(t *testing.T) {
114114
assert.Equal(0, e.contentOffset)
115115
}
116116

117+
func TestScrollPageUpDown(t *testing.T) {
118+
var assert = assert.New(t)
119+
e := getEngine(`{"named":"go","NameTest":[1,2,3]}`, "")
120+
121+
cl := len(e.getContents())
122+
// Then DefaultY = 1
123+
e.scrollPageDown(cl, 3)
124+
assert.Equal(2, e.contentOffset)
125+
e.scrollPageDown(cl, 3)
126+
assert.Equal(4, e.contentOffset)
127+
128+
e.scrollPageUp(3)
129+
assert.Equal(2, e.contentOffset)
130+
131+
// term height changed
132+
e.scrollPageDown(cl, 5)
133+
assert.Equal(6, e.contentOffset)
134+
135+
e.scrollPageDown(cl, 5)
136+
assert.Equal(7, e.contentOffset)
137+
138+
e.scrollPageDown(cl, 5)
139+
assert.Equal(7, e.contentOffset)
140+
141+
e.scrollPageUp(5)
142+
assert.Equal(3, e.contentOffset)
143+
144+
e.scrollPageUp(5)
145+
assert.Equal(0, e.contentOffset)
146+
147+
e.scrollPageUp(5)
148+
assert.Equal(0, e.contentOffset)
149+
150+
// term height > content size + default Y (a filter query line)
151+
e.scrollPageDown(cl, 10)
152+
assert.Equal(7, e.contentOffset)
153+
}
117154
func TestGetContents(t *testing.T) {
118155
var assert = assert.New(t)
119156

0 commit comments

Comments
 (0)