mirror of
https://github.com/zyedidia/micro.git
synced 2025-06-19 07:15:34 -04:00
Merge 4658fa2888
into 5eddf5b85d
This commit is contained in:
commit
ad9af3c1f7
@ -101,6 +101,8 @@ func luaImportMicroShell() *lua.LTable {
|
|||||||
ulua.L.SetField(pkg, "ExecCommand", luar.New(ulua.L, shell.ExecCommand))
|
ulua.L.SetField(pkg, "ExecCommand", luar.New(ulua.L, shell.ExecCommand))
|
||||||
ulua.L.SetField(pkg, "RunCommand", luar.New(ulua.L, shell.RunCommand))
|
ulua.L.SetField(pkg, "RunCommand", luar.New(ulua.L, shell.RunCommand))
|
||||||
ulua.L.SetField(pkg, "RunBackgroundShell", luar.New(ulua.L, shell.RunBackgroundShell))
|
ulua.L.SetField(pkg, "RunBackgroundShell", luar.New(ulua.L, shell.RunBackgroundShell))
|
||||||
|
ulua.L.SetField(pkg, "ExecBackgroundCommand", luar.New(ulua.L, shell.ExecBackgroundCommand))
|
||||||
|
ulua.L.SetField(pkg, "RunBackgroundCommand", luar.New(ulua.L, shell.RunBackgroundCommand))
|
||||||
ulua.L.SetField(pkg, "RunInteractiveShell", luar.New(ulua.L, shell.RunInteractiveShell))
|
ulua.L.SetField(pkg, "RunInteractiveShell", luar.New(ulua.L, shell.RunInteractiveShell))
|
||||||
ulua.L.SetField(pkg, "JobStart", luar.New(ulua.L, shell.JobStart))
|
ulua.L.SetField(pkg, "JobStart", luar.New(ulua.L, shell.JobStart))
|
||||||
ulua.L.SetField(pkg, "JobSpawn", luar.New(ulua.L, shell.JobSpawn))
|
ulua.L.SetField(pkg, "JobSpawn", luar.New(ulua.L, shell.JobSpawn))
|
||||||
|
@ -812,15 +812,18 @@ func (h *BufPane) UnbindCmd(args []string) {
|
|||||||
|
|
||||||
// RunCmd runs a shell command in the background
|
// RunCmd runs a shell command in the background
|
||||||
func (h *BufPane) RunCmd(args []string) {
|
func (h *BufPane) RunCmd(args []string) {
|
||||||
runf, err := shell.RunBackgroundShell(shellquote.Join(args...))
|
if len(args) == 0 {
|
||||||
if err != nil {
|
InfoBar.Error("No arguments")
|
||||||
InfoBar.Error(err)
|
return
|
||||||
} else {
|
|
||||||
go func() {
|
|
||||||
InfoBar.Message(runf())
|
|
||||||
screen.Redraw()
|
|
||||||
}()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
shell.ExecBackgroundCommand(func(output string, runErr error) {
|
||||||
|
if runErr != nil {
|
||||||
|
output = fmt.Sprint(args[0], " exited with error: ", runErr)
|
||||||
|
}
|
||||||
|
InfoBar.Message(output)
|
||||||
|
screen.Redraw()
|
||||||
|
}, args[0], args[1:]...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// QuitCmd closes the main view
|
// QuitCmd closes the main view
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"io"
|
"io"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Jobs chan JobFunction
|
var Jobs chan JobFunction
|
||||||
@ -54,7 +55,11 @@ func (f *CallbackFile) Write(data []byte) (int, error) {
|
|||||||
// JobStart starts a shell command in the background with the given callbacks
|
// JobStart starts a shell command in the background with the given callbacks
|
||||||
// It returns an *exec.Cmd as the job id
|
// It returns an *exec.Cmd as the job id
|
||||||
func JobStart(cmd string, onStdout, onStderr, onExit func(string, []interface{}), userargs ...interface{}) *Job {
|
func JobStart(cmd string, onStdout, onStderr, onExit func(string, []interface{}), userargs ...interface{}) *Job {
|
||||||
return JobSpawn("sh", []string{"-c", cmd}, onStdout, onStderr, onExit, userargs...)
|
if runtime.GOOS == "windows" {
|
||||||
|
return JobSpawn("cmd", []string{"/v:on", "/c", cmd}, onStdout, onStderr, onExit, userargs...)
|
||||||
|
} else {
|
||||||
|
return JobSpawn("sh", []string{"-c", cmd}, onStdout, onStderr, onExit, userargs...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// JobSpawn starts a process with args in the background with the given callbacks
|
// JobSpawn starts a process with args in the background with the given callbacks
|
||||||
|
@ -45,6 +45,7 @@ func RunCommand(input string) (string, error) {
|
|||||||
return ExecCommand(inputCmd, args[1:]...)
|
return ExecCommand(inputCmd, args[1:]...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// **Deprecated, don't use**
|
||||||
// RunBackgroundShell runs a shell command in the background
|
// RunBackgroundShell runs a shell command in the background
|
||||||
// It returns a function which will run the command and returns a string
|
// It returns a function which will run the command and returns a string
|
||||||
// message result
|
// message result
|
||||||
@ -68,6 +69,47 @@ func RunBackgroundShell(input string) (func() string, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ExecBackgroundCommand executes a command in the background by accepting
|
||||||
|
// a optional callback function for the command output or error if any,
|
||||||
|
// the command name and a list of arguments.
|
||||||
|
func ExecBackgroundCommand(cb func(string, error), name string, args ...string) {
|
||||||
|
go func() {
|
||||||
|
output, runErr := ExecCommand(name, args[0:]...)
|
||||||
|
if cb != nil {
|
||||||
|
wrapperFunc := func(output string, args []interface{}) {
|
||||||
|
errVal, ok := args[0].(error)
|
||||||
|
if ok {
|
||||||
|
cb(output, errVal)
|
||||||
|
} else {
|
||||||
|
cb(output, nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var passArgs []interface{}
|
||||||
|
passArgs = append(passArgs, runErr)
|
||||||
|
jobFunc := JobFunction{wrapperFunc, output, passArgs}
|
||||||
|
Jobs <- jobFunc
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
// RunBackgroundCommand runs a shell command in the background by accepting
|
||||||
|
// an input for running the command and an optional callback function for
|
||||||
|
// the command output or error if any.
|
||||||
|
// It returns an error if it fails to split the input command
|
||||||
|
func RunBackgroundCommand(input string, cb func(string, error)) error {
|
||||||
|
args, err := shellquote.Split(input)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if len(args) == 0 {
|
||||||
|
return errors.New("No arguments")
|
||||||
|
}
|
||||||
|
|
||||||
|
ExecBackgroundCommand(cb, args[0], args[1:]...)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// RunInteractiveShell runs a shellcommand interactively
|
// RunInteractiveShell runs a shellcommand interactively
|
||||||
func RunInteractiveShell(input string, wait bool, getOutput bool) (string, error) {
|
func RunInteractiveShell(input string, wait bool, getOutput bool) (string, error) {
|
||||||
args, err := shellquote.Split(input)
|
args, err := shellquote.Split(input)
|
||||||
|
@ -247,8 +247,20 @@ The packages and their contents are listed below (in Go type signatures):
|
|||||||
two arguments in the `ExecCommand` argument list (quoting arguments
|
two arguments in the `ExecCommand` argument list (quoting arguments
|
||||||
will preserve spaces).
|
will preserve spaces).
|
||||||
|
|
||||||
- `RunBackgroundShell(input string) (func() string, error)`: returns a
|
- **Deprecated** `RunBackgroundShell(input string) (func() string, error)`:
|
||||||
function that will run the given shell command and return its output.
|
returns a function that will run the given shell command and return
|
||||||
|
its output.
|
||||||
|
|
||||||
|
- `ExecBackgroundCommand(cb func(string, error), name string, args ...string)`:
|
||||||
|
executes a command in the background by accepting a optional callback
|
||||||
|
function for the command output or error if any, the command name and
|
||||||
|
a list of arguments.
|
||||||
|
|
||||||
|
- `RunBackgroundCommand(input string, cb func(string, error)) error`:
|
||||||
|
runs a shell command in the background by accepting an input for
|
||||||
|
running the command and an optional callback function for the
|
||||||
|
command output or error if any.
|
||||||
|
It returns an error if it fails to split the input command
|
||||||
|
|
||||||
- `RunInteractiveShell(input string, wait bool, getOutput bool)
|
- `RunInteractiveShell(input string, wait bool, getOutput bool)
|
||||||
(string, error)`:
|
(string, error)`:
|
||||||
@ -261,10 +273,10 @@ The packages and their contents are listed below (in Go type signatures):
|
|||||||
onExit func(string, []interface{}), userargs ...interface{})
|
onExit func(string, []interface{}), userargs ...interface{})
|
||||||
*exec.Cmd`:
|
*exec.Cmd`:
|
||||||
Starts a background job by running the shell on the given command
|
Starts a background job by running the shell on the given command
|
||||||
(using `sh -c`). Three callbacks can be provided which will be called
|
(using `sh -c` or `cmd /v:on /c`). Three callbacks can be provided which
|
||||||
when the command generates stdout, stderr, or exits. The userargs will
|
will be called when the command generates stdout, stderr, or exits.
|
||||||
be passed to the callbacks, along with the output as the first
|
The userargs will be passed to the callbacks, along with the output
|
||||||
argument of the callback. Returns the started command.
|
as the first argument of the callback. Returns the started command.
|
||||||
|
|
||||||
- `JobSpawn(cmd string, cmdArgs []string, onStdout, onStderr,
|
- `JobSpawn(cmd string, cmdArgs []string, onStdout, onStderr,
|
||||||
onExit func(string, []interface{}), userargs ...interface{})
|
onExit func(string, []interface{}), userargs ...interface{})
|
||||||
|
Loading…
Reference in New Issue
Block a user