mirror of
https://shylinux.com/x/icebergs
synced 2025-05-02 19:47:02 +08:00
opt some
This commit is contained in:
parent
f06013c0c2
commit
0fa74bd96e
@ -3,6 +3,7 @@ package cli
|
||||
import (
|
||||
"io"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
@ -23,7 +24,7 @@ func _daemon_exec(m *ice.Message, cmd *exec.Cmd) {
|
||||
cmd.Stderr = w
|
||||
}
|
||||
|
||||
h := mdb.HashCreate(m, ice.CMD, kit.Join(cmd.Args, ice.SP),
|
||||
h := mdb.HashCreate(m.Spawn(), ice.CMD, kit.Join(cmd.Args, ice.SP),
|
||||
STATUS, START, DIR, cmd.Dir, ENV, kit.Select("", cmd.Env),
|
||||
m.OptionSimple(CMD_INPUT, CMD_OUTPUT, CMD_ERRPUT, mdb.CACHE_CLEAR_ON_EXIT),
|
||||
)
|
||||
@ -128,15 +129,17 @@ func init() {
|
||||
})
|
||||
}},
|
||||
}, mdb.HashStatusAction(mdb.FIELD, "time,hash,status,pid,cmd,dir,env")), Hand: func(m *ice.Message, arg ...string) {
|
||||
if mdb.HashSelect(m, arg...).Tables(func(value ice.Maps) {
|
||||
switch value[STATUS] {
|
||||
case START:
|
||||
m.PushButton(RESTART, STOP)
|
||||
default:
|
||||
m.PushButton(mdb.REMOVE)
|
||||
if len(arg) == 0 || !strings.Contains(arg[0], ice.PS) {
|
||||
if mdb.HashSelect(m, kit.Slice(arg, 0, 1)...).Tables(func(value ice.Maps) {
|
||||
switch value[STATUS] {
|
||||
case START:
|
||||
m.PushButton(RESTART, STOP)
|
||||
default:
|
||||
m.PushButton(mdb.REMOVE)
|
||||
}
|
||||
}); len(arg) == 0 || m.Length() > 0 {
|
||||
return
|
||||
}
|
||||
}); len(arg) == 0 || m.Length() > 0 {
|
||||
return
|
||||
}
|
||||
|
||||
if len(arg) == 1 {
|
||||
|
@ -37,8 +37,13 @@ func init() {
|
||||
}
|
||||
|
||||
m.Cmd(FOREVER, STOP)
|
||||
m.Cmdy(FOREVER, kit.Select(os.Args[0], nfs.PWD+ice.BIN_ICE_BIN, nfs.ExistsFile(m, ice.BIN_ICE_BIN)),
|
||||
"serve", START, ice.DEV, "", aaa.USERNAME, aaa.ROOT, aaa.PASSWORD, aaa.ROOT, arg)
|
||||
if len(arg) > 0 && arg[0] == "space" {
|
||||
m.Cmdy(FOREVER, kit.Select(os.Args[0], nfs.PWD+ice.BIN_ICE_BIN, nfs.ExistsFile(m, ice.BIN_ICE_BIN)),
|
||||
"space", "dial", ice.DEV, ice.OPS, arg[2:])
|
||||
} else {
|
||||
m.Cmdy(FOREVER, kit.Select(os.Args[0], nfs.PWD+ice.BIN_ICE_BIN, nfs.ExistsFile(m, ice.BIN_ICE_BIN)),
|
||||
"serve", START, ice.DEV, "", aaa.USERNAME, aaa.ROOT, aaa.PASSWORD, aaa.ROOT, arg)
|
||||
}
|
||||
}},
|
||||
RESTART: {Name: "restart", Help: "重启", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(gdb.SIGNAL, gdb.RESTART)
|
||||
@ -62,6 +67,9 @@ func init() {
|
||||
if logs.Println(); nfs.ExistsFile(m, "var/log/bench.log") {
|
||||
nfs.Rename(m, "var/log/bench.log", kit.Format("var/log/bench.%s.log", logs.Now().Format("20060102-150405")))
|
||||
}
|
||||
if logs.Println(); nfs.ExistsFile(m, "var/log/error.log") {
|
||||
nfs.Rename(m, "var/log/error.log", kit.Format("var/log/error.%s.log", logs.Now().Format("20060102-150405")))
|
||||
}
|
||||
}
|
||||
}
|
||||
}},
|
||||
|
@ -31,7 +31,7 @@ func _system_cmd(m *ice.Message, arg ...string) *exec.Cmd {
|
||||
}
|
||||
}
|
||||
}
|
||||
if _system_find(m, arg[0]) == "" {
|
||||
if _system_find(m, arg[0]) == "" && !strings.Contains(arg[0], ice.PS) {
|
||||
m.Cmd(MIRRORS, CMD, arg[0])
|
||||
if file := _system_find(m, arg[0]); file != "" {
|
||||
m.Logs(mdb.SELECT, "mirrors cmd", file)
|
||||
@ -82,7 +82,7 @@ func _system_find(m *ice.Message, bin string, dir ...string) string {
|
||||
}
|
||||
for _, p := range dir {
|
||||
if nfs.ExistsFile(m, path.Join(p, bin)) {
|
||||
return kit.Path(path.Join(p, bin))
|
||||
return kit.Path(p, bin)
|
||||
}
|
||||
}
|
||||
return ""
|
||||
|
@ -26,13 +26,15 @@ func _hash_inputs(m *ice.Message, prefix, chain string, field, value string) {
|
||||
defer RLock(m, prefix, chain)()
|
||||
|
||||
list := map[string]int{}
|
||||
Richs(m, prefix, chain, FOREACH, func(val Map) {
|
||||
Richs(m, prefix, chain, FOREACH, func(key string, val Map) {
|
||||
val = kit.GetMeta(val)
|
||||
list[kit.Format(val[field])] += kit.Int(kit.Select("1", val[COUNT]))
|
||||
})
|
||||
for k, i := range list {
|
||||
m.Push(field, k)
|
||||
m.Push(COUNT, i)
|
||||
if k != "" {
|
||||
m.Push(field, k)
|
||||
m.Push(COUNT, i)
|
||||
}
|
||||
}
|
||||
m.SortIntR(COUNT)
|
||||
}
|
||||
@ -203,6 +205,12 @@ func HashStatusCloseAction(args ...Any) ice.Actions {
|
||||
})
|
||||
}
|
||||
|
||||
func HashKey(m *ice.Message) string {
|
||||
if m.Option(HASH) != "" {
|
||||
return HASH
|
||||
}
|
||||
return HashShort(m)
|
||||
}
|
||||
func HashShort(m *ice.Message) string {
|
||||
return kit.Select(HASH, m.Config(SHORT), m.Config(SHORT) != UNIQ)
|
||||
}
|
||||
@ -220,14 +228,18 @@ func HashCreate(m *ice.Message, arg ...Any) string {
|
||||
func HashRemove(m *ice.Message, arg ...Any) *ice.Message {
|
||||
args := kit.Simple(arg)
|
||||
if len(args) == 0 {
|
||||
args = m.OptionSimple(HashShort(m))
|
||||
args = m.OptionSimple(HashKey(m))
|
||||
} else if len(args) == 1 {
|
||||
args = []string{HashShort(m), args[0]}
|
||||
args = []string{HashKey(m), args[0]}
|
||||
}
|
||||
return m.Cmdy(DELETE, m.PrefixKey(), "", HASH, args)
|
||||
}
|
||||
func HashModify(m *ice.Message, arg ...Any) *ice.Message {
|
||||
return m.Cmd(MODIFY, m.PrefixKey(), "", HASH, m.OptionSimple(HashShort(m)), HashArgs(m, arg...))
|
||||
args := HashArgs(m, arg...)
|
||||
if args[0] != HashShort(m) && args[0] != HASH {
|
||||
args = append(m.OptionSimple(HashKey(m)), args...)
|
||||
}
|
||||
return m.Cmd(MODIFY, m.PrefixKey(), "", HASH, args)
|
||||
}
|
||||
func HashSelect(m *ice.Message, arg ...string) *ice.Message {
|
||||
m.Fields(len(kit.Slice(arg, 0, 1)), HashField(m))
|
||||
|
@ -111,7 +111,7 @@ func (f *Frame) scan(m *ice.Message, h, line string) *Frame {
|
||||
|
||||
if m.I, m.O = f.stdin, f.stdout; h == STDIO {
|
||||
gdb.Event(m, SOURCE_STDIO)
|
||||
m.Sleep("1.1s")
|
||||
m.Sleep("2.1s")
|
||||
}
|
||||
|
||||
bio := bufio.NewScanner(f.stdin)
|
||||
|
@ -3,6 +3,7 @@ package tcp
|
||||
import (
|
||||
"net"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/aaa"
|
||||
@ -76,7 +77,7 @@ func init() {
|
||||
m.Push(mdb.TIME, value[mdb.TIME])
|
||||
m.Push(PORT, port)
|
||||
m.Push(nfs.SIZE, value[nfs.SIZE])
|
||||
m.Push(ice.BIN, bin)
|
||||
m.Push(ice.BIN, strings.TrimPrefix(bin, value[nfs.PATH]))
|
||||
})
|
||||
m.SortInt(PORT)
|
||||
m.PushAction(nfs.TRASH)
|
||||
|
@ -49,14 +49,12 @@ func _dream_list(m *ice.Message) *ice.Message {
|
||||
|
||||
func _dream_show(m *ice.Message, name string) {
|
||||
if m.Warn(name == "") {
|
||||
return
|
||||
return
|
||||
}
|
||||
if !strings.Contains(name, "-") || !strings.HasPrefix(name, "20") {
|
||||
name = m.Time("20060102-") + name
|
||||
}
|
||||
defer m.ProcessOpen(MergePod(m, m.Option(mdb.NAME, name)))
|
||||
defer m.Echo(MergePod(m, m.Option(mdb.NAME, name)))
|
||||
// defer m.PushRefresh()
|
||||
|
||||
p := path.Join(ice.USR_LOCAL_WORK, name)
|
||||
if pid := m.Cmdx(nfs.CAT, path.Join(p, ice.Info.PidPath)); pid != "" && nfs.ExistsFile(m, "/proc/"+pid) {
|
||||
@ -102,8 +100,8 @@ func _dream_show(m *ice.Message, name string) {
|
||||
m.Optionv(cli.CMD_OUTPUT, path.Join(p, ice.BIN_BOOT_LOG))
|
||||
|
||||
defer ToastProcess(m)()
|
||||
bin := kit.Select(os.Args[0], cli.SystemFind(m, ice.ICE_BIN, kit.Path(path.Join(p, ice.BIN)), kit.Path(ice.BIN)))
|
||||
m.Cmd(cli.DAEMON, bin, SPACE, tcp.DIAL, ice.DEV, ice.OPS, m.OptionSimple(mdb.NAME, RIVER))
|
||||
bin := kit.Select(os.Args[0], cli.SystemFind(m, ice.ICE_BIN, nfs.PWD+path.Join(p, ice.BIN), nfs.PWD+ice.BIN))
|
||||
m.Cmd(cli.DAEMON, bin, SPACE, tcp.DIAL, ice.DEV, ice.OPS, m.OptionSimple(mdb.NAME, RIVER), "daemon", "ops")
|
||||
|
||||
defer gdb.Event(m, DREAM_CREATE, m.OptionSimple(mdb.TYPE, mdb.NAME))
|
||||
m.Option(cli.CMD_OUTPUT, "")
|
||||
@ -150,8 +148,8 @@ func init() {
|
||||
}},
|
||||
cli.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(SPACE, mdb.MODIFY, m.OptionSimple(mdb.NAME), mdb.STATUS, cli.STOP)
|
||||
m.Cmd(SPACE, m.Option(mdb.NAME), ice.EXIT)
|
||||
m.ProcessRefresh3s()
|
||||
m.Go(func() { m.Cmd(SPACE, m.Option(mdb.NAME), ice.EXIT) })
|
||||
m.Sleep3s()
|
||||
}},
|
||||
DREAM_STOP: {Name: "dream.stop type name", Help: "停止", Hand: func(m *ice.Message, arg ...string) {
|
||||
if m.CmdAppend(SPACE, m.Option(mdb.NAME), mdb.STATUS) == cli.STOP {
|
||||
@ -186,7 +184,7 @@ fi
|
||||
require miss.sh
|
||||
ish_miss_prepare_compile
|
||||
ish_miss_prepare_develop
|
||||
ish_miss_prepare_install
|
||||
ish_miss_prepare_operate
|
||||
|
||||
ish_miss_make; if [ -n "$*" ]; then ./bin/ice.bin forever serve "$@"; fi
|
||||
ish_miss_make; if [ -n "$*" ]; then ish_miss_serve "$@"; fi
|
||||
`
|
||||
|
@ -62,7 +62,7 @@ func _serve_rewrite(m *ice.Message) {
|
||||
})
|
||||
}
|
||||
func _serve_domain(m *ice.Message) string {
|
||||
if p := m.Config(DOMAIN); p != "" {
|
||||
if p := ice.Info.Domain; p != "" {
|
||||
return p
|
||||
}
|
||||
if p := m.R.Header.Get("X-Host"); p != "" {
|
||||
@ -332,7 +332,7 @@ func init() {
|
||||
Index.Merge(&ice.Context{Configs: ice.Configs{
|
||||
SERVE: {Name: SERVE, Help: "服务器", Value: kit.Data(
|
||||
mdb.SHORT, mdb.NAME, mdb.FIELD, "time,status,name,proto,host,port,dev",
|
||||
DOMAIN, "", tcp.LOCALHOST, ice.TRUE, LOGHEADERS, ice.FALSE,
|
||||
tcp.LOCALHOST, ice.TRUE, LOGHEADERS, ice.FALSE,
|
||||
nfs.PATH, kit.Dict(ice.PS, ice.USR_VOLCANOS),
|
||||
ice.VOLCANOS, kit.Dict(nfs.PATH, ice.USR_VOLCANOS, INDEX, "page/index.html",
|
||||
nfs.REPOS, "https://shylinux.com/x/volcanos", nfs.BRANCH, nfs.MASTER,
|
||||
@ -353,12 +353,13 @@ func init() {
|
||||
}},
|
||||
ssh.SOURCE_STDIO: {Name: "source.stdio", Help: "终端", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Go(func() {
|
||||
m.Sleep("1s")
|
||||
m.Sleep("2s")
|
||||
m.Cmd(ssh.PRINTF, kit.Dict(nfs.CONTENT, ice.Render(m, ice.RENDER_QRCODE, m.Cmdx(SPACE, DOMAIN))+ice.NL))
|
||||
})
|
||||
}},
|
||||
DOMAIN: {Name: "domain", Help: "域名", Hand: func(m *ice.Message, arg ...string) {
|
||||
ice.Info.Domain = m.Conf(SHARE, kit.Keym(DOMAIN, m.Config(DOMAIN, arg[0])))
|
||||
m.Config(tcp.LOCALHOST, ice.FALSE)
|
||||
ice.Info.Domain = arg[0]
|
||||
}},
|
||||
SPIDE: {Name: "spide", Help: "架构图", Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) == 0 { // 模块列表
|
||||
|
@ -17,7 +17,7 @@ import (
|
||||
)
|
||||
|
||||
func _space_domain(m *ice.Message) (link string) {
|
||||
if link = m.Config(DOMAIN); link == "" {
|
||||
if link = ice.Info.Domain; link == "" {
|
||||
link = m.Cmd(SPACE, ice.OPS, cli.PWD).Append(mdb.LINK)
|
||||
}
|
||||
if link == "" {
|
||||
@ -236,7 +236,9 @@ func _space_fork(m *ice.Message) {
|
||||
case WORKER: // 工作节点
|
||||
gdb.Event(m, DREAM_START, args)
|
||||
defer gdb.Event(m, DREAM_STOP, args)
|
||||
defer m.Cmd(DREAM, DREAM_STOP, args)
|
||||
if m.Option("daemon") == "ops" {
|
||||
defer m.Cmd(DREAM, DREAM_STOP, args)
|
||||
}
|
||||
default: // 服务节点
|
||||
gdb.Event(m, SPACE_START, args)
|
||||
defer gdb.Event(m, SPACE_STOP, args)
|
||||
@ -321,7 +323,7 @@ func init() {
|
||||
m.EchoQRCode(m.Option(ice.MSG_USERWEB))
|
||||
}},
|
||||
tcp.DIAL: {Name: "dial dev=ops name", Help: "连接", Hand: func(m *ice.Message, arg ...string) {
|
||||
_space_dial(m, m.Option(ice.DEV), kit.Select(ice.Info.NodeName, m.Option(mdb.NAME)))
|
||||
_space_dial(m, m.Option(ice.DEV), kit.Select(ice.Info.NodeName, m.Option(mdb.NAME)), arg...)
|
||||
}},
|
||||
DOMAIN: {Name: "domain", Help: "域名", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Echo(_space_domain(m))
|
||||
|
@ -24,15 +24,17 @@ func _xterm_socket(m *ice.Message, h, t string) {
|
||||
m.Option(mdb.TEXT, t)
|
||||
}
|
||||
func _xterm_get(m *ice.Message, h string, must bool) *os.File {
|
||||
t := mdb.HashSelectField(m, m.Option(mdb.HASH, h), mdb.TYPE)
|
||||
if f, ok := mdb.HashTarget(m, h, func() ice.Any {
|
||||
if !must {
|
||||
return nil
|
||||
}
|
||||
|
||||
ls := kit.Split(kit.Select("sh", m.Option(mdb.TYPE)))
|
||||
ls := kit.Split(kit.Select("sh", t))
|
||||
m.Logs(cli.DAEMON, ice.CMD, ls)
|
||||
cmd := exec.Command(cli.SystemFind(m, ls[0]), ls[1:]...)
|
||||
m.Logs(cli.DAEMON, ice.CMD, cmd.Path)
|
||||
cmd.Env = append(os.Environ(), "TERM=xterm")
|
||||
m.Option(mdb.HASH, h)
|
||||
|
||||
tty, err := pty.Start(cmd)
|
||||
m.Assert(err)
|
||||
@ -76,45 +78,41 @@ func init() {
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch mdb.HashInputs(m, arg); arg[0] {
|
||||
case mdb.TYPE:
|
||||
m.Push(arg[0], "python", "node", "bash", "sh")
|
||||
m.Push(arg[0], "ice.bin source stdio", "node", "python", "bash", "sh")
|
||||
case mdb.NAME:
|
||||
m.Push(arg[0], path.Base(m.Option(mdb.TYPE)))
|
||||
}
|
||||
}},
|
||||
mdb.CREATE: {Name: "create type name", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.HashCreate(m, arg, mdb.TEXT, m.Option(ice.MSG_DAEMON))
|
||||
_xterm_get(m, m.Result(), true)
|
||||
}},
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
if f := _xterm_get(m, m.Option(mdb.HASH), false); f != nil {
|
||||
f.Close()
|
||||
}
|
||||
mdb.HashRemove(m, m.OptionSimple(mdb.HASH))
|
||||
}},
|
||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.HashModify(m, m.OptionSimple(mdb.HASH), arg)
|
||||
}},
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
}},
|
||||
"resize": {Name: "resize", Help: "大小", Hand: func(m *ice.Message, arg ...string) {
|
||||
pty.Setsize(_xterm_get(m, m.Option(mdb.HASH), true), &pty.Winsize{Rows: uint16(kit.Int(m.Option("rows"))), Cols: uint16(kit.Int(m.Option("cols")))})
|
||||
mdb.HashSelectDetail(m, m.Option(mdb.HASH), func(value ice.Map) {
|
||||
if c, ok := value["_cmd"].(io.Closer); ok {
|
||||
c.Close()
|
||||
}
|
||||
})
|
||||
mdb.HashRemove(m)
|
||||
}},
|
||||
"rename": {Name: "rename", Help: "重命名", Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.HashModify(m, arg)
|
||||
}},
|
||||
"resize": {Name: "resize", Help: "大小", Hand: func(m *ice.Message, arg ...string) {
|
||||
pty.Setsize(_xterm_get(m, m.Option(mdb.HASH), true), &pty.Winsize{Rows: uint16(kit.Int(m.Option("rows"))), Cols: uint16(kit.Int(m.Option("cols")))})
|
||||
}},
|
||||
"select": {Name: "select", Help: "连接", Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.HashModify(m, mdb.TEXT, m.Option(ice.MSG_DAEMON))
|
||||
_xterm_get(m, m.Option(mdb.HASH), true)
|
||||
m.Cmd("", "input", arg)
|
||||
}},
|
||||
"input": {Name: "input", Help: "输入", Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.HashModify(m, mdb.TIME, m.Time())
|
||||
if b, e := base64.StdEncoding.DecodeString(strings.Join(arg, "")); m.Assert(e) {
|
||||
if b, e := base64.StdEncoding.DecodeString(strings.Join(arg, "")); !m.Warn(e) {
|
||||
_xterm_get(m, m.Option(mdb.HASH), true).Write(b)
|
||||
mdb.HashModify(m, mdb.TIME, m.Time())
|
||||
}
|
||||
}},
|
||||
}, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,extra"), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.HashSelect(m, kit.Slice(arg, 0, 1)...)
|
||||
ctx.DisplayLocal(m, "")
|
||||
}, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text"), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
ctx.DisplayLocal(mdb.HashSelect(m, kit.Slice(arg, 0, 1)...), "")
|
||||
}},
|
||||
})
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ const (
|
||||
type compile struct {
|
||||
ice.Code
|
||||
regexp string `data:".*.java"`
|
||||
linux string `data:"https://mirrors.tencent.com/repository/generic/konajdk/8/0/10/linux-x86_64/b1/TencentKona8.0.10.b1_jdk_linux-x86_64_8u332.tar.gz"`
|
||||
linux string `data:"https://github.com/Tencent/TencentKona-8/releases/download/8.0.11-GA/TencentKona8.0.11.b2_jdk_linux-x86_64_8u345.tar.gz"`
|
||||
list string `name:"list path auto listScript order install" help:"编译器"`
|
||||
}
|
||||
|
||||
|
@ -7,3 +7,8 @@ refer `
|
||||
`
|
||||
field web.code.java.compile
|
||||
|
||||
spark shell `
|
||||
wget https://github.com/Tencent/TencentKona-8/releases/download/8.0.11-GA/TencentKona8.0.11.b2_jdk_linux-x86_64_8u345.tar.gz
|
||||
tar xvf TencentKona8.0.11.b2_jdk_linux-x86_64_8u345.tar.gz && cd TencentKona-8.0.11-345/
|
||||
`
|
||||
|
||||
|
@ -117,8 +117,11 @@ func init() {
|
||||
|
||||
name = _tmux_key(m.Option(mdb.NAME), name)
|
||||
_tmux_cmd(m, SPLIT_WINDOW, "-t", kit.Keys(name, "1"), "-p", "40")
|
||||
_tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "2"), "ish_miss_log", ENTER)
|
||||
_tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "1"), "vi etc/miss.sh", ENTER)
|
||||
m.Go(func() {
|
||||
m.Sleep("1s")
|
||||
_tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "2"), "ish_miss_log", ENTER)
|
||||
_tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "1"), "vi etc/miss.sh", ENTER)
|
||||
})
|
||||
|
||||
_tmux_cmd(m, LINK_WINDOW, "-s", name, "-t", "miss:")
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user