Skip to content

Commit

Permalink
implement nano-like page up/page down functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
nimishjha committed Oct 25, 2024
1 parent a1fbcf0 commit 2a13a33
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 18 deletions.
48 changes: 30 additions & 18 deletions internal/action/actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -1676,50 +1676,62 @@ func (h *BufPane) PageDown() bool {

// SelectPageUp selects up one page
func (h *BufPane) SelectPageUp() bool {
pageOverlap := int(h.Buf.Settings["pageoverlap"].(float64))
scrollAmount := h.BufView().Height - pageOverlap
if !h.Cursor.HasSelection() {
h.Cursor.OrigSelection[0] = h.Cursor.Loc
}
h.MoveCursorUp(h.BufView().Height)
h.Cursor.SelectTo(h.Cursor.Loc)
h.MoveCursorUp(scrollAmount)
if h.Cursor.Num == 0 {
h.Cursor.SelectTo(h.Cursor.Loc)
}
h.ScrollUp(scrollAmount)
h.Relocate()
return true
}

// SelectPageDown selects down one page
func (h *BufPane) SelectPageDown() bool {
pageOverlap := int(h.Buf.Settings["pageoverlap"].(float64))
scrollAmount := h.BufView().Height - pageOverlap
if !h.Cursor.HasSelection() {
h.Cursor.OrigSelection[0] = h.Cursor.Loc
}
h.MoveCursorDown(h.BufView().Height)
h.Cursor.SelectTo(h.Cursor.Loc)
h.MoveCursorDown(scrollAmount)
if h.Cursor.Num == 0 {
h.Cursor.SelectTo(h.Cursor.Loc)
}
h.ScrollDown(scrollAmount)
h.ScrollAdjust()
h.Relocate()
return true
}

// CursorPageUp places the cursor a page up
// CursorPageUp places the cursor a page up,
// moving the view to keep cursor at the same relative position in the view
func (h *BufPane) CursorPageUp() bool {
h.Cursor.Deselect(true)

if h.Cursor.HasSelection() {
h.Cursor.Loc = h.Cursor.CurSelection[0]
h.Cursor.ResetSelection()
h.Cursor.StoreVisualX()
pageOverlap := int(h.Buf.Settings["pageoverlap"].(float64))
scrollAmount := h.BufView().Height - pageOverlap
h.MoveCursorUp(scrollAmount)
if h.Cursor.Num == 0 {
h.ScrollUp(scrollAmount)
}
h.MoveCursorUp(h.BufView().Height)
h.Relocate()
return true
}

// CursorPageDown places the cursor a page up
// CursorPageDown places the cursor a page down,
// moving the view to keep cursor at the same relative position in the view
func (h *BufPane) CursorPageDown() bool {
h.Cursor.Deselect(false)

if h.Cursor.HasSelection() {
h.Cursor.Loc = h.Cursor.CurSelection[1]
h.Cursor.ResetSelection()
h.Cursor.StoreVisualX()
pageOverlap := int(h.Buf.Settings["pageoverlap"].(float64))
scrollAmount := h.BufView().Height - pageOverlap
h.MoveCursorDown(scrollAmount)
if h.Cursor.Num == 0 {
h.ScrollDown(scrollAmount)
h.ScrollAdjust()
}
h.MoveCursorDown(h.BufView().Height)
h.Relocate()
return true
}
Expand Down
2 changes: 2 additions & 0 deletions internal/config/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ var optionValidators = map[string]optionValidator{
"helpsplit": validateChoice,
"matchbracestyle": validateChoice,
"multiopen": validateChoice,
"pageoverlap": validateNonNegativeValue,
"reload": validateChoice,
"scrollmargin": validateNonNegativeValue,
"scrollspeed": validateNonNegativeValue,
Expand Down Expand Up @@ -76,6 +77,7 @@ var defaultCommonSettings = map[string]interface{}{
"matchbraceleft": true,
"matchbracestyle": "underline",
"mkparents": false,
"pageoverlap": float64(2),
"permbackup": false,
"readonly": false,
"reload": "prompt",
Expand Down
7 changes: 7 additions & 0 deletions runtime/help/options.md
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,13 @@ Here are the available options:

default value: `tab`

* `pageoverlap`: the number of lines from the current view to keep in view
when paging up or down. If this is set to 2, for instance, and you page
down, the last two lines of the previous page will be the first two lines
of the next page.

default value: `2`

* `paste`: treat characters sent from the terminal in a single chunk as a paste
event rather than a series of manual key presses. If you are pasting using
the terminal keybinding (not `Ctrl-v`, which is micro's default paste
Expand Down

0 comments on commit 2a13a33

Please sign in to comment.