| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- package editor
- import(
- "strings"
- )
- type ActionManager = struct {
- Common []Action
- Normal []Action
- Insert []Action
- Command []Action
- }
- type Action = struct {
- Binding string
- Command string
- HasArgs bool
- Callback func(*Model, []string)
- }
- func DefaultActionManager() ActionManager {
- return ActionManager{
- Common: []Action{
- Action{
- Binding: "f12",
- Callback: func(m *Model, args []string) {
- m.Mode = ModeNormal
- },
- },
- Action{
- Binding: "left",
- Callback: func(m *Model, args []string) {
- m.BM.Current().MoveHoriz(-1)
- },
- },
- Action{
- Binding: "right",
- Callback: func(m *Model, args []string) {
- m.BM.Current().MoveHoriz(1)
- },
- },
- Action{
- Binding: "shift+ctrl+Rune[v]",
- Command: "paste",
- HasArgs: false,
- Callback: func(m *Model, args []string) {
- m.Screen.GetClipboard()
- },
- },
- Action{
- Binding: "ctrl+c",
- Command: "q",
- HasArgs: true,
- Callback: func(m *Model, args []string) {
- m.Quit()
- },
- },
- },
- Normal: []Action{
- Action{
- Binding: "Rune[i]",
- Callback: func(m *Model, args []string) {
- m.Mode = ModeInsert
- },
- },
- Action{
- Binding: "Rune[q]",
- Callback: func(m *Model, args []string) {
- m.Mode = ModeCommand
- m.BM.CommandBuffer.Clear()
- m.BM.CommandBuffer.Insert('/')
- },
- },
- },
- Insert: []Action{
- Action{
- Binding: "up",
- Callback: func(m *Model, args []string) {
- m.BM.Current().MoveVert(-1)
- },
- },
- Action{
- Binding: "down",
- Callback: func(m *Model, args []string) {
- m.BM.Current().MoveVert(1)
- },
- },
- Action{
- Binding: "shift+up",
- Command: "TODO:",
- HasArgs: false,
- Callback: func(m *Model, args []string) {
- m.BM.Current().AddCursorVert(-1)
- },
- },
- Action{
- Binding: "shift+down",
- Command: "TODO:",
- HasArgs: false,
- Callback: func(m *Model, args []string) {
- m.BM.Current().AddCursorVert(1)
- },
- },
- Action{
- Binding: "esc",
- Command: "TODO:",
- HasArgs: false,
- Callback: func(m *Model, args []string) {
- m.BM.Current().ClearCursors()
- },
- },
- Action{
- Binding: "tab",
- Command: "TODO:",
- HasArgs: false,
- Callback: func(m *Model, args []string) {
- for _ = range 4 {
- m.BM.Current().Insert(' ')
- }
- },
- },
- Action{
- Binding: "shift+tab",
- Command: "TODO:",
- HasArgs: false,
- Callback: func(m *Model, args []string) {
- // TODO: implement m.BM.Current().remove...
-
- },
- },
- Action{
- Binding: "backspace",
- Callback: func(m *Model, args []string) {
- m.BM.Current().Delete()
- },
- },
- Action{
- Binding: "enter",
- Callback: func(m *Model, args []string) {
- m.BM.Current().Insert('\n')
- },
- },
- },
- Command: []Action{
- Action{
- Binding: "backspace",
- Callback: func(m *Model, args []string) {
- m.BM.CommandBuffer.Delete()
- },
- },
- Action{
- Binding: "enter",
- Callback: func(m *Model, _ []string) {
- input := m.BM.CommandBuffer.String()
- args := strings.Split(input, " ")
- if args[0] == "" {
- m.Mode = ModeNormal
- return
- }
- if strings.HasPrefix(args[0], "/") {
- for _, action := range append(m.AM.Common, append(m.AM.Normal, m.AM.Insert...)...) {
- if action.Command != "" && string([]rune(args[0])[1:]) == action.Command {
- m.Mode = ModeNormal
- action.Callback(m, args[1:])
- return
- }
- }
- }
- m.Mode = ModeNormal
- // TODO: Write an error to the commandbuffer
- },
- },
- },
- }
- }
|