@@ -255,29 +255,41 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
255
255
256
256
func (m * model ) CursorUp () {
257
257
if m .reverse {
258
- m .cursor = clamp ( 0 , len ( m . matches ) - 1 , m . cursor + 1 )
258
+ m .cursor = ( m . cursor + 1 ) % len ( m . matches )
259
259
if len (m .matches )- m .cursor <= m .viewport .YOffset {
260
- m .viewport .SetYOffset (len (m .matches ) - m .cursor - 1 )
260
+ m .viewport .LineUp (1 )
261
+ }
262
+ if len (m .matches )- m .cursor > m .viewport .Height + m .viewport .YOffset {
263
+ m .viewport .SetYOffset (len (m .matches ) - m .viewport .Height )
261
264
}
262
265
} else {
263
- m .cursor = clamp ( 0 , len (m .matches )- 1 , m . cursor - 1 )
266
+ m .cursor = ( m . cursor - 1 + len (m .matches )) % len ( m . matches )
264
267
if m .cursor < m .viewport .YOffset {
265
- m .viewport .SetYOffset (m .cursor )
268
+ m .viewport .LineUp (1 )
269
+ }
270
+ if m .cursor >= m .viewport .YOffset + m .viewport .Height {
271
+ m .viewport .SetYOffset (len (m .matches ) - m .viewport .Height )
266
272
}
267
273
}
268
274
}
269
275
270
276
func (m * model ) CursorDown () {
271
277
if m .reverse {
272
- m .cursor = clamp ( 0 , len (m .matches )- 1 , m . cursor - 1 )
278
+ m .cursor = ( m . cursor - 1 + len (m .matches )) % len ( m . matches )
273
279
if len (m .matches )- m .cursor > m .viewport .Height + m .viewport .YOffset {
274
280
m .viewport .LineDown (1 )
275
281
}
282
+ if len (m .matches )- m .cursor <= m .viewport .YOffset {
283
+ m .viewport .GotoTop ()
284
+ }
276
285
} else {
277
- m .cursor = clamp ( 0 , len ( m . matches ) - 1 , m . cursor + 1 )
286
+ m .cursor = ( m . cursor + 1 ) % len ( m . matches )
278
287
if m .cursor >= m .viewport .YOffset + m .viewport .Height {
279
288
m .viewport .LineDown (1 )
280
289
}
290
+ if m .cursor < m .viewport .YOffset {
291
+ m .viewport .GotoTop ()
292
+ }
281
293
}
282
294
}
283
295
0 commit comments