From 3f745faa1017f8389220e2670c4a75af33c9c197 Mon Sep 17 00:00:00 2001 From: shylinux Date: Fri, 5 May 2023 00:20:53 +0800 Subject: [PATCH] opt some --- base/cli/system.go | 2 +- base/mdb/search.go | 6 ++++-- base/nfs/dir.go | 2 +- base/tcp/host.go | 2 +- base/web/broad.go | 2 +- base/web/dream.go | 2 +- base/web/option.go | 4 ++++ base/web/render.go | 1 + base/web/space.go | 2 +- base/web/spide.go | 2 +- base/yac/value.go | 5 +++-- core/chat/favor.go | 14 +++++++++----- core/chat/iframe.go | 6 +++++- core/chat/macos/applications.go | 25 ++++++++++++++++++++++--- core/chat/macos/desktop.css | 6 +++++- core/chat/macos/desktop.go | 4 ++++ core/chat/macos/desktop.js | 17 +++++++++-------- core/chat/macos/dock.js | 16 +++++++--------- core/chat/macos/finder.go | 15 +-------------- core/chat/macos/finder.js | 18 ++++++++++-------- core/code/vimer.go | 10 +++++----- core/code/xterm.go | 11 ++++++----- core/team/plan.go | 5 +---- core/wiki/draw.go | 9 +++------ core/wiki/word.go | 4 ++++ misc/coder/server.go | 2 +- misc/git/repos.go | 5 +---- misc/tmux/session.go | 2 +- option.go | 2 ++ 29 files changed, 115 insertions(+), 86 deletions(-) diff --git a/base/cli/system.go b/base/cli/system.go index 3ec4f543..21c50672 100644 --- a/base/cli/system.go +++ b/base/cli/system.go @@ -158,7 +158,7 @@ func init() { SYSTEM: {Name: "system cmd", Help: "系统命令", Actions: ice.MergeActions(ice.Actions{ mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { if runtime.GOOS == DARWIN && tcp.IsLocalHost(m, m.Option(ice.MSG_USERIP)) { - if arg[0] == mdb.FOREACH && arg[1] == "" { + if mdb.IsSearchForEach(m, arg, nil) { return list := map[string]bool{"Terminal.app": true, "Docker.app": true, "Google Chrome.app": true} for _, p := range strings.Split(m.Cmdx("", nfs.SH, "-c", `ps aux|grep /Applications/|grep -v Cache|grep -v Helper|grep -v Widget|grep -v Extension|grep -v Chrome|grep -v com.app|grep -v grep|grep -o "[^/]*.app"|sort|uniq`), lex.NL) { diff --git a/base/mdb/search.go b/base/mdb/search.go index b00dc0b3..08a1b4fe 100644 --- a/base/mdb/search.go +++ b/base/mdb/search.go @@ -18,8 +18,10 @@ func init() { } func IsSearchForEach(m *ice.Message, arg []string, cb func() []string) bool { if arg[0] == FOREACH && arg[1] == "" { - args := cb() - m.PushSearch(TYPE, kit.Select("", args, 0), NAME, kit.Select("", args, 1), TEXT, kit.Select("", args, 2)) + if cb != nil { + args := cb() + m.PushSearch(TYPE, kit.Select("", args, 0), NAME, kit.Select("", args, 1), TEXT, kit.Select("", args, 2)) + } return true } return false diff --git a/base/nfs/dir.go b/base/nfs/dir.go index ba22c616..00ee956e 100644 --- a/base/nfs/dir.go +++ b/base/nfs/dir.go @@ -167,7 +167,7 @@ func init() { aaa.Black(m, ice.USR_LOCAL) }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if arg[0] == mdb.FOREACH && arg[1] == "" && m.Cmdx("host", "islocal", m.Option(ice.MSG_USERIP)) == ice.OK { + if mdb.IsSearchForEach(m, arg, nil) && m.Cmdx("host", "islocal", m.Option(ice.MSG_USERIP)) == ice.OK { return kit.For([]string{"Desktop", "Documents", "Downloads", "Pictures"}, func(p string) { p = kit.HomePath(p) diff --git a/base/tcp/host.go b/base/tcp/host.go index 8596593d..e082dfdd 100644 --- a/base/tcp/host.go +++ b/base/tcp/host.go @@ -56,7 +56,7 @@ func init() { mdb.HashCreate(m, mdb.TYPE, m.ActionKey(), m.OptionSimple(mdb.NAME, mdb.TEXT)) }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if arg[0] == mdb.FOREACH && arg[1] == "" { + if mdb.IsSearchForEach(m, arg, nil) { ip := m.Cmdv(HOST, GATEWAY, aaa.IP) m.PushSearch(mdb.TYPE, GATEWAY, mdb.NAME, ip, mdb.TEXT, "http://"+ip) } diff --git a/base/web/broad.go b/base/web/broad.go index 1ea852b5..960cdedc 100644 --- a/base/web/broad.go +++ b/base/web/broad.go @@ -40,7 +40,7 @@ func init() { Index.MergeCommands(ice.Commands{ BROAD: {Name: "broad hash auto", Help: "广播", Actions: ice.MergeActions(ice.Actions{ mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if arg[0] == mdb.FOREACH && arg[1] == "" { + if mdb.IsSearchForEach(m, arg, nil) { host, domain := m.Cmdv(tcp.HOST, aaa.IP), UserWeb(m).Hostname() m.Cmds("", func(value ice.Maps) { switch kit.If(value[tcp.HOST] == host, func() { value[tcp.HOST] = domain }); value[mdb.TYPE] { diff --git a/base/web/dream.go b/base/web/dream.go index 0f399127..d910d74f 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -104,7 +104,7 @@ func init() { Index.MergeCommands(ice.Commands{ DREAM: {Name: "dream name auto create", Help: "梦想家", Actions: ice.MergeActions(ice.Actions{ mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if arg[0] == mdb.FOREACH && arg[1] == "" { + if mdb.IsSearchForEach(m, arg, nil) { m.Cmds("", func(value ice.Maps) { m.PushSearch(mdb.TEXT, m.MergePod(value[mdb.NAME]), value) }) } }}, diff --git a/base/web/option.go b/base/web/option.go index 50b20ffe..63a33fd4 100644 --- a/base/web/option.go +++ b/base/web/option.go @@ -9,6 +9,7 @@ import ( "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" + "shylinux.com/x/icebergs/base/log" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/tcp" kit "shylinux.com/x/toolkits" @@ -37,6 +38,9 @@ func AgentIs(m Message, arg ...string) bool { return false } func MergeURL2(m Message, url string, arg ...ice.Any) string { + if m.Option(log.DEBUG) == ice.TRUE { + arg = append([]ice.Any{log.DEBUG, ice.TRUE}, arg) + } if m.Option(ice.MSG_USERWEB) == "" { return kit.MergeURL2(Domain(ice.Pulse.Cmdv(tcp.HOST, aaa.IP), ice.Pulse.Cmdv(SERVE, tcp.PORT)), url, arg...) } diff --git a/base/web/render.go b/base/web/render.go index 7ceb45d4..a842f677 100644 --- a/base/web/render.go +++ b/base/web/render.go @@ -161,6 +161,7 @@ const ( CODE_XTERM = "web.code.xterm" CODE_COMPILE = "web.code.compile" CODE_GIT_STATUS = "web.code.git.status" + CODE_GIT_REPOS = "web.code.git.repos" CHAT_FAVOR = "web.chat.favor" CHAT_IFRAME = "web.chat.iframe" ) diff --git a/base/web/space.go b/base/web/space.go index 95df8d4b..47cc69ad 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -183,7 +183,7 @@ func init() { m.Cmd("", m.Option(mdb.NAME), ice.EXIT) }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if arg[0] == mdb.FOREACH && arg[1] == "" { + if mdb.IsSearchForEach(m, arg, nil) { m.Cmds("", func(value ice.Maps) { switch value[mdb.TYPE] { case MASTER: diff --git a/base/web/spide.go b/base/web/spide.go index df247c81..e0174d6d 100644 --- a/base/web/spide.go +++ b/base/web/spide.go @@ -256,7 +256,7 @@ func init() { m.Cmd("", mdb.CREATE, ice.SHY, kit.Select(kit.Select("https://shylinux.com", ice.Info.Make.Remote), conf[cli.CTX_SHY])) }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if arg[0] == mdb.FOREACH && arg[1] == "" { + if mdb.IsSearchForEach(m, arg, nil) { m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.DEV, mdb.TEXT, mdb.HashSelectField(m, ice.DEV, CLIENT_ORIGIN)) m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.COM, mdb.TEXT, mdb.HashSelectField(m, ice.COM, CLIENT_ORIGIN)) m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.SHY, mdb.TEXT, mdb.HashSelectField(m, ice.SHY, CLIENT_ORIGIN)) diff --git a/base/yac/value.go b/base/yac/value.go index fe079162..bd1b43e0 100644 --- a/base/yac/value.go +++ b/base/yac/value.go @@ -295,15 +295,16 @@ func init() { kit.If(v.tags[mdb.DATA] != "", func() { kit.Value(config.Value, kit.Keym(v.name), v.tags[mdb.DATA]) }) } }) + kit.If(strings.HasPrefix(command.Name, "list"), func() { + command.Name = strings.Replace(command.Name, "list", kit.Select("", kit.Split(key, nfs.PT), -1), 1) + }) last, list := ice.Index, kit.Split(key, nfs.PT) for i := 1; i < len(list); i++ { has := false - m.Debug("what %v", list[:i]) if ice.Pulse.Search(strings.Join(list[:i], nfs.PT)+nfs.PT, func(p *ice.Context, s *ice.Context) { has, last = true, s }); !has { last = last.Register(&ice.Context{Name: list[i-1], Caches: ice.Caches{ice.CTX_FOLLOW: &ice.Cache{Value: kit.Keys(list[:i])}}}, &web.Frame{}) } if i == len(list)-1 { - m.Debug("what %v", last.Cap(ice.CTX_FOLLOW)) last.Merge(&ice.Context{Commands: ice.Commands{list[i]: command}, Configs: ice.Configs{list[i]: config}}) } } diff --git a/core/chat/favor.go b/core/chat/favor.go index 9c7437e9..1d4998fd 100644 --- a/core/chat/favor.go +++ b/core/chat/favor.go @@ -7,7 +7,6 @@ import ( "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/gdb" - "shylinux.com/x/icebergs/base/log" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/ssh" @@ -35,11 +34,9 @@ const FAVOR = "favor" func init() { Index.MergeCommands(ice.Commands{ - FAVOR: {Name: "favor hash auto create getClipboardData getLocation scanQRCode record1 record2 upload", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{ + FAVOR: {Name: "favor hash auto create upload getClipboardData", Help: "收藏夹", Actions: ice.MergeActions(ice.Actions{ mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if arg[0] == mdb.FOREACH && arg[1] == "" { - m.PushSearch(mdb.TYPE, web.LINK, mdb.NAME, m.CommandKey(), mdb.TEXT, m.MergePodCmd("", "", log.DEBUG, ice.TRUE)) - } + mdb.IsSearchForEach(m, arg, func() []string { return []string{web.LINK, m.CommandKey(), m.MergePodCmd("", "")} }) if arg[0] == mdb.FOREACH { m.Cmd("", ice.OptionFields("")).Table(func(value ice.Maps) { if arg[1] == "" || arg[1] == value[mdb.TYPE] || strings.Contains(value[mdb.TEXT], arg[1]) { @@ -110,6 +107,13 @@ func init() { gdb.Event(m, FAVOR_ACTION, arg) return } + if len(arg) == 0 { + if m.IsMobileUA() { + m.Action("getLocation", "scanQRCode") + } else { + m.Action("record1", "record2") + } + } if mdb.HashSelect(m, arg...); len(arg) > 0 { text := m.Append(mdb.TEXT) if strings.HasPrefix(m.Append(mdb.TEXT), ice.VAR_FILE) { diff --git a/core/chat/iframe.go b/core/chat/iframe.go index 77ee433a..3dabc85c 100644 --- a/core/chat/iframe.go +++ b/core/chat/iframe.go @@ -65,7 +65,11 @@ func init() { }}, }, mdb.HashAction(mdb.SHORT, web.LINK, mdb.FIELD, "time,hash,type,name,link"), FavorAction()), Hand: func(m *ice.Message, arg ...string) { if mdb.HashSelect(m, arg...); len(arg) == 0 { - m.PushAction(web.OPEN, mdb.REMOVE).Action(mdb.CREATE, mdb.PRUNES) + if m.Length() == 0 { + m.Action(mdb.CREATE) + } else { + m.PushAction(web.OPEN, mdb.REMOVE).Action(mdb.CREATE, mdb.PRUNES) + } } else { if m.Length() == 0 { m.Append(web.LINK, arg[0]) diff --git a/core/chat/macos/applications.go b/core/chat/macos/applications.go index ba031c6f..d233645d 100644 --- a/core/chat/macos/applications.go +++ b/core/chat/macos/applications.go @@ -2,6 +2,7 @@ package macos import ( ice "shylinux.com/x/icebergs" + "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" @@ -17,16 +18,34 @@ func init() { Index.MergeCommands(ice.Commands{ APPLICATIONS: {Actions: ice.MergeActions(ice.Actions{ ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { - Notify(m, "runtime", "系统启动成功", ctx.INDEX, "cli.runtime") + Notify(m, cli.RUNTIME, "系统启动成功", ctx.INDEX, cli.RUNTIME) FinderAppend(m, "Applications", m.PrefixKey()) - FinderAppend(m, "Pictures", web.WIKI_FEEL) - AppInstall(m, "Finder", "nfs.dir") + AppInstall(m, "Finder", nfs.DIR) AppInstall(m, "Safari", web.CHAT_IFRAME) AppInstall(m, "Calendar", web.TEAM_PLAN, ctx.ARGS, team.MONTH) AppInstall(m, "Terminal", web.CODE_XTERM) AppInstall(m, "Grapher", web.WIKI_DRAW) AppInstall(m, "Photos", web.WIKI_FEEL) AppInstall(m, "Books", web.WIKI_WORD) + AppInstall(m, "", web.CODE_VIMER) + AppInstall(m, "", web.CHAT_FAVOR) + AppInstall(m, "", web.DREAM) + if m.Cmd(DESKTOP).Length() == 0 { + DeskAppend(m, "Books", web.WIKI_WORD) + DeskAppend(m, "Photos", web.WIKI_FEEL) + DeskAppend(m, "Grapher", web.WIKI_DRAW) + DeskAppend(m, "Calendar", web.TEAM_PLAN, ctx.ARGS, team.MONTH) + DeskAppend(m, "", web.CHAT_FAVOR) + } + if m.Cmd(DOCK).Length() == 0 { + DockAppend(m, "Finder", Prefix(FINDER)) + DockAppend(m, "Safari", web.CHAT_IFRAME) + DockAppend(m, "Terminal", web.CODE_XTERM) + DockAppend(m, "", web.CODE_GIT_REPOS, mdb.ICON, "usr/icons/git.jpg") + DockAppend(m, "", web.CODE_COMPILE, mdb.ICON, "usr/icons/go.png") + DockAppend(m, "", web.CODE_VIMER) + DockAppend(m, "", web.DREAM) + } }}, code.INSTALL: {Hand: func(m *ice.Message, arg ...string) { AppInstall(m, arg[0], arg[1], arg[2:]...) }}, }, CmdHashAction("index,args"))}, diff --git a/core/chat/macos/desktop.css b/core/chat/macos/desktop.css index c02650c8..45330504 100644 --- a/core/chat/macos/desktop.css +++ b/core/chat/macos/desktop.css @@ -6,7 +6,8 @@ fieldset.macos.desktop>div.output>fieldset.macos.searchs { position:absolute; } fieldset.macos.desktop>div.output>fieldset.macos.searchs>form.option>div.item.icon.delete { display:none; } fieldset.macos.desktop>div.output>fieldset.macos.searchs>form.option>div.item.keyword input { width:320px; background-color:transparent; border:#404141 solid 1px; } fieldset.macos.desktop>div.output>fieldset.macos.searchs>form.option>div.item.keyword:hover { background-color:transparent; } -fieldset.macos.desktop>div.output>fieldset.macos.notifications { height:calc(100% - 25px); width:250px; overflow:auto; position:absolute; top:25px; right:0; } +fieldset.macos.desktop>div.output>fieldset.macos.notifications { border-radius:0; height:calc(100% - 25px); width:250px; overflow:auto; position:absolute; top:25px; right:0; } +fieldset.macos.desktop>div.output>fieldset.macos.notifications>div.action>div.item { margin-top:10px; } fieldset.macos.desktop>div.output>fieldset.macos.notifications>div.action>div.item input { background-color:transparent; } fieldset.macos.desktop>div.output>fieldset.macos.notifications>div.output>div.item { margin-top:10px; margin-right:10px; min-height:60px; clear:both; } fieldset.macos.desktop>div.output>fieldset.macos.notifications div.item div.title { margin-top:10px; width:132px; overflow:hidden; } @@ -30,7 +31,9 @@ fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.item:last fieldset.macos.desktop>div.output>div.desktop>fieldset>div.action>* { margin:10px 0px 10px 10px; } fieldset.macos.desktop>div.output>div.desktop>fieldset>div.action>div.item.icons>span.icon { margin-top:12px; } fieldset.macos.desktop>div.output>div.desktop>fieldset>div.action>div.item:last-child { margin-right:80px; } +fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.item:last-child { margin-right:80px; } fieldset.macos.desktop>div.output>div.desktop>fieldset.web.code.xterm>div.status { display:none; } +fieldset.macos.desktop>div.output>div.desktop>fieldset.web.code.xterm>div.action>div.tabs:only-child { display:none; } fieldset.macos.desktop>div.output>div.desktop>fieldset.web.code.vimer>div.status { display:none; } fieldset.macos.desktop>div.output>div.desktop>fieldset.web.wiki.feel>div.status { display:none; } fieldset.macos.desktop>div.output>div.desktop>fieldset.web.chat.iframe>div.status { display:none; } @@ -46,6 +49,7 @@ fieldset.macos.dock>div.output { height:80px; overflow:visible; display:flex; } fieldset.macos.dock>div.output>div.space { background-color:#ececec36; margin:10px; height:calc(100% - 20px); width:2px; } fieldset.macos.dock>div.output>div.item { text-align:center; align-self:baseline; transition:margin-top 0.3s; } fieldset.macos.dock>div.output>div.item:hover { background-color:unset; margin-top:-80px; transition:margin-top 0.3s; } +fieldset.macos.dock>div.output>div.item>div.name { display:none; } fieldset.macos.dock>div.output>div.item img { border-radius:80px; width:80px; transition:width 0.3s; } fieldset.macos.dock>div.output>div.item img:hover { width:160px; transition:width 0.3s; } fieldset.macos.finder>div.output>div.project>div.item input { width:100%; } diff --git a/core/chat/macos/desktop.go b/core/chat/macos/desktop.go index 86f7ab20..ce829009 100644 --- a/core/chat/macos/desktop.go +++ b/core/chat/macos/desktop.go @@ -5,3 +5,7 @@ import ice "shylinux.com/x/icebergs" const DESKTOP = "desktop" func init() { Index.MergeCommands(ice.Commands{DESKTOP: {Actions: CmdHashAction()}}) } + +func DeskAppend(m *ice.Message, name, index string, arg ...string) { + install(m, DESKTOP, name, index, arg...) +} diff --git a/core/chat/macos/desktop.js b/core/chat/macos/desktop.js index 935ec5b6..91453673 100644 --- a/core/chat/macos/desktop.js +++ b/core/chat/macos/desktop.js @@ -18,6 +18,7 @@ Volcanos(chat.ONIMPORT, { can.page.style(can, sub._target, html.LEFT, can.ConfWidth()/4, html.TOP, can.ConfHeight()/4), sub.onimport.size(sub, can.ConfHeight()/2, can.ConfWidth()/2, true) sub.onexport.record = function(sub, value, key, item) { if (item.cmd == ctx.COMMAND) { can.onimport._window(can, {index: can.core.Keys(item.type, item.name.split(lex.SP)[0])}) } + if (item.type == nfs.FILE) { can.onimport._window(can, {index: web.CODE_VIMER, args: can.misc.SplitPath(can, item.text) }) } } }) }, _notifications: function(can) { can.onappend.plugin(can, {index: "web.chat.macos.notifications", style: html.OUTPUT}, function(sub) { can.ui.notifications = sub @@ -30,14 +31,12 @@ Volcanos(chat.ONIMPORT, { _item: function(can, item) { can.runAction(can.request(event, item), mdb.CREATE, [], function() { can.run(event, [], function(msg) { can.page.SelectChild(can, can.ui.desktop, html.DIV_ITEM, function(target) { can.page.Remove(can, target) }), can.onimport.__item(can, msg, can.ui.desktop) }) }) }, - __item: function(can, msg, target) { msg = msg||can._msg, msg.Table(function(item, index) { - can.page.Append(can, target, [{view: html.ITEM, list: [{view: html.ICON, list: [{img: can.misc.PathJoin(item.icon)}]}, {view: [mdb.NAME, "", item.name]}], - onclick: function(event) { can.onimport._window(can, item) }, style: can.onexport.position(can, index), - oncontextmenu: function(event) { var carte = can.user.carteRight(event, can, { - remove: function() { can.runAction(event, mdb.REMOVE, [item.hash]) }, - }); can.page.style(can, carte._target, html.TOP, event.y) }, - }]) - }) }, + __item: function(can, msg, target) { var index = 0; can.onimport.icon(can, msg = msg||can._msg, target, function(target, item) { can.page.Modify(can, target, { + onclick: function(event) { can.onimport._window(can, item) }, style: can.onexport.position(can, index++), + oncontextmenu: function(event) { var carte = can.user.carteRight(event, can, { + remove: function() { can.runAction(event, mdb.REMOVE, [item.hash]) }, + }); can.page.style(can, carte._target, html.TOP, event.y) }, + }) }) }, _desktop: function(can, msg) { var target = can.page.Append(can, can._output, [{view: html.DESKTOP}])._target; can.onimport.__item(can, msg, target), can.ui.desktop = target target._tabs = can.onimport.tabs(can, [{name: "Desktop"+(can.page.Select(can, can._output, html.DIV_DESKTOP).length-1)}], function() { can.onmotion.select(can, can._output, "div.desktop", target), can.ui.desktop = target }, function() { can.page.Remove(can, target) }, can.ui.menu._output), target._tabs._desktop = target target.ondragend = function() { can.onimport._item(can, window._drag_item) } @@ -63,6 +62,8 @@ Volcanos(chat.ONIMPORT, { sub.onexport.marginTop = function() { return 25 } sub.onappend.desktop = function(item) { can.onimport._item(can, item) } sub.onappend.dock = function(item) { can.ui.dock.runAction(can.request(event, item), mdb.CREATE, [], function() { can.ui.dock.Update() }) } + sub.onexport.output = function() { if (item.index == "web.chat.macos.opens") { can.page.Remove(can, sub._target) } } + }, can.ui.desktop) }, session: function(can, list) { can.page.Select(can, can._output, html.DIV_DESKTOP, function(target) { can.page.Remove(can, target) }), can.onmotion.clear(can, can._action) diff --git a/core/chat/macos/dock.js b/core/chat/macos/dock.js index 1ac0495d..5a48179c 100644 --- a/core/chat/macos/dock.js +++ b/core/chat/macos/dock.js @@ -1,12 +1,10 @@ -Volcanos(chat.ONIMPORT, {_init: function(can, msg) { - function show(msg) { can.onmotion.clear(can) - msg.Table(function(item) { can.page.Append(can, can._output, [{view: html.ITEM, title: item.name, list: [{view: html.ICON, list: [{img: can.misc.PathJoin(item.icon||can.page.drawText(can, item.name))}] }], - onclick: function(event) { can.sup.onexport.record(can, item.name, mdb.NAME, item) }, - oncontextmenu: function(event) { var carte = can.user.carte(event, can, { - remove: function() { item.name != "Finder" && can.runAction(event, mdb.REMOVE, [item.hash]) }, - }); can.page.style(can, carte._target, html.LEFT, event.x) }, - }]) }), can.page.Append(can, can._output, [{view: "space"}]) - } show(msg) +Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can) + can.onimport.icon(can, msg = msg||can._msg, can._output, function(target, item) { can.page.Modify(can, target, { + onclick: function(event) { can.sup.onexport.record(can, item.name, mdb.NAME, item) }, + oncontextmenu: function(event) { var carte = can.user.carte(event, can, { + remove: function() { item.name != "Finder" && can.runAction(event, mdb.REMOVE, [item.hash]) }, + }); can.page.style(can, carte._target, html.LEFT, event.x) }, + }) }), can.page.Append(can, can._output, [{view: "space"}]) return var current = null, before, begin can.page.SelectChild(can, can._output, mdb.FOREACH, function(target) { target.draggable = true diff --git a/core/chat/macos/finder.go b/core/chat/macos/finder.go index ceb6158e..370a0b91 100644 --- a/core/chat/macos/finder.go +++ b/core/chat/macos/finder.go @@ -2,7 +2,6 @@ package macos import ( ice "shylinux.com/x/icebergs" - "shylinux.com/x/icebergs/base/log" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/web" ) @@ -12,20 +11,8 @@ const FINDER = "finder" func init() { Index.MergeCommands(ice.Commands{ FINDER: {Name: "finder list", Actions: ice.MergeActions(ice.Actions{ - ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { - if m.Cmd(DOCK).Length() == 0 { - DockAppend(m, "Finder", m.PrefixKey()) - DockAppend(m, "Safari", web.CHAT_IFRAME) - DockAppend(m, "Terminal", web.CODE_XTERM) - DockAppend(m, "", web.CODE_GIT_STATUS, mdb.ICON, "usr/icons/git.jpg") - DockAppend(m, "", web.CODE_COMPILE, mdb.ICON, "usr/icons/go.png") - DockAppend(m, "", web.CODE_VIMER) - } - }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - mdb.IsSearchForEach(m, arg, func() []string { - return []string{web.LINK, DESKTOP, m.MergePodCmd("", DESKTOP, log.DEBUG, ice.TRUE)} - }) + mdb.IsSearchForEach(m, arg, func() []string { return []string{web.LINK, DESKTOP, m.MergePodCmd("", DESKTOP)} }) }}, }, CmdHashAction(mdb.NAME))}, }) diff --git a/core/chat/macos/finder.js b/core/chat/macos/finder.js index 5273c1e5..a0539afb 100644 --- a/core/chat/macos/finder.js +++ b/core/chat/macos/finder.js @@ -8,13 +8,15 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { can.onmotion.clear(can), c }) }); index == 0 && item.click() }), can.onmotion.hidden(can, can.ui.profile), can.onmotion.hidden(can, can.ui.display) }, - icons: function(can, msg, target) { msg.Table(function(value) { value.icon = can.misc.PathJoin(value.icon||can.page.drawText(can, value.name, 80)) - var item = can.page.Append(can, target, [{view: html.ITEM, list: [{view: html.ICON, list: [{img: value.icon}]}, {view: [mdb.NAME, "", value.name]}], onclick: function(event) { - can.sup.onexport.record(can.sup, value.name, mdb.NAME, value) - }, oncontextmenu: function(event) { can.user.carteRight(event, can, { - "add to desktop": function() { can.sup.onappend.desktop(value) }, - "add to dock": function() { can.sup.onappend.dock(value) }, - }, []) }}])._target; item.draggable = true, item.ondragstart = function(event) { window._drag_item = value } - }) }, + icons: function(can, msg, target) { + can.onimport.icon(can, msg = msg||can._msg, target, function(target, item) { can.page.Modify(can, target, { + onclick: function(event) { + can.sup.onexport.record(can.sup, item.name, mdb.NAME, item) + }, oncontextmenu: function(event) { can.user.carteRight(event, can, { + "add to desktop": function() { can.sup.onappend.desktop(item) }, + "add to dock": function() { can.sup.onappend.dock(item) }, + }, []) }, draggable: true, ondragstart: function(event) { window._drag_item = item }, + })}) + }, layout: function(can) { can.ui.layout(can.ConfHeight(), can.ConfWidth()) }, }) diff --git a/core/code/vimer.go b/core/code/vimer.go index 6668ad97..f7dc5265 100644 --- a/core/code/vimer.go +++ b/core/code/vimer.go @@ -10,7 +10,6 @@ import ( "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/lex" - "shylinux.com/x/icebergs/base/log" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/ssh" @@ -58,13 +57,14 @@ func init() { Index.MergeCommands(ice.Commands{ VIMER: {Name: "vimer path=src/@key file=main.go line=1 list", Help: "编辑器", Meta: kit.Dict(ctx.STYLE, INNER), Actions: ice.MergeActions(ice.Actions{ mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if arg[0] == mdb.FOREACH && arg[1] == "" { - m.PushSearch(mdb.TYPE, nfs.FILE, mdb.NAME, "main", mdb.TEXT, ice.SRC_MAIN_GO) + if mdb.IsSearchForEach(m, arg, nil) { m.PushSearch(mdb.TYPE, nfs.FILE, mdb.NAME, "main", mdb.TEXT, ice.SRC_MAIN_SH) + m.PushSearch(mdb.TYPE, nfs.FILE, mdb.NAME, "main", mdb.TEXT, ice.SRC_MAIN_SHY) + m.PushSearch(mdb.TYPE, nfs.FILE, mdb.NAME, "main", mdb.TEXT, ice.SRC_MAIN_GO) m.PushSearch(mdb.TYPE, nfs.FILE, mdb.NAME, "main", mdb.TEXT, ice.SRC_MAIN_JS) - m.PushSearch(mdb.TYPE, web.LINK, mdb.NAME, "admin", mdb.TEXT, web.MergeURL2(m, nfs.PS, log.DEBUG, ice.TRUE)) - m.PushSearch(mdb.TYPE, web.LINK, mdb.NAME, m.CommandKey(), mdb.TEXT, m.MergePodCmd("", "", log.DEBUG, ice.TRUE)) + m.PushSearch(mdb.TYPE, web.LINK, mdb.NAME, "admin", mdb.TEXT, web.MergeURL2(m, nfs.PS)) } + mdb.IsSearchForEach(m, arg, func() []string { return []string{web.LINK, m.CommandKey(), m.MergePodCmd("", "")} }) }}, mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { switch m.Option(ctx.ACTION) { diff --git a/core/code/xterm.go b/core/code/xterm.go index 82a2351e..164809eb 100644 --- a/core/code/xterm.go +++ b/core/code/xterm.go @@ -9,7 +9,6 @@ import ( "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/lex" - "shylinux.com/x/icebergs/base/log" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/ssh" @@ -71,9 +70,7 @@ func init() { Index.MergeCommands(ice.Commands{ XTERM: {Name: "xterm hash auto", Help: "命令行", Actions: ice.MergeActions(ice.Actions{ mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if arg[0] == mdb.FOREACH && arg[1] == "" { - m.PushSearch(mdb.TYPE, web.LINK, mdb.NAME, m.CommandKey(), mdb.TEXT, m.MergePodCmd("", "", log.DEBUG, ice.TRUE)) - } + mdb.IsSearchForEach(m, arg, func() []string { return []string{web.LINK, m.CommandKey(), m.MergePodCmd("", "")} }) }}, mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { switch mdb.HashInputs(m, arg); arg[0] { @@ -121,7 +118,11 @@ func init() { }}, }, ctx.CmdAction(), ctx.ProcessAction(), web.DreamAction(), mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,path,theme,daemon")), Hand: func(m *ice.Message, arg ...string) { if mdb.HashSelect(m, arg...); len(arg) == 0 { - m.PushAction(web.OUTPUT, mdb.REMOVE).Action(mdb.CREATE, mdb.PRUNES) + if m.Length() == 0 { + m.Action(mdb.CREATE) + } else { + m.PushAction(web.OUTPUT, mdb.REMOVE).Action(mdb.CREATE, mdb.PRUNES) + } } else { if m.Length() == 0 { arg[0] = m.Cmdx("", mdb.CREATE, mdb.TYPE, arg) diff --git a/core/team/plan.go b/core/team/plan.go index fc879229..77d24231 100644 --- a/core/team/plan.go +++ b/core/team/plan.go @@ -6,7 +6,6 @@ import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/ctx" - "shylinux.com/x/icebergs/base/log" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/web" kit "shylinux.com/x/toolkits" @@ -63,9 +62,7 @@ func init() { m.Cmdy(TASK, mdb.INSERT, arg) }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if arg[0] == mdb.FOREACH && arg[1] == "" { - m.PushSearch(mdb.TYPE, web.LINK, mdb.NAME, m.CommandKey(), mdb.TEXT, m.MergePodCmd("", "", log.DEBUG, ice.TRUE)) - } + mdb.IsSearchForEach(m, arg, func() []string { return []string{web.LINK, m.CommandKey(), m.MergePodCmd("", "")} }) }}, ice.RUN: {Hand: func(m *ice.Message, arg ...string) { if m.RenameOption(TASK_POD, ice.POD); ctx.PodCmd(m, m.PrefixKey(), ice.RUN, arg) { diff --git a/core/wiki/draw.go b/core/wiki/draw.go index 3f0759aa..7fc7a3a0 100644 --- a/core/wiki/draw.go +++ b/core/wiki/draw.go @@ -5,7 +5,6 @@ import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/ctx" - "shylinux.com/x/icebergs/base/log" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/web" @@ -20,15 +19,13 @@ func init() { ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(mdb.RENDER, mdb.CREATE, mdb.TYPE, nfs.SVG, mdb.NAME, m.PrefixKey()) }}, + mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { + mdb.IsSearchForEach(m, arg, func() []string { return []string{web.LINK, m.CommandKey(), m.MergePodCmd("", "")} }) + }}, mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { defer m.Echo("").Echo("") m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) }}, - mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if arg[0] == mdb.FOREACH && arg[1] == "" { - m.PushSearch(mdb.TYPE, web.LINK, mdb.NAME, m.CommandKey(), mdb.TEXT, m.MergePodCmd("", "", log.DEBUG, ice.TRUE)) - } - }}, }, WikiAction("", nfs.SVG), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) { kit.If(!_wiki_list(m, arg...), func() { _wiki_show(m, arg[0]) diff --git a/core/wiki/word.go b/core/wiki/word.go index 00428d97..bb877f60 100644 --- a/core/wiki/word.go +++ b/core/wiki/word.go @@ -7,6 +7,7 @@ import ( "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/ssh" + "shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/core/code" "shylinux.com/x/icebergs/misc/git" kit "shylinux.com/x/toolkits" @@ -33,6 +34,9 @@ func init() { WordAlias(m, CHAIN, CHART, CHAIN) WordAlias(m, SEQUENCE, CHART, SEQUENCE) }}, + mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { + mdb.IsSearchForEach(m, arg, func() []string { return []string{web.LINK, m.CommandKey(), m.MergePodCmd("", "")} }) + }}, mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(git.REPOS, ice.OptionFields(nfs.PATH)).Table(func(value ice.Maps) { if m.Option(nfs.DIR_DEEP, ice.TRUE); kit.Path(value[nfs.PATH]) == kit.Path("") { diff --git a/misc/coder/server.go b/misc/coder/server.go index d73e4d2d..9e15ea99 100644 --- a/misc/coder/server.go +++ b/misc/coder/server.go @@ -23,7 +23,7 @@ type server struct { } func (s server) Search(m *ice.Message, arg ...string) { - if arg[0] == mdb.FOREACH && arg[1] == "" { + if mdb.IsSearchForEach(m.Message, arg, nil) { s.Code.List(m.Spawn(kit.Dict(ice.MSG_FIELDS, "time,port,status,pid,cmd,dir")), "") m.Table(func(value ice.Maps) { m.PushSearch(mdb.TYPE, value[cli.STATUS], mdb.NAME, value[nfs.PATH], mdb.TEXT, value[mdb.LINK]) diff --git a/misc/git/repos.go b/misc/git/repos.go index d269ba94..e0e6f56b 100644 --- a/misc/git/repos.go +++ b/misc/git/repos.go @@ -20,7 +20,6 @@ import ( "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/gdb" "shylinux.com/x/icebergs/base/lex" - "shylinux.com/x/icebergs/base/log" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/web" @@ -345,9 +344,7 @@ func init() { _repos_insert(m, kit.Path("")) }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if arg[0] == mdb.FOREACH && arg[1] == "" { - m.PushSearch(mdb.TYPE, web.LINK, mdb.NAME, m.CommandKey(), mdb.TEXT, m.MergePodCmd("", "", log.DEBUG, ice.TRUE)) - } + mdb.IsSearchForEach(m, arg, func() []string { return []string{web.LINK, m.CommandKey(), m.MergePodCmd("", "")} }) }}, mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { switch arg[0] { diff --git a/misc/tmux/session.go b/misc/tmux/session.go index 1427b2cf..3d928fd8 100644 --- a/misc/tmux/session.go +++ b/misc/tmux/session.go @@ -85,7 +85,7 @@ func init() { web.DREAM_CREATE: {Hand: func(m *ice.Message, arg ...string) { m.Cmd("", mdb.CREATE) }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { return - if arg[0] == mdb.FOREACH && arg[1] == "" { + if mdb.IsSearchForEach(m, arg, nil) { m.Cmd("", ice.OptionFields(""), func(value ice.Maps) { m.PushSearch(mdb.TYPE, ssh.SHELL, mdb.NAME, value[SESSION], mdb.TEXT, "tmux attach -t "+value[SESSION], value) }) diff --git a/option.go b/option.go index 619b885e..b185d6aa 100644 --- a/option.go +++ b/option.go @@ -46,6 +46,7 @@ func (m *Message) OptionCB(key string, cb ...Any) Any { func (m *Message) MergePod(pod string, arg ...Any) string { ls := []string{"chat"} kit.If(kit.Keys(m.Option(MSG_USERPOD), pod), func(p string) { ls = append(ls, POD, p) }) + kit.If(m.Option(DEBUG) == TRUE, func() { arg = append([]Any{DEBUG, TRUE}, arg...) }) return kit.MergeURL2(strings.Split(kit.Select(Info.Domain, m.Option(MSG_USERWEB)), QS)[0], PS+kit.Join(ls, PS), arg...) } func (m *Message) MergePodCmd(pod, cmd string, arg ...Any) string { @@ -56,6 +57,7 @@ func (m *Message) MergePodCmd(pod, cmd string, arg ...Any) string { cmd = kit.Select(m.PrefixKey(), m.CommandKey(), ok) } ls = append(ls, CMD, cmd) + kit.If(m.Option(DEBUG) == TRUE, func() { arg = append([]Any{DEBUG, TRUE}, arg...) }) return kit.MergeURL2(strings.Split(kit.Select(Info.Domain, m.Option(MSG_USERWEB)), QS)[0], PS+kit.Join(ls, PS), arg...) } func (m *Message) FieldsIsDetail() bool {