diff --git a/cmd/micro/actions.go b/cmd/micro/actions.go index a291c88d..83eec144 100644 --- a/cmd/micro/actions.go +++ b/cmd/micro/actions.go @@ -1515,6 +1515,42 @@ func (v *View) PageDown(usePlugin bool) bool { return false } +// SelectPageUp selects up one page +func (v *View) SelectPageUp(usePlugin bool) bool { + if usePlugin && !PreActionCall("SelectPageUp", v) { + return false + } + + if !v.Cursor.HasSelection() { + v.Cursor.OrigSelection[0] = v.Cursor.Loc + } + v.Cursor.UpN(v.Height) + v.Cursor.SelectTo(v.Cursor.Loc) + + if usePlugin { + return PostActionCall("SelectPageUp", v) + } + return true +} + +// SelectPageDown selects down one page +func (v *View) SelectPageDown(usePlugin bool) bool { + if usePlugin && !PreActionCall("SelectPageDown", v) { + return false + } + + if !v.Cursor.HasSelection() { + v.Cursor.OrigSelection[0] = v.Cursor.Loc + } + v.Cursor.DownN(v.Height) + v.Cursor.SelectTo(v.Cursor.Loc) + + if usePlugin { + return PostActionCall("SelectPageDown", v) + } + return true +} + // CursorPageUp places the cursor a page up func (v *View) CursorPageUp(usePlugin bool) bool { if usePlugin && !PreActionCall("CursorPageUp", v) { diff --git a/cmd/micro/bindings.go b/cmd/micro/bindings.go index d8a0ede0..e3a02841 100644 --- a/cmd/micro/bindings.go +++ b/cmd/micro/bindings.go @@ -80,6 +80,8 @@ var bindingActions = map[string]func(*View, bool) bool{ "End": (*View).End, "PageUp": (*View).PageUp, "PageDown": (*View).PageDown, + "SelectPageUp": (*View).SelectPageUp, + "SelectPageDown": (*View).SelectPageDown, "HalfPageUp": (*View).HalfPageUp, "HalfPageDown": (*View).HalfPageDown, "StartOfLine": (*View).StartOfLine, @@ -255,6 +257,7 @@ var bindingKeys = map[string]tcell.Key{ "Escape": tcell.KeyEscape, "Enter": tcell.KeyEnter, "Backspace": tcell.KeyBackspace2, + "OldBackspace": tcell.KeyBackspace, // I renamed these keys to PageUp and PageDown but I don't want to break someone's keybindings "PgUp": tcell.KeyPgUp, diff --git a/cmd/micro/cellview.go b/cmd/micro/cellview.go index 52fe73ff..b0cb6523 100644 --- a/cmd/micro/cellview.go +++ b/cmd/micro/cellview.go @@ -76,8 +76,8 @@ func (c *CellView) Draw(buf *Buffer, top, height, left, width int) { curX := buf.Cursor.X curLoc := buf.Cursor.Loc if buf.Settings["matchbraceleft"].(bool) { - curX-- if curX > 0 { + curX-- curLoc = curLoc.Move(-1, buf) } } diff --git a/cmd/micro/view.go b/cmd/micro/view.go index 724d2bac..d6d9470f 100644 --- a/cmd/micro/view.go +++ b/cmd/micro/view.go @@ -198,7 +198,10 @@ func (v *View) ToggleTabbar() { } func (v *View) paste(clip string) { - leadingWS := GetLeadingWhitespace(v.Buf.Line(v.Cursor.Y)) + leadingWS := "" + if v.Cursor.X > 0 { + leadingWS = GetLeadingWhitespace(v.Buf.Line(v.Cursor.Y)) + } if v.Cursor.HasSelection() { v.Cursor.DeleteSelection() diff --git a/runtime/help/keybindings.md b/runtime/help/keybindings.md index 922b5b7e..eee3e2fa 100644 --- a/runtime/help/keybindings.md +++ b/runtime/help/keybindings.md @@ -187,6 +187,8 @@ Start End PageUp PageDown +SelectPageUp +SelectPageDown HalfPageUp HalfPageDown StartOfLine @@ -352,6 +354,7 @@ CtrlRightSq CtrlCarat CtrlUnderscore Backspace +OldBackspace Tab Esc Escape