1
0

main.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "moose/internal/editor"
  6. "github.com/gdamore/tcell/v3"
  7. "github.com/gdamore/tcell/v3/color"
  8. )
  9. func main() {
  10. s, err := tcell.NewScreen()
  11. if err != nil {
  12. fmt.Printf("moose: error: %v", err)
  13. os.Exit(1)
  14. }
  15. if err := s.Init(); err != nil {
  16. fmt.Printf("moose: error: %v", err)
  17. os.Exit(1)
  18. }
  19. style := tcell.StyleDefault.Background(color.Reset).Foreground(color.Reset)
  20. s.SetStyle(style)
  21. m := editor.NewModel(s, style)
  22. s.EnableMouse()
  23. s.EnablePaste()
  24. s.Clear()
  25. quit := func() {
  26. maybePanic := recover()
  27. s.Fini()
  28. if maybePanic != nil {
  29. panic(maybePanic)
  30. }
  31. }
  32. defer quit()
  33. isPasting := false
  34. pasteBuffer := ""
  35. s.Clear()
  36. m.Render()
  37. s.Show()
  38. for {
  39. if m.ShouldQuit {
  40. return
  41. }
  42. ev := <-s.EventQ()
  43. switch ev := ev.(type) {
  44. case *tcell.EventResize:
  45. s.Sync()
  46. case *tcell.EventPaste:
  47. if ev.Start() {
  48. isPasting = true
  49. pasteBuffer = ""
  50. } else if ev.End() {
  51. isPasting = false
  52. m.BM.Current().Insert(pasteBuffer)
  53. s.Clear()
  54. m.Render()
  55. s.Show()
  56. }
  57. case *tcell.EventKey:
  58. if isPasting {
  59. if ev.Key() == tcell.KeyEnter || ev.Key() == tcell.KeyCtrlJ {
  60. pasteBuffer += "\n"
  61. } else if ev.Key() == tcell.KeyTab {
  62. pasteBuffer += "\t"
  63. } else if ev.Key() == tcell.KeyRune {
  64. pasteBuffer += ev.Str()
  65. }
  66. } else {
  67. m.HandleKeyInput(ev)
  68. s.Clear()
  69. m.Render()
  70. s.Show()
  71. }
  72. }
  73. }
  74. }