mirror of
https://github.com/zyedidia/micro.git
synced 2024-10-27 20:49:47 +03:00
c88c1b84da
Fixes #1494
43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
// +build linux darwin dragonfly openbsd_amd64 freebsd
|
|
|
|
package action
|
|
|
|
import (
|
|
shellquote "github.com/kballard/go-shellquote"
|
|
"github.com/zyedidia/micro/internal/shell"
|
|
)
|
|
|
|
// TermEmuSupported is a constant that marks if the terminal emulator is supported
|
|
const TermEmuSupported = true
|
|
|
|
// RunTermEmulator starts a terminal emulator from a bufpane with the given input (command)
|
|
// if wait is true it will wait for the user to exit by pressing enter once the executable has terminated
|
|
// if getOutput is true it will redirect the stdout of the process to a pipe which will be passed to the
|
|
// callback which is a function that takes a string and a list of optional user arguments
|
|
func RunTermEmulator(h *BufPane, input string, wait bool, getOutput bool, callback func(out string, userargs []interface{}), userargs []interface{}) error {
|
|
args, err := shellquote.Split(input)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if len(args) == 0 {
|
|
return nil
|
|
}
|
|
|
|
t := new(shell.Terminal)
|
|
t.Start(args, getOutput, wait, callback, userargs)
|
|
|
|
h.AddTab()
|
|
id := MainTab().Panes[0].ID()
|
|
|
|
v := h.GetView()
|
|
|
|
tp, err := NewTermPane(v.X, v.Y, v.Width, v.Height, t, id, MainTab())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
MainTab().Panes[0] = tp
|
|
MainTab().SetActive(0)
|
|
|
|
return nil
|
|
}
|