]> git.lizzy.rs Git - micro.git/commitdiff
stdout and stderr buffers for command execution
authoraerth <aerth@users.noreply.github.com>
Tue, 19 Apr 2016 19:49:43 +0000 (19:49 +0000)
committeraerth <aerth@users.noreply.github.com>
Tue, 19 Apr 2016 19:49:43 +0000 (19:49 +0000)
cmd/micro/command.go

index 39bc2f8fe71a75e0ef16c33f6c0c314b14111dab..eb610e887f33c0a7964b35a6e9fa1ed7c04e2504 100644 (file)
@@ -14,15 +14,27 @@ import (
 func HandleShellCommand(input string, view *View) {
        inputCmd := strings.Split(input, " ")[0]
        args := strings.Split(input, " ")[1:]
-
-       // Execute Command
+       if inputCmd == "exit" {
+               messenger.Message("Ctrl+Q to exit")
+               return
+       }
+       if inputCmd == "help" {
+               DisplayHelp()
+               return
+       }
        cmd := exec.Command(inputCmd, args...)
-       outputBytes := &bytes.Buffer{}
+       var stdout bytes.Buffer
+       var stderr bytes.Buffer
+       cmd.Stdout = &stdout // send output to buffer
+       cmd.Stderr = &stderr // send error to a different buffer
+       // Execute Command
+       err := cmd.Run()
+       if err != nil {
+               messenger.Message(err.Error() + "... " + stderr.String())
+               return
+       }
 
-       cmd.Stdout = outputBytes // send output to buffer
-       cmd.Start()
-       cmd.Wait() // wait for command to finish
-       outstring := outputBytes.String()
+       outstring := stdout.String()
        totalLines := strings.Split(outstring, "\n")
 
        if len(totalLines) < 3 {
@@ -31,7 +43,6 @@ func HandleShellCommand(input string, view *View) {
        }
 
        if outstring != "" {
-               // Display nonblank output
                DisplayBlock(outstring)
        }
 }