]> git.lizzy.rs Git - micro.git/blob - micro.go
Add statusline
[micro.git] / micro.go
1 package main
2
3 import (
4         "fmt"
5         "github.com/mattn/go-isatty"
6         "io/ioutil"
7         "os"
8
9         "github.com/gdamore/tcell"
10 )
11
12 const (
13         tabSize = 4
14 )
15
16 func main() {
17         var input []byte
18         var filename string
19
20         if len(os.Args) > 1 {
21                 filename = os.Args[1]
22                 if _, err := os.Stat(filename); err == nil {
23                         var err error
24                         input, err = ioutil.ReadFile(filename)
25
26                         if err != nil {
27                                 fmt.Println(err)
28                                 os.Exit(1)
29                         }
30                 }
31         } else if !isatty.IsTerminal(os.Stdin.Fd()) {
32                 bytes, err := ioutil.ReadAll(os.Stdin)
33                 if err != nil {
34                         fmt.Println("Error reading stdin")
35                         os.Exit(1)
36                 }
37                 input = bytes
38         }
39
40         s, e := tcell.NewScreen()
41         if e != nil {
42                 fmt.Fprintf(os.Stderr, "%v\n", e)
43                 os.Exit(1)
44         }
45         if e := s.Init(); e != nil {
46                 fmt.Fprintf(os.Stderr, "%v\n", e)
47                 os.Exit(1)
48         }
49
50         defStyle := tcell.StyleDefault.
51                 Background(tcell.ColorDefault).
52                 Foreground(tcell.ColorDefault)
53
54         s.SetStyle(defStyle)
55         s.EnableMouse()
56
57         v := newView(newBuffer(string(input), filename), s)
58
59         // Initially everything needs to be drawn
60         redraw := 2
61         for {
62                 if redraw == 2 {
63                         s.Clear()
64                         v.display()
65                         v.cursor.display()
66                         v.sl.display()
67                         s.Show()
68                 } else if redraw == 1 {
69                         v.cursor.display()
70                         v.sl.display()
71                         s.Show()
72                 }
73
74                 event := s.PollEvent()
75
76                 switch e := event.(type) {
77                 case *tcell.EventKey:
78                         if e.Key() == tcell.KeyCtrlQ {
79                                 s.Fini()
80                                 os.Exit(0)
81                         }
82                 }
83
84                 redraw = v.handleEvent(event)
85         }
86 }