github.com/grzegorz-zur/bm@v0.0.0-20240312214136-6fc133e3e2c0/select.go (about) 1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 // Select mode. 8 type Select struct { 9 editor *Editor 10 } 11 12 // Show updates mode when switched to. 13 func (mode *Select) Show() error { 14 mode.editor.File.Select() 15 return nil 16 } 17 18 // Hide updates mode when switched from. 19 func (mode *Select) Hide() error { 20 return nil 21 } 22 23 // Key handles special key. 24 func (mode *Select) Key(key Key) error { 25 var err error 26 switch key { 27 case KeyLeft: 28 mode.editor.MoveLeft() 29 case KeyRight: 30 mode.editor.MoveRight() 31 case KeyUp: 32 mode.editor.MoveUp() 33 case KeyDown: 34 mode.editor.MoveDown() 35 case KeyHome: 36 mode.editor.MoveLineStart() 37 case KeyEnd: 38 mode.editor.MoveLineEnd() 39 case KeyPageUp: 40 mode.editor.MoveParagraphPrevious() 41 case KeyPageDown: 42 mode.editor.MoveParagraphNext() 43 } 44 if err != nil { 45 return fmt.Errorf("error handling key %v: %w", key, err) 46 } 47 return nil 48 } 49 50 // Rune handles runes. 51 func (mode *Select) Rune(rune rune) error { 52 var err error 53 switch rune { 54 case 'd': 55 mode.editor.MoveLeft() 56 case 'f': 57 mode.editor.MoveRight() 58 case 'a': 59 mode.editor.MoveUp() 60 case 's': 61 mode.editor.MoveDown() 62 case 'D': 63 mode.editor.MoveLineStart() 64 case 'F': 65 mode.editor.MoveLineEnd() 66 case 'A': 67 mode.editor.MoveFileStart() 68 case 'S': 69 mode.editor.MoveFileEnd() 70 case 'q': 71 mode.editor.MoveParagraphPrevious() 72 case 'w': 73 mode.editor.MoveParagraphNext() 74 case 'e': 75 mode.editor.MoveWordPrevious() 76 case 'r': 77 mode.editor.MoveWordNext() 78 case 'H': 79 mode.editor.SwitchMode(mode.editor.Command) 80 case 'h': 81 mode.editor.Copy() 82 case 'j': 83 mode.editor.Cut() 84 } 85 if err != nil { 86 return fmt.Errorf("error handling rune %v: %w", rune, err) 87 } 88 return nil 89 } 90 91 // Render renders select mode. 92 func (mode *Select) Render(view *View) error { 93 view.Select = true 94 err := mode.editor.File.Render(view) 95 if err != nil { 96 return fmt.Errorf("error rendering select mode: %w", err) 97 } 98 view.Color = ColorYellow 99 view.Prompt = "" 100 return nil 101 }