"io/ioutil"
"os"
- "github.com/gdamore/tcell"
- "github.com/gdamore/tcell/encoding"
"github.com/go-errors/errors"
"github.com/mattn/go-isatty"
"github.com/mitchellh/go-homedir"
+ "github.com/zyedidia/tcell"
+ "github.com/zyedidia/tcell/encoding"
)
const (
}
}
-var flagVersion = flag.Bool("version", false, "Show version number")
-
-func main() {
- flag.Parse()
- if *flagVersion {
- fmt.Println("Micro version:", Version)
- os.Exit(0)
- }
-
- filename, input, err := LoadInput()
- if err != nil {
- fmt.Println(err)
- os.Exit(1)
- }
-
- encoding.Register()
-
- // Find the user's configuration directory (probably $XDG_CONFIG_HOME/micro)
- InitConfigDir()
- // Load the user's settings
- InitSettings()
- // Load the syntax files, including the colorscheme
- LoadSyntaxFiles()
-
- buf := NewBuffer(string(input), filename)
-
+// InitScreen creates and initializes the tcell screen
+func InitScreen() {
// Should we enable true color?
truecolor := os.Getenv("MICRO_TRUECOLOR") == "1"
}
// Initilize tcell
+ var err error
screen, err = tcell.NewScreen()
if err != nil {
fmt.Println(err)
os.Setenv("TERM", oldTerm)
}
- // This is just so if we have an error, we can exit cleanly and not completely
- // mess up the terminal being worked in
- defer func() {
- if err := recover(); err != nil {
- screen.Fini()
- fmt.Println("Micro encountered an error:", err)
- // Print the stack trace too
- fmt.Print(errors.Wrap(err, 2).ErrorStack())
- os.Exit(1)
- }
- }()
-
// Default style
defStyle = tcell.StyleDefault.
Foreground(tcell.ColorDefault).
screen.SetStyle(defStyle)
screen.EnableMouse()
+}
+
+// Redraw redraws the screen and the given view
+func Redraw(view *View) {
+ screen.Clear()
+ view.Display()
+ messenger.Display()
+ screen.Show()
+}
+
+var flagVersion = flag.Bool("version", false, "Show version number")
+
+func main() {
+ flag.Parse()
+ if *flagVersion {
+ fmt.Println("Micro version:", Version)
+ os.Exit(0)
+ }
+
+ filename, input, err := LoadInput()
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+
+ encoding.Register()
+ tcell.SetEncodingFallback(tcell.EncodingFallbackASCII)
+
+ // Find the user's configuration directory (probably $XDG_CONFIG_HOME/micro)
+ InitConfigDir()
+ // Load the user's settings
+ InitSettings()
+ InitBindings()
+ // Load the syntax files, including the colorscheme
+ LoadSyntaxFiles()
+ // Load the help files
+ LoadHelp()
+
+ buf := NewBuffer(string(input), filename)
+
+ InitScreen()
+
+ // This is just so if we have an error, we can exit cleanly and not completely
+ // mess up the terminal being worked in
+ defer func() {
+ if err := recover(); err != nil {
+ screen.Fini()
+ fmt.Println("Micro encountered an error:", err)
+ // Print the stack trace too
+ fmt.Print(errors.Wrap(err, 2).ErrorStack())
+ os.Exit(1)
+ }
+ }()
messenger = new(Messenger)
view := NewView(buf)
for {
// Display everything
- screen.Clear()
-
- view.Display()
- messenger.Display()
-
- screen.Show()
+ Redraw(view)
// Wait for the user's action
event := screen.PollEvent()
case tcell.KeyCtrlB:
input, canceled := messenger.Prompt("$ ")
if !canceled {
- HandleShellCommand(input, view)
+ HandleShellCommand(input, view, true)
}
case tcell.KeyCtrlG:
if !helpOpen {
- helpBuffer := NewBuffer(helpTxt, "")
+ helpBuffer := NewBuffer(helpTxt, "help.md")
helpBuffer.name = "Help"
helpOpen = true
view.OpenBuffer(helpBuffer)