star/bed/editor/key.go
2025-04-26 19:33:14 +08:00

199 lines
6.8 KiB
Go

package editor
import (
"b612.me/apps/b612/bed/event"
"b612.me/apps/b612/bed/key"
"b612.me/apps/b612/bed/mode"
)
func defaultKeyManagers() map[mode.Mode]*key.Manager {
kms := make(map[mode.Mode]*key.Manager)
km := defaultNormalAndVisual()
km.Register(event.Quit, "c-w", "q")
km.Register(event.Quit, "c-w", "c-q")
km.Register(event.Quit, "c-w", "c")
km.RegisterBang(event.Quit, "Z", "Q")
km.Register(event.WriteQuit, "Z", "Z")
km.Register(event.Suspend, "c-z")
km.Register(event.JumpTo, "\x1d")
km.Register(event.JumpBack, "c-t")
km.Register(event.DeleteByte, "x")
km.Register(event.DeleteByte, "delete")
km.Register(event.DeletePrevByte, "X")
km.Register(event.Increment, "c-a")
km.Register(event.Increment, "+")
km.Register(event.Decrement, "c-x")
km.Register(event.Decrement, "-")
km.Register(event.ShiftLeft, "<")
km.Register(event.ShiftRight, ">")
km.Register(event.ShowBinary, "g", "b")
km.Register(event.ShowDecimal, "g", "d")
km.Register(event.Paste, "p")
km.Register(event.PastePrev, "P")
km.Register(event.StartInsert, "i")
km.Register(event.StartInsertHead, "I")
km.Register(event.StartAppend, "a")
km.Register(event.StartAppendEnd, "A")
km.Register(event.StartReplace, "R")
km.Register(event.Undo, "u")
km.Register(event.Redo, "c-r")
km.Register(event.StartVisual, "v")
km.Register(event.New, "c-w", "n")
km.Register(event.New, "c-w", "c-n")
km.Register(event.Only, "c-w", "o")
km.Register(event.Only, "c-w", "c-o")
km.Register(event.Alternative, "\x1e")
km.Register(event.FocusWindowDown, "c-w", "down")
km.Register(event.FocusWindowDown, "c-w", "c-j")
km.Register(event.FocusWindowDown, "c-w", "j")
km.Register(event.FocusWindowUp, "c-w", "up")
km.Register(event.FocusWindowUp, "c-w", "c-k")
km.Register(event.FocusWindowUp, "c-w", "k")
km.Register(event.FocusWindowLeft, "c-w", "left")
km.Register(event.FocusWindowLeft, "c-w", "c-h")
km.Register(event.FocusWindowLeft, "c-w", "backspace")
km.Register(event.FocusWindowLeft, "c-w", "h")
km.Register(event.FocusWindowRight, "c-w", "right")
km.Register(event.FocusWindowRight, "c-w", "c-l")
km.Register(event.FocusWindowRight, "c-w", "l")
km.Register(event.FocusWindowTopLeft, "c-w", "t")
km.Register(event.FocusWindowTopLeft, "c-w", "c-t")
km.Register(event.FocusWindowBottomRight, "c-w", "b")
km.Register(event.FocusWindowBottomRight, "c-w", "c-b")
km.Register(event.FocusWindowPrevious, "c-w", "p")
km.Register(event.FocusWindowPrevious, "c-w", "c-p")
km.Register(event.MoveWindowTop, "c-w", "K")
km.Register(event.MoveWindowBottom, "c-w", "J")
km.Register(event.MoveWindowLeft, "c-w", "H")
km.Register(event.MoveWindowRight, "c-w", "L")
kms[mode.Normal] = km
km = key.NewManager(false)
km.Register(event.ExitInsert, "escape")
km.Register(event.ExitInsert, "c-c")
km.Register(event.CursorUp, "up")
km.Register(event.CursorDown, "down")
km.Register(event.CursorLeft, "left")
km.Register(event.CursorRight, "right")
km.Register(event.CursorUp, "c-p")
km.Register(event.CursorDown, "c-n")
km.Register(event.CursorPrev, "c-b")
km.Register(event.CursorNext, "c-f")
km.Register(event.PageUp, "pgup")
km.Register(event.PageDown, "pgdn")
km.Register(event.PageTop, "home")
km.Register(event.PageEnd, "end")
km.Register(event.Backspace, "backspace")
km.Register(event.Backspace, "backspace2")
km.Register(event.Delete, "delete")
km.Register(event.SwitchFocus, "tab")
km.Register(event.SwitchFocus, "backtab")
kms[mode.Insert] = km
kms[mode.Replace] = km
km = defaultNormalAndVisual()
km.Register(event.ExitVisual, "escape")
km.Register(event.ExitVisual, "c-c")
km.Register(event.ExitVisual, "v")
km.Register(event.SwitchVisualEnd, "o")
km.Register(event.SwitchVisualEnd, "O")
km.Register(event.Copy, "y")
km.Register(event.Cut, "x")
km.Register(event.Cut, "d")
km.Register(event.Cut, "delete")
kms[mode.Visual] = km
km = key.NewManager(false)
km.Register(event.CursorUp, "up")
km.Register(event.CursorDown, "down")
km.Register(event.CursorLeft, "left")
km.Register(event.CursorRight, "right")
km.Register(event.CursorUp, "c-p")
km.Register(event.CursorDown, "c-n")
km.Register(event.CursorLeft, "c-b")
km.Register(event.CursorRight, "c-f")
km.Register(event.CursorHead, "home")
km.Register(event.CursorHead, "c-a")
km.Register(event.CursorEnd, "end")
km.Register(event.CursorEnd, "c-e")
km.Register(event.BackspaceCmdline, "c-h")
km.Register(event.BackspaceCmdline, "backspace")
km.Register(event.BackspaceCmdline, "backspace2")
km.Register(event.DeleteCmdline, "delete")
km.Register(event.DeleteWordCmdline, "c-w")
km.Register(event.ClearToHeadCmdline, "c-u")
km.Register(event.ClearCmdline, "c-k")
km.Register(event.ExitCmdline, "escape")
km.Register(event.ExitCmdline, "c-c")
km.Register(event.CompleteForwardCmdline, "tab")
km.Register(event.CompleteBackCmdline, "backtab")
km.Register(event.ExecuteCmdline, "enter")
km.Register(event.ExecuteCmdline, "c-j")
km.Register(event.ExecuteCmdline, "c-m")
kms[mode.Cmdline] = km
kms[mode.Search] = km
return kms
}
func defaultNormalAndVisual() *key.Manager {
km := key.NewManager(true)
km.Register(event.CursorUp, "up")
km.Register(event.CursorDown, "down")
km.Register(event.CursorLeft, "left")
km.Register(event.CursorRight, "right")
km.Register(event.PageUp, "pgup")
km.Register(event.PageDown, "pgdn")
km.Register(event.PageTop, "home")
km.Register(event.PageEnd, "end")
km.Register(event.CursorUp, "k")
km.Register(event.CursorDown, "j")
km.Register(event.CursorLeft, "h")
km.Register(event.CursorRight, "l")
km.Register(event.CursorPrev, "b")
km.Register(event.CursorPrev, "backspace")
km.Register(event.CursorPrev, "backspace2")
km.Register(event.CursorNext, "w")
km.Register(event.CursorNext, " ")
km.Register(event.CursorHead, "0")
km.Register(event.CursorHead, "^")
km.Register(event.CursorEnd, "$")
km.Register(event.ScrollUp, "c-y")
km.Register(event.ScrollDown, "c-e")
km.Register(event.ScrollTop, "z", "t")
km.Register(event.ScrollTopHead, "z", "enter")
km.Register(event.ScrollMiddle, "z", "z")
km.Register(event.ScrollMiddleHead, "z", ".")
km.Register(event.ScrollBottom, "z", "b")
km.Register(event.ScrollBottomHead, "z", "-")
km.Register(event.WindowTop, "H")
km.Register(event.WindowMiddle, "M")
km.Register(event.WindowBottom, "L")
km.Register(event.PageUp, "c-b")
km.Register(event.PageDown, "c-f")
km.Register(event.PageUpHalf, "c-u")
km.Register(event.PageDownHalf, "c-d")
km.Register(event.PageTop, "g", "g")
km.Register(event.PageEnd, "G")
km.Register(event.SwitchFocus, "tab")
km.Register(event.SwitchFocus, "backtab")
km.Register(event.StartCmdlineSearchForward, "/")
km.Register(event.StartCmdlineSearchBackward, "?")
km.Register(event.NextSearch, "n")
km.Register(event.PreviousSearch, "N")
km.Register(event.AbortSearch, "c-c")
km.Register(event.StartCmdlineCommand, ":")
km.Register(event.StartReplaceByte, "r")
return km
}