mirror of
https://shylinux.com/x/ContextOS
synced 2025-04-25 16:58:06 +08:00
mac pro ctx
This commit is contained in:
parent
72aa85d5a2
commit
e5b42f1d22
@ -1,8 +1,8 @@
|
||||
~file1
|
||||
history load etc/history.txt
|
||||
~shell1
|
||||
alias import nfs
|
||||
return
|
||||
~file1
|
||||
history load etc/history.txt
|
||||
|
||||
source etc/local.shy
|
||||
config debug on
|
||||
|
@ -90,6 +90,7 @@ func (cli *CLI) Begin(m *ctx.Message, arg ...string) ctx.Server { // {{{
|
||||
// }}}
|
||||
func (cli *CLI) Start(m *ctx.Message, arg ...string) bool { // {{{
|
||||
cli.Message = m
|
||||
m.Sess("cli", m)
|
||||
yac := m.Sess("yac")
|
||||
if yac.Cap("status") != "start" {
|
||||
yac.Target().Start(yac)
|
||||
@ -106,7 +107,7 @@ func (cli *CLI) Start(m *ctx.Message, arg ...string) bool { // {{{
|
||||
yac.Cmd("train", "op1", "op1", "mul{", "-e", "-f", "-d", "}")
|
||||
yac.Cmd("train", "op1", "op1", "mul{", "-", "+", "}")
|
||||
yac.Cmd("train", "op2", "op2", "mul{", "=", "+=", "}")
|
||||
yac.Cmd("train", "op2", "op2", "mul{", "+", "-", "*", "/", "}")
|
||||
yac.Cmd("train", "op2", "op2", "mul{", "+", "-", "*", "/", "%", "}")
|
||||
yac.Cmd("train", "op2", "op2", "mul{", ">", ">=", "<", "<=", "==", "!=", "}")
|
||||
|
||||
yac.Cmd("train", "val", "val", "opt{", "op1", "}", "mul{", "num", "key", "str", "tran", "}")
|
||||
|
@ -432,6 +432,21 @@ func (m *Message) TryCatch(msg *Message, safe bool, hand ...func(msg *Message))
|
||||
|
||||
// }}}
|
||||
|
||||
func (m *Message) Instance(msg *Message, source ...bool) bool { // {{{
|
||||
c := m.target
|
||||
if len(source) > 0 && source[0] == true {
|
||||
c = m.source
|
||||
}
|
||||
|
||||
for s := c; s != nil; s = s.context {
|
||||
if s == msg.target {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// }}}
|
||||
func (m *Message) BackTrace(hand func(m *Message) bool, c ...*Context) { // {{{
|
||||
target := m.target
|
||||
if len(c) > 0 {
|
||||
@ -537,6 +552,9 @@ func (m *Message) Search(key string, root ...bool) []*Message { // {{{
|
||||
for i := 0; i < len(cs); i++ {
|
||||
ms[i] = m.Spawn(cs[i])
|
||||
}
|
||||
if len(ms) == 0 {
|
||||
ms = append(ms, nil)
|
||||
}
|
||||
|
||||
return ms
|
||||
}
|
||||
@ -986,6 +1004,9 @@ func (m *Message) Insert(meta string, index int, arg ...interface{}) string { //
|
||||
}
|
||||
|
||||
str := Trans(arg...)
|
||||
if m.Confs("insert_limit") {
|
||||
index = (index+2)%(len(m.Meta[meta])+2) - 2
|
||||
}
|
||||
|
||||
if index == -1 {
|
||||
index, m.Meta[meta] = 0, append(str, m.Meta[meta]...)
|
||||
@ -1758,6 +1779,7 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
||||
"search_action": &Config{Name: "search_action(list/switch)", Value: "switch", Help: "搜索操作, list: 输出模块列表, switch: 模块切换"},
|
||||
"search_root": &Config{Name: "search_root(true/false)", Value: "true", Help: "搜索起点, true: 根模块, false: 当前模块"},
|
||||
|
||||
"insert_limit": &Config{Name: "insert_limit(true/false)", Value: "true", Help: "参数的索引"},
|
||||
"detail_index": &Config{Name: "detail_index", Value: "0", Help: "参数的索引"},
|
||||
"result_index": &Config{Name: "result_index", Value: "-2", Help: "返回值的索引"},
|
||||
|
||||
@ -1766,18 +1788,23 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
||||
Commands: map[string]*Command{
|
||||
"help": &Command{Name: "help topic", Help: "帮助", Hand: func(m *Message, c *Context, key string, arg ...string) {
|
||||
if len(arg) == 0 { // {{{
|
||||
m.Echo("usage: help context [module [command|config|cache name]]\n")
|
||||
m.Echo(" : 查看模块信息, module: 模块名, command: 模块命令, config: 模块配置, cache: 模块缓存, name: 模块参数\n")
|
||||
m.Echo("usage: help command [name]\n")
|
||||
m.Echo(" : 查看当前环境下命令, name: 命令名\n")
|
||||
m.Echo("usage: help config [name]\n")
|
||||
m.Echo(" : 查看当前环境下配置, name: 配置名\n")
|
||||
m.Echo("usage: help cache [name]\n")
|
||||
m.Echo(" : 查看当前环境下缓存, name: 缓存名\n")
|
||||
m.Echo("\n")
|
||||
|
||||
m.Echo("^_^ Welcome to context world ^_^\n")
|
||||
m.Echo("\n")
|
||||
m.Echo("Context is to be a distributed operating system, try to simple everything in work and life. ")
|
||||
m.Echo("In context you will find all kinds of tools, and you can also make new tool in a quick and easy way.\n")
|
||||
m.Echo("Here is just a simple introduce, you can look github.com/shylinux/context/README.md for more information.\n")
|
||||
m.Echo("\n")
|
||||
m.Echo("Version: 1.0 A New Language, A New Framework\n")
|
||||
m.Echo("More: github.com/shylinux/context/README.md\n")
|
||||
m.Color(31, " c\n")
|
||||
m.Color(31, " sh").Color(33, " go\n")
|
||||
m.Color(31, " vi").Color(32, " php").Color(32, " js\n")
|
||||
m.Echo(" ARM Linux HTTP\n")
|
||||
m.Echo("\n")
|
||||
|
||||
m.Color(31, "Context ").Color(32, "Message\n")
|
||||
m.Color(32, "ctx ").Color(33, "cli ").Color(31, "aaa ").Color(33, "web\n")
|
||||
m.Color(32, "lex ").Color(33, "yac ").Color(31, "log ").Color(33, "gdb\n")
|
||||
@ -1787,9 +1814,127 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
||||
}
|
||||
|
||||
switch arg[0] {
|
||||
case "example":
|
||||
case "context":
|
||||
case "message":
|
||||
switch len(arg) {
|
||||
case 1:
|
||||
keys := []string{}
|
||||
values := map[string]*Context{}
|
||||
m.Travel(func(m *Message, i int) bool {
|
||||
if _, ok := values[m.Cap("module")]; !ok {
|
||||
keys = append(keys, m.Cap("module"))
|
||||
values[m.Cap("module")] = m.Target()
|
||||
}
|
||||
return true
|
||||
}, m.Target().root)
|
||||
sort.Strings(keys)
|
||||
for _, k := range keys {
|
||||
m.Echo("%s: %s %s\n", k, values[k].Name, values[k].Help)
|
||||
}
|
||||
break
|
||||
case 2:
|
||||
if msg := m.Find(arg[1]); msg != nil {
|
||||
m.Echo("%s: %s %s\n", arg[1], msg.Target().Name, msg.Target().Help)
|
||||
m.Echo("commands:\n")
|
||||
for k, v := range msg.Target().Commands {
|
||||
m.Echo(" %s: %s\n", k, v.Name)
|
||||
}
|
||||
m.Echo("configs:\n")
|
||||
for k, v := range msg.Target().Configs {
|
||||
m.Echo(" %s: %s\n", k, v.Name)
|
||||
}
|
||||
m.Echo("caches:\n")
|
||||
for k, v := range msg.Target().Caches {
|
||||
m.Echo(" %s: %s\n", k, v.Name)
|
||||
}
|
||||
}
|
||||
default:
|
||||
if msg := m.Find(arg[1]); msg != nil {
|
||||
m.Echo("%s: %s %s\n", arg[1], msg.Target().Name, msg.Target().Help)
|
||||
switch arg[2] {
|
||||
case "command":
|
||||
for k, v := range msg.Target().Commands {
|
||||
if k == arg[3] {
|
||||
m.Echo("%s: %s\n %s\n", k, v.Name, v.Help)
|
||||
}
|
||||
}
|
||||
case "config":
|
||||
for k, v := range msg.Target().Configs {
|
||||
if k == arg[3] {
|
||||
m.Echo("%s: %s\n %s\n", k, v.Name, v.Help)
|
||||
}
|
||||
}
|
||||
case "cache":
|
||||
for k, v := range msg.Target().Caches {
|
||||
if k == arg[3] {
|
||||
m.Echo("%s: %s\n %s\n", k, v.Name, v.Help)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
case "command":
|
||||
keys := []string{}
|
||||
values := map[string]*Command{}
|
||||
for s := m.Target(); s != nil; s = s.context {
|
||||
for k, v := range s.Commands {
|
||||
if _, ok := values[k]; ok {
|
||||
continue
|
||||
}
|
||||
if len(arg) > 1 && k == arg[1] {
|
||||
m.Echo("%s: %s\n %s\n", k, v.Name, v.Help)
|
||||
for k, v := range v.Form {
|
||||
m.Echo(" option: %s(%d)\n", k, v)
|
||||
}
|
||||
return
|
||||
}
|
||||
keys = append(keys, k)
|
||||
values[k] = v
|
||||
}
|
||||
}
|
||||
sort.Strings(keys)
|
||||
for _, k := range keys {
|
||||
m.Echo("%s: %s\n", k, values[k].Name)
|
||||
}
|
||||
case "config":
|
||||
keys := []string{}
|
||||
values := map[string]*Config{}
|
||||
for s := m.Target(); s != nil; s = s.context {
|
||||
for k, v := range s.Configs {
|
||||
if _, ok := values[k]; ok {
|
||||
continue
|
||||
}
|
||||
if len(arg) > 1 && k == arg[1] {
|
||||
m.Echo("%s(%s): %s %s\n", k, v.Value, v.Name, v.Help)
|
||||
return
|
||||
}
|
||||
keys = append(keys, k)
|
||||
values[k] = v
|
||||
}
|
||||
}
|
||||
sort.Strings(keys)
|
||||
for _, k := range keys {
|
||||
m.Echo("%s(%s): %s\n", k, values[k].Value, values[k].Name)
|
||||
}
|
||||
case "cache":
|
||||
keys := []string{}
|
||||
values := map[string]*Cache{}
|
||||
for s := m.Target(); s != nil; s = s.context {
|
||||
for k, v := range s.Caches {
|
||||
if _, ok := values[k]; ok {
|
||||
continue
|
||||
}
|
||||
if len(arg) > 1 && k == arg[1] {
|
||||
m.Echo("%s(%s): %s %s\n", k, v.Value, v.Name, v.Help)
|
||||
return
|
||||
}
|
||||
keys = append(keys, k)
|
||||
values[k] = v
|
||||
}
|
||||
}
|
||||
sort.Strings(keys)
|
||||
for _, k := range keys {
|
||||
m.Echo("%s(%s): %s\n", k, values[k].Value, values[k].Name)
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
}},
|
||||
@ -1797,13 +1942,8 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
||||
msg := m.Sess("cli", false) // {{{
|
||||
if len(arg) > 0 {
|
||||
if code, e := strconv.Atoi(arg[0]); e == nil {
|
||||
ms := []*Message{m.root}
|
||||
for i := 0; i < len(ms); i++ {
|
||||
ms = append(ms, ms[i].messages...)
|
||||
if ms[i].code == code {
|
||||
msg, arg = ms[i], arg[1:]
|
||||
break
|
||||
}
|
||||
if msg = m.root.Tree(code); msg != nil {
|
||||
arg = arg[1:]
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1816,24 +1956,24 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
||||
if len(arg) == 0 {
|
||||
m.Echo("%s\n", msg.Format())
|
||||
if len(msg.Meta["option"]) > 0 {
|
||||
m.Color(31, "option: %v\n", msg.Meta["option"])
|
||||
m.Color(31, "option(%d): %v\n", len(msg.Meta["option"]), msg.Meta["option"])
|
||||
for _, k := range msg.Meta["option"] {
|
||||
if v, ok := msg.Data[k]; ok {
|
||||
m.Echo(" %s: %v\n", k, v)
|
||||
} else {
|
||||
m.Echo(" %s: %v\n", k, msg.Meta[k])
|
||||
m.Echo(" %s(%d): %v\n", k, len(msg.Meta[k]), msg.Meta[k])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m.Color(31, "result: %v\n", msg.Meta["result"])
|
||||
m.Color(31, "result(%d): %v\n", len(msg.Meta["result"]), msg.Meta["result"])
|
||||
if len(msg.Meta["append"]) > 0 {
|
||||
m.Color(31, "append: %v\n", msg.Meta["append"])
|
||||
m.Color(31, "append(%d): %v\n", len(msg.Meta["append"]), msg.Meta["append"])
|
||||
for _, k := range msg.Meta["append"] {
|
||||
if v, ok := msg.Data[k]; ok {
|
||||
m.Echo(" %s: %v\n", k, v)
|
||||
} else {
|
||||
m.Echo(" %s: %v\n", k, msg.Meta[k])
|
||||
m.Echo(" %s(%d): %v\n", k, len(msg.Meta[k]), msg.Meta[k])
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1844,11 +1984,11 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
||||
}
|
||||
|
||||
if len(msg.messages) > 0 {
|
||||
m.Color(31, "messages:\n")
|
||||
m.Color(31, "messages(%d):\n", len(msg.messages))
|
||||
for i, v := range msg.messages {
|
||||
if !all {
|
||||
switch v.target.Name {
|
||||
case "log", "yac", "lex":
|
||||
case "lex", "yac", "log", "gdb":
|
||||
continue
|
||||
}
|
||||
}
|
||||
@ -1857,7 +1997,7 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
||||
}
|
||||
|
||||
if len(msg.sessions) > 0 {
|
||||
m.Color(31, "sessions:\n")
|
||||
m.Color(31, "sessions(%d):\n", len(msg.sessions))
|
||||
for k, v := range msg.sessions {
|
||||
m.Echo(" %s %s\n", k, v.Format())
|
||||
}
|
||||
@ -1867,8 +2007,22 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
||||
|
||||
switch arg[0] {
|
||||
case "message":
|
||||
for msg := m; msg != nil; msg = msg.message {
|
||||
m.Echo("%d: %s\n", msg.code, msg.Format())
|
||||
for msg := msg; msg != nil; msg = msg.message {
|
||||
m.Echo("%s\n", msg.Format())
|
||||
}
|
||||
case "messages":
|
||||
ms := []*Message{msg}
|
||||
for i := 0; i < len(ms); i++ {
|
||||
ms = append(ms, ms[i].messages...)
|
||||
if ms[i].Instance(m.root.Sess("lex", false), true) ||
|
||||
ms[i].Instance(m.root.Sess("yac", false), true) ||
|
||||
ms[i].Instance(m.root.Sess("log", false), true) ||
|
||||
ms[i].Instance(m.root.Sess("lex", false)) ||
|
||||
ms[i].Instance(m.root.Sess("yac", false)) ||
|
||||
ms[i].Instance(m.root.Sess("log", false)) {
|
||||
continue
|
||||
}
|
||||
m.Echo("%s\n", ms[i].Format())
|
||||
}
|
||||
default:
|
||||
sub := msg.Spawn().Cmd(arg)
|
||||
@ -1978,89 +2132,56 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
||||
"session": &Command{Name: "session [key [cmd...]]", Help: "查看或添加会话", Hand: func(m *Message, c *Context, key string, arg ...string) {
|
||||
msg := m.message // {{{
|
||||
if len(arg) == 0 {
|
||||
keys := []string{}
|
||||
values := map[string]*Message{}
|
||||
|
||||
for msg = msg; msg != nil; msg = msg.message {
|
||||
for k, v := range msg.sessions {
|
||||
m.Echo("%s: %d(%s->%s) %v %v\n", k, v.code, v.source.Name, v.target.Name, v.Meta["detail"], v.Meta["option"])
|
||||
if _, ok := values[k]; ok {
|
||||
continue
|
||||
}
|
||||
keys = append(keys, k)
|
||||
values[k] = v
|
||||
}
|
||||
}
|
||||
sort.Strings(keys)
|
||||
for _, k := range keys {
|
||||
m.Echo("%s: %s\n", k, values[k].Format())
|
||||
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var sub *Message
|
||||
for m := msg; m != nil; m = m.message {
|
||||
for k, v := range m.sessions {
|
||||
if k == arg[0] {
|
||||
sub = v
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(arg) == 1 {
|
||||
if sub != nil {
|
||||
if sub := msg.Sess(arg[0], false); sub != nil {
|
||||
m.Echo("%d", sub.code)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if sub == nil {
|
||||
sub = msg
|
||||
sub := msg
|
||||
root := m.Confx("search_root", arg, 3)
|
||||
switch m.Confx("search_method", arg, 2) {
|
||||
case "find":
|
||||
sub = msg.Find(arg[1], Right(root))
|
||||
case "search":
|
||||
sub = msg.Search(arg[1], Right(root))[0]
|
||||
default:
|
||||
sub = nil
|
||||
}
|
||||
if msg.sessions == nil {
|
||||
msg.sessions = map[string]*Message{}
|
||||
}
|
||||
if sub != nil {
|
||||
msg.sessions[arg[0]] = sub
|
||||
}
|
||||
|
||||
cmd := msg.Spawn(sub.target).Cmd(arg[1:])
|
||||
m.Copy(cmd, "result").Copy(cmd, "append")
|
||||
msg.sessions[arg[0]] = cmd
|
||||
// }}}
|
||||
}},
|
||||
"callback": &Command{Name: "callback index", Help: "查看消息", Hand: func(m *Message, c *Context, key string, arg ...string) {
|
||||
index := 0
|
||||
for msg := m.Sess("cli", false); msg != nil; msg = msg.message { // {{{
|
||||
index--
|
||||
switch len(arg) {
|
||||
case 0:
|
||||
if msg.callback == nil {
|
||||
return
|
||||
}
|
||||
|
||||
m.Echo("%d: %v\n", index, msg.callback)
|
||||
case 1:
|
||||
if msg.callback == nil {
|
||||
return
|
||||
}
|
||||
|
||||
if i, e := strconv.Atoi(arg[0]); e == nil && i == index {
|
||||
m.Echo("%v", msg.callback)
|
||||
}
|
||||
default:
|
||||
if i, e := strconv.Atoi(arg[0]); e == nil && i == index {
|
||||
msg.callback = func(msg *Message) *Message {
|
||||
return msg
|
||||
}
|
||||
m.Echo("%v", msg.callback)
|
||||
}
|
||||
return
|
||||
}
|
||||
continue
|
||||
|
||||
if len(arg) == 0 {
|
||||
m.Echo("msg(%s->%s): %d(%s) %v\n", msg.source.Name, msg.target.Name, msg.code, msg.time.Format("15:04:05"), msg.Meta["detail"])
|
||||
if msg.callback != nil {
|
||||
m.Echo(" hand: %v\n", msg.callback)
|
||||
}
|
||||
} else {
|
||||
switch arg[0] {
|
||||
case "del":
|
||||
msg.message.callback = nil
|
||||
case "add":
|
||||
msg.message.callback = func(msg *Message) *Message {
|
||||
msg.Log("info", "callback default")
|
||||
return msg
|
||||
}
|
||||
return
|
||||
default:
|
||||
m.Result(0, arg)
|
||||
msg.message.Back(m)
|
||||
return
|
||||
}
|
||||
"callback": &Command{Name: "callback", Help: "查看消息", Hand: func(m *Message, c *Context, key string, arg ...string) {
|
||||
msg := m.message // {{{
|
||||
if len(arg) == 0 {
|
||||
for msg := msg; msg != nil; msg = msg.message {
|
||||
m.Echo("%d: %p\n", msg.code, msg.callback)
|
||||
}
|
||||
}
|
||||
// }}}
|
||||
@ -2106,7 +2227,7 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
||||
choice, arg = arg[0], arg[1:]
|
||||
}
|
||||
|
||||
if s := m.Search(arg[0], root); len(s) > 0 {
|
||||
if s := m.Search(arg[0], root); len(s) > 0 && s[0] != nil {
|
||||
switch choice {
|
||||
case "first":
|
||||
ms = append(ms, s[0])
|
||||
@ -2227,7 +2348,7 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
||||
case 0:
|
||||
m.Travel(func(m *Message, i int) bool {
|
||||
if m.Cap("status") == "start" {
|
||||
m.Echo("%s(%s): %s\n", m.target.Name, m.Cap("stream"), m.target.Help)
|
||||
m.Echo("%s(%s): %s\n", m.Cap("module"), m.Cap("stream"), m.target.Help)
|
||||
}
|
||||
return true
|
||||
}, m.target.root)
|
||||
|
Loading…
x
Reference in New Issue
Block a user