From ac660c4f04bc43f444d87a091e8634a5c5444b61 Mon Sep 17 00:00:00 2001 From: shy Date: Sun, 3 Sep 2023 09:40:18 +0800 Subject: [PATCH] add some --- base/cli/qrcode.go | 13 +++++----- base/cli/system.go | 1 - base/ctx/display.go | 4 ++- base/lex/split.go | 2 ++ base/nfs/dir.go | 3 ++- base/web/dream.go | 52 +++++++++++++++++++++++++++++++++++-- base/web/option.go | 2 +- base/web/serve.go | 1 - base/web/share.go | 2 +- base/web/space.go | 2 +- conf.go | 10 +++---- core/chat/iframe.go | 10 +++---- core/chat/macos/desktop.css | 4 +-- core/chat/macos/desktop.js | 5 ++-- core/chat/macos/dock.go | 4 +-- core/chat/macos/macos.go | 2 +- core/chat/macos/menu.js | 2 +- core/code/makefile.go | 12 ++++++++- core/code/vimer.go | 7 +++++ misc/webview/webview.go | 8 ++++-- render.go | 8 ++---- 21 files changed, 109 insertions(+), 45 deletions(-) diff --git a/base/cli/qrcode.go b/base/cli/qrcode.go index c8226dd1..515cc0d3 100644 --- a/base/cli/qrcode.go +++ b/base/cli/qrcode.go @@ -61,18 +61,17 @@ func init() { }}, }, Hand: func(m *ice.Message, arg ...string) { switch m.Option(ice.MSG_THEME) { - case "black": - m.Option(FG, kit.Select(CYAN, arg, 1)) - m.Option(BG, kit.Select(BLACK, arg, 2)) + case "light", "white": + m.Option(FG, kit.Select(BLACK, arg, 1)) + m.Option(BG, kit.Select(WHITE, arg, 2)) default: - dark := kit.IndexOf([]string{BLACK, "dark"}, m.Option(ice.MSG_THEME)) > -1 - m.Option(FG, kit.Select(kit.Select(BLACK, SILVER, dark), arg, 1)) - m.Option(BG, kit.Select(kit.Select(WHITE, BLACK, dark), arg, 2)) + m.Option(FG, kit.Select(kit.Select(BLACK, m.Option("--plugin-fg-color")), arg, 1)) + m.Option(BG, kit.Select(kit.Select(WHITE, m.Option("--plugin-bg-color")), arg, 2)) } if m.IsCliUA() { _qrcode_cli(m, kit.Select(kit.Select(ice.Info.Make.Domain, ice.Info.Domain), arg, 0)) } else { - m.Option(SIZE, kit.Select(kit.Format(kit.Max(240, kit.Min(480, kit.Int(m.Option(ice.MSG_HEIGHT)), kit.Int(m.Option(ice.MSG_WIDTH))))), arg, 3)) + m.OptionDefault(SIZE, "480") m.StatusTime(mdb.LINK, _qrcode_web(m, tcp.PublishLocalhost(m, kit.Select(m.Option(ice.MSG_USERWEB), arg, 0)))) } }}, diff --git a/base/cli/system.go b/base/cli/system.go index e9d0a9da..83889fb7 100644 --- a/base/cli/system.go +++ b/base/cli/system.go @@ -179,7 +179,6 @@ func init() { if len(arg) == 1 { arg = append(arg, "") } - m.Option(CMD_ENV, "COLUMNS", kit.Int(kit.Select("1920", m.Option(ice.MSG_WIDTH)))/12) m.Echo(SystemCmds(m, "man %s %s|col -b", kit.Select("", arg[1], arg[1] != "1"), arg[0])) }}, }, mdb.HashAction(mdb.SHORT, "cmd", mdb.FIELD, "time,cmd,arg")), Hand: func(m *ice.Message, arg ...string) { diff --git a/base/ctx/display.go b/base/ctx/display.go index 19ba81fb..bb49f427 100644 --- a/base/ctx/display.go +++ b/base/ctx/display.go @@ -43,7 +43,9 @@ func DisplayStorySpide(m displayMessage, arg ...ice.Any) displayMessage { } func DisplayStudio(m *ice.Message, cmd ...string) displayMessage { for i, k := range cmd { - cmd[i] = m.Prefix(k) + if !strings.Contains(cmd[i], nfs.PT) { + cmd[i] = m.Prefix(k) + } } return DisplayStory(m.Cmdy(COMMAND, cmd), "studio.js") } diff --git a/base/lex/split.go b/base/lex/split.go index db809212..a3425252 100644 --- a/base/lex/split.go +++ b/base/lex/split.go @@ -65,6 +65,8 @@ func _split_list(m *ice.Message, file string, arg ...string) ice.Map { cb(ls) case func(string, []string): cb(text, ls) + case func(int, string, []string): + cb(indent, text, ls) case nil: default: m.ErrorNotImplement(cb) diff --git a/base/nfs/dir.go b/base/nfs/dir.go index c4163114..262a1b24 100644 --- a/base/nfs/dir.go +++ b/base/nfs/dir.go @@ -141,6 +141,7 @@ const ( BIN = "bin/" USR = "usr/" USR_PORTAL = ice.USR_PORTAL + USR_PUBLISH = ice.USR_PUBLISH USR_LOCAL_WORK = ice.USR_LOCAL_WORK SRC_DOCUMENT = ice.SRC_DOCUMENT REQUIRE = "/require/" @@ -190,7 +191,7 @@ func init() { if !aaa.Right(m, path.Join(root, dir)) { return } - m.Logs(FIND, DIR_ROOT, root, PATH, dir, DIR_TYPE, m.Option(DIR_TYPE)) + m.Logs(FIND, DIR_ROOT, root, PATH, dir, m.OptionSimple(DIR_TYPE, DIR_REG)) fields := kit.Split(kit.Select(kit.Select(DIR_DEF_FIELDS, m.OptionFields()), kit.Join(kit.Slice(arg, 1)))) size, last := _dir_list(m, root, dir, 0, m.Option(DIR_DEEP) == ice.TRUE, kit.Select(TYPE_BOTH, m.Option(DIR_TYPE)), regexp.MustCompile(m.Option(DIR_REG)), fields) m.Status(mdb.TIME, last, mdb.COUNT, kit.Split(m.FormatSize())[0], SIZE, kit.FmtSize(size), DIR_ROOT, m.Option(DIR_ROOT), kit.MDB_COST, m.FormatCost()) diff --git a/base/web/dream.go b/base/web/dream.go index dcd9f3dc..5e9304ab 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -3,6 +3,7 @@ package web import ( "os" "path" + "regexp" "runtime" "strings" @@ -24,18 +25,21 @@ func _dream_list(m *ice.Message) *ice.Message { mdb.HashSelect(m).Table(func(value ice.Maps) { if space, ok := list[value[mdb.NAME]]; ok { msg := gdb.Event(m.Spawn(value, space), DREAM_TABLES).Copy(m.Spawn().PushButton(cli.STOP)) + m.Push(nfs.VERSION, space[nfs.VERSION]) m.Push(mdb.TYPE, space[mdb.TYPE]) m.Push(cli.STATUS, cli.START) m.Push(mdb.TEXT, msg.Append(mdb.TEXT)) m.PushButton(strings.Join(msg.Appendv(ctx.ACTION), "")) stats[cli.START]++ } else if nfs.Exists(m, path.Join(ice.USR_LOCAL_WORK, value[mdb.NAME])) { + m.Push(nfs.VERSION, "") m.Push(mdb.TYPE, WORKER) m.Push(cli.STATUS, cli.STOP) m.Push(mdb.TEXT, "") m.PushButton(cli.START, nfs.TRASH) stats[cli.STOP]++ } else { + m.Push(nfs.VERSION, "") m.Push(mdb.TYPE, WORKER) m.Push(cli.STATUS, cli.STOP) m.Push(mdb.TEXT, "") @@ -122,7 +126,7 @@ const DREAM = "dream" func init() { Index.MergeCommands(ice.Commands{ - DREAM: {Name: "dream name@key auto create", Help: "梦想家", Actions: ice.MergeActions(ice.Actions{ + DREAM: {Name: "dream name@key auto create startall stopall", Help: "梦想家", Actions: ice.MergeActions(ice.Actions{ mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { if mdb.IsSearchPreview(m, arg) { m.Cmds("", func(value ice.Maps) { m.PushSearch(mdb.TEXT, m.MergePod(value[mdb.NAME]), value) }) @@ -171,13 +175,57 @@ func init() { kit.Switch(m.Option(mdb.TYPE), []string{SERVER, WORKER}, func() { m.PushButton(OPEN) }) }}, OPEN: {Hand: func(m *ice.Message, arg ...string) { ctx.ProcessOpen(m, m.MergePod(m.Option(mdb.NAME))) }}, + "startall": {Name: "startall name", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + reg, err := regexp.Compile(m.Option(mdb.NAME)) + if m.Warn(err) { + return + } + list := []string{} + m.Spawn().Cmds("").Table(func(value ice.Maps) { + if value[mdb.STATUS] == cli.STOP && reg.MatchString(value[mdb.NAME]) { + list = append(list, value[mdb.NAME]) + } + }) + if len(list) == 0 { + return + } + GoToast(m, "", func(toast func(string, int, int)) []string { + kit.For(list, func(index int, name string) { + toast(name, index, len(list)) + m.Cmd("", cli.START, ice.Maps{mdb.NAME: name, ice.MSG_DAEMON: ""}) + }) + return nil + }) + }}, + "stopall": {Name: "stopall name", Help: "停止", Hand: func(m *ice.Message, arg ...string) { + reg, err := regexp.Compile(m.Option(mdb.NAME)) + if m.Warn(err) { + return + } + list := []string{} + m.Spawn().Cmds("").Table(func(value ice.Maps) { + if value[mdb.STATUS] == cli.START && reg.MatchString(value[mdb.NAME]) { + list = append(list, value[mdb.NAME]) + } + }) + if len(list) == 0 { + return + } + GoToast(m, "", func(toast func(string, int, int)) []string { + kit.For(list, func(index int, name string) { + toast(name, index, len(list)) + m.Cmd("", cli.STOP, ice.Maps{mdb.NAME: name, ice.MSG_DAEMON: ""}) + }) + return nil + }) + }}, "button": {Hand: func(m *ice.Message, arg ...string) { for _, cmd := range kit.Reverse(arg) { m.Cmd(gdb.EVENT, gdb.LISTEN, gdb.EVENT, DREAM_TABLES, ice.CMD, cmd) m.Cmd(gdb.EVENT, gdb.LISTEN, gdb.EVENT, DREAM_ACTION, ice.CMD, cmd) } }}, - }, ctx.CmdAction(), DreamAction(), mdb.ImportantHashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,repos,binary,template")), Hand: func(m *ice.Message, arg ...string) { + }, ctx.CmdAction(), DreamAction(), mdb.ImportantHashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,icon,repos,binary,template")), Hand: func(m *ice.Message, arg ...string) { if len(arg) == 0 { _dream_list(m) ctx.DisplayTableCard(m) diff --git a/base/web/option.go b/base/web/option.go index 49aff1b1..2ac885f2 100644 --- a/base/web/option.go +++ b/base/web/option.go @@ -73,7 +73,7 @@ func PushPodCmd(m *ice.Message, cmd string, arg ...string) { GoToast(m, "", func(toast func(string, int, int)) []string { kit.For(list, func(index int, space string) { toast(space, index, len(list)) - m.Cmd(SPACE, space, kit.Select(m.PrefixKey(), cmd), arg).Table(func(index int, val ice.Maps, head []string) { + m.Cmd(SPACE, space, kit.Dict(ice.MSG_USERPOD, space), kit.Select(m.PrefixKey(), cmd), arg).Table(func(index int, val ice.Maps, head []string) { val[SPACE] = kit.Keys(space, val[SPACE]) m.Push("", val, head) }) diff --git a/base/web/serve.go b/base/web/serve.go index a211f3e4..82dc2cca 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -101,7 +101,6 @@ func _serve_handle(key string, cmd *ice.Command, m *ice.Message, w http.Response } m.Option(ice.MSG_COUNT, "0") kit.For(r.Cookies(), func(k, v string) { m.Optionv(k, v) }) - m.OptionDefault(ice.MSG_HEIGHT, "480", ice.MSG_WIDTH, "320") m.Options(ice.MSG_USERWEB, _serve_domain(m), ice.MSG_USERPOD, m.Option(ice.POD)) m.Options(ice.MSG_USERUA, r.Header.Get(UserAgent), ice.MSG_USERIP, r.Header.Get(ice.MSG_USERIP)) m.Options(ice.MSG_SESSID, kit.Select(m.Option(ice.MSG_SESSID), m.Option(CookieName(m.Option(ice.MSG_USERWEB))))) diff --git a/base/web/share.go b/base/web/share.go index d69ccfcc..5a33d71b 100644 --- a/base/web/share.go +++ b/base/web/share.go @@ -162,6 +162,6 @@ func ShareLocalFile(m *ice.Message, arg ...string) { cache, size = s.ModTime(), s.Size() } kit.If(p == ice.BIN_ICE_BIN, func() { m.Option(ice.MSG_USERROLE, aaa.TECH) }) - m.Cmd(SPACE, m.Option(ice.POD), SPIDE, ice.DEV, SPIDE_RAW, MergeLink(m, PP(SHARE, PROXY)), SPIDE_PART, m.OptionSimple(ice.POD), nfs.PATH, p, nfs.SIZE, size, CACHE, cache.Format(ice.MOD_TIME), UPLOAD, mdb.AT+p) + m.Cmd(SPACE, m.Option(ice.POD), SPIDE, ice.DEV, SPIDE_RAW, http.MethodPost, MergeLink(m, PP(SHARE, PROXY)), SPIDE_PART, m.OptionSimple(ice.POD), nfs.PATH, p, nfs.SIZE, size, CACHE, cache.Format(ice.MOD_TIME), UPLOAD, mdb.AT+p) m.RenderDownload(kit.Select(p, pp, file.ExistsFile(pp))) } diff --git a/base/web/space.go b/base/web/space.go index bcbe6949..9d2ff31f 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -51,7 +51,7 @@ func _space_fork(m *ice.Message) { name := kit.ReplaceAll(kit.Select(addr, m.Option(mdb.NAME)), "[", "_", "]", "_", nfs.DF, "_", nfs.PT, "_") text := kit.Select(addr, m.Option(mdb.TEXT)) if kit.IsIn(m.Option(mdb.TYPE), CHROME) && m.Option(mdb.NAME) != CHROME || !(ice.Info.Localhost && tcp.IsLocalHost(m, m.R.RemoteAddr) || - m.Option(TOKEN) != "" && m.Cmdv(TOKEN, m.Option(TOKEN), mdb.TIME) > m.Time()) { + m.Option(TOKEN) != "" && m.Cmdv(TOKEN, m.Option(TOKEN), mdb.TIME) > m.Time()) || mdb.HashSelect(m.Spawn(), name).Length() > 0 { name, text = kit.Hashs(name), kit.Select(addr, m.Option(mdb.NAME), m.Option(mdb.TEXT)) } args := kit.Simple(mdb.TYPE, kit.Select(WORKER, m.Option(mdb.TYPE)), mdb.NAME, name, mdb.TEXT, text, m.OptionSimple(cli.DAEMON, ice.MSG_USERUA), m.OptionSimple(nfs.MODULE, nfs.VERSION)) diff --git a/conf.go b/conf.go index 99553b39..9b38903a 100644 --- a/conf.go +++ b/conf.go @@ -210,18 +210,16 @@ const ( // MSG MSG_LANGUAGE = "user.lang" MSG_MODE = "sess.mode" - MSG_TITLE = "sess.title" MSG_THEME = "sess.theme" + MSG_TITLE = "sess.title" MSG_RIVER = "sess.river" MSG_STORM = "sess.storm" - MSG_WIDTH = "sess.width" - MSG_HEIGHT = "sess.height" - MSG_DAEMON = "sess.daemon" MSG_COUNT = "sess.count" + MSG_DAEMON = "sess.daemon" MSG_FILES = "file.system" - YAC_STACK = "yac.stack" - YAC_MESSAGE = "yac.message" LOG_DISABLE = "log.disable" + YAC_MESSAGE = "yac.message" + YAC_STACK = "yac.stack" ) const ( // RENDER RENDER_BUTTON = "_button" diff --git a/core/chat/iframe.go b/core/chat/iframe.go index 9421eadc..6b041632 100644 --- a/core/chat/iframe.go +++ b/core/chat/iframe.go @@ -83,14 +83,12 @@ func init() { }}, }, mdb.HashAction(mdb.SHORT, web.LINK, mdb.FIELD, "time,hash,type,name,link"), FavorAction()), Hand: func(m *ice.Message, arg ...string) { list := []string{m.MergePodCmd("", "web.wiki.portal")} - if m.Option(ice.MSG_USERPOD) == "" { - list = append(list, web.MergeLink(m, "/chat/portal/")) - } else { - list = append(list, web.MergeLink(m, "/chat/portal/", ice.POD, m.Option(ice.MSG_USERPOD))) - } + list = append(list, web.MergeLink(m, "/chat/portal/", ice.POD, m.Option(ice.MSG_USERPOD))) if mdb.HashSelect(m, arg...); len(arg) == 0 { for _, link := range list { - m.Push("", kit.Dict(mdb.TIME, m.Time(), mdb.HASH, kit.Hashs(link), mdb.TYPE, web.LINK, web.LINK, link)) + if u := kit.ParseURL(link); u != nil { + m.Push("", kit.Dict(mdb.TIME, m.Time(), mdb.HASH, kit.Hashs(link), mdb.TYPE, web.LINK, mdb.NAME, u.Path, web.LINK, link)) + } } if m.Length() == 0 { m.Action(mdb.CREATE) diff --git a/core/chat/macos/desktop.css b/core/chat/macos/desktop.css index f98abebc..590de72c 100644 --- a/core/chat/macos/desktop.css +++ b/core/chat/macos/desktop.css @@ -22,9 +22,9 @@ fieldset.macos.desktop>div.output>div.desktop>fieldset>legend { padding:0 10px; fieldset.macos.desktop>div.output>div.desktop>fieldset>legend:not(:hover) { background-color:transparent; } fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>*:not(.textarea) { margin:10px 0px 10px 10px; } fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.icon { margin:12px 0 8px; } -fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.item.button>span.icon { font-size:32px; line-height:32px; } +fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.item.button>span.icon { font-size:32px; line-height:30px; } fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.item.button.prunes>span.icon { font-size:20px; line-height:32px; } -fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.item.icons { margin-left:0; } +/* fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.item.icons { margin-left:0; } */ fieldset.macos.desktop>div.output>div.desktop>fieldset>form.option>div.item:last-child { margin-right:100px; } 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:last-child { margin-right:100px; } diff --git a/core/chat/macos/desktop.js b/core/chat/macos/desktop.js index a17c4399..cf564976 100644 --- a/core/chat/macos/desktop.js +++ b/core/chat/macos/desktop.js @@ -4,7 +4,7 @@ Volcanos(chat.ONIMPORT, { can.onlayout.background(can, can.user.info.background||"/require/usr/icons/background.jpg", can._fields) can.onimport._menu(can), can.onimport._notifications(can), can.onimport._searchs(can), can.onimport._dock(can) }, - _menu: function(can) { can.onappend.plugin(can, {index: "web.chat.macos.menu", style: html.OUTPUT}, function(sub) { can.ui.menu = sub + _menu: function(can) { can.onappend.plugin(can, {_space: can.ConfSpace(), index: "web.chat.macos.menu", style: html.OUTPUT}, function(sub) { can.ui.menu = sub sub.onexport.output = function() { can.onimport._desktop(can, can._msg) can.Conf("session") && can.runActionCommand(event, "session", [can.Conf("session")], function(msg) { var item = msg.TableDetail(); can.onimport.session(can, can.base.Obj(item.args)) @@ -59,7 +59,8 @@ Volcanos(chat.ONIMPORT, { }); can.page.style(can, carte._target, html.TOP, event.y) }, }) }) }, _window: function(can, item) { if (!item.index) { return } item._space = can.ConfSpace() - item.left = 100, item.top = 125, item.height = can.base.Min(can.ConfHeight()-345, 480, 800), item.width = can.base.Min(can.ConfWidth()-360, 640, 1200) + item.height = can.base.Min(can.ConfHeight()-200, 320, 800), item.width = can.base.Min(can.ConfWidth()-600, 640, 1600) + item.left = (can.ConfWidth()-item.width)/2, item.top = 50 if (can.ConfHeight() < 800) { item.top = 25, item.height = can.ConfHeight()-125, item.width = can.ConfWidth()-110 } if (can.user.isMobile) { item.left = 0, item.top = 25, item.height = can.ConfHeight()-125, item.width = can.ConfWidth() } can.onappend.plugin(can, item, function(sub) { can.ondetail.select(can, sub._target) diff --git a/core/chat/macos/dock.go b/core/chat/macos/dock.go index 9ebbdd2e..6999ceb4 100644 --- a/core/chat/macos/dock.go +++ b/core/chat/macos/dock.go @@ -18,11 +18,11 @@ func init() { DockAppend(m, "Terminal", web.CODE_XTERM) DockAppend(m, "", web.CODE_VIMER) DockAppend(m, "", web.CODE_COMPILE, mdb.ICON, "usr/icons/go.png") - DockAppend(m, "", web.CODE_GIT_STATUS, mdb.ICON, "usr/icons/git.jpg") + DockAppend(m, "", web.CODE_GIT_STATUS, mdb.ICON, "usr/icons/git.png") } }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { mdb.HashExport(m) }}, - }, aaa.RoleAction(), PodCmdAction(), CmdHashAction(), mdb.ImportantHashAction())}}) + }, aaa.RoleAction(), CmdHashAction(), mdb.ImportantHashAction())}}) } func DockAppend(m *ice.Message, name, index string, arg ...string) { diff --git a/core/chat/macos/macos.go b/core/chat/macos/macos.go index 9fd8f3a8..9c844b25 100644 --- a/core/chat/macos/macos.go +++ b/core/chat/macos/macos.go @@ -33,8 +33,8 @@ func PodCmdAction(arg ...string) ice.Actions { has := map[string]bool{} msg.Table(func(index int, value ice.Maps, head []string) { if !has[value[ctx.INDEX]] { - m.Push("", value, head) has[value[ctx.INDEX]] = true + m.Push("", value, head) } }) m.Display(ctx.FileURI(file)) diff --git a/core/chat/macos/menu.js b/core/chat/macos/menu.js index 84f89dd6..c1500054 100644 --- a/core/chat/macos/menu.js +++ b/core/chat/macos/menu.js @@ -4,6 +4,6 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.page.Append(can, can._o ].concat(msg.Table(function(item) { return {view: [html.ITEM], list: [{img: can.page.drawText(can, item.name||item.index, 25, 0, 20)}], onclick: function(event) { can.sup.onexport.record(can, item) }} }), [ - {view: [html.MENU, "", can.Conf("_space")? can.Conf("_space"): can.user.mod.isPod? can.misc.ParseURL(can)[ice.POD]: location.host], onclick: function(event) { can.sup.onexport.record(can, html.DESKTOP) }}, + {view: [html.MENU, "", can.ConfSpace()||can.misc.Search(can, ice.POD)||location.host], onclick: function(event) { can.sup.onexport.record(can, html.DESKTOP) }}, {view: [html.MENU, "", "+"], onclick: function(event) { can.sup.onexport.record(can, mdb.CREATE) }}, ])) }}) diff --git a/core/code/makefile.go b/core/code/makefile.go index bdfdcdb1..26297627 100644 --- a/core/code/makefile.go +++ b/core/code/makefile.go @@ -1,8 +1,11 @@ package code import ( + "path" + ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/ctx" + "shylinux.com/x/icebergs/base/lex" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/web/html" @@ -24,7 +27,14 @@ const MAKEFILE = "makefile" func init() { Index.MergeCommands(ice.Commands{ MAKEFILE: {Name: "makefile path auto", Help: "构建", Actions: ice.MergeActions(ice.Actions{ - mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { _makefile_xterm(m, arg...) }}, + mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) { + m.Options(lex.SPLIT_BLOCK, ":") + m.Cmd(lex.SPLIT, path.Join(m.Option(nfs.PATH), m.Option(nfs.FILE)), func(indent int, text string, ls []string) { + if indent == 1 && ls[1] == ":" { + m.Push("target", ls[0]).Push("source", kit.Join(ls[2:])).PushButton("make") + } + }) + }}, mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) { _makefile_xterm(m, arg...) }}, }, PlugAction())}, }) diff --git a/core/code/vimer.go b/core/code/vimer.go index c63a99c8..ee2e3a5b 100644 --- a/core/code/vimer.go +++ b/core/code/vimer.go @@ -143,6 +143,13 @@ func init() { m.Cmd(cli.SYSTEM, "goimports", "-w", p) } }}, + cli.MAKE: {Hand: func(m *ice.Message, arg ...string) { + web.PushStream(m) + defer web.ToastProcess(m)() + m.Cmd(cli.SYSTEM, "echo") + m.Cmd(cli.SYSTEM, "date") + m.Cmd(cli.SYSTEM, cli.MAKE, m.Option("target"), kit.Dict(cli.CMD_DIR, m.Option(nfs.PATH))) + }}, nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) { nfs.Trash(m, arg[0]) }}, nfs.MODULE: {Name: "create name*=h2 help=示例 type*=Hash,Zone,Data,Code main*=main.go zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(AUTOGEN, nfs.MODULE, arg) diff --git a/misc/webview/webview.go b/misc/webview/webview.go index 63bc755b..67774727 100644 --- a/misc/webview/webview.go +++ b/misc/webview/webview.go @@ -13,6 +13,10 @@ import ( "shylinux.com/x/webview" ) +const ( + CONF_SIZE = "var/conf/webview.size" +) + type WebView struct { webview.WebView Source string @@ -32,7 +36,7 @@ func (w WebView) Menu() bool { if len(list) == 0 { return false } else if len(list) == 1 { - if ls := kit.Split(w.Cmdx(nfs.CAT, "etc/webview.size")); len(ls) > 1 { + if ls := kit.Split(w.Cmdx(nfs.CAT, CONF_SIZE)); len(ls) > 1 { w.WebView.SetSize(kit.Int(ls[0]), kit.Int(ls[1])+28, webview.HintNone) } else { w.WebView.SetSize(1200, 800, webview.HintNone) @@ -65,7 +69,7 @@ func (w WebView) OpenCmd(cmd string) { cli.Opens(w.Message, "Terminal.app", "-n") } func (w WebView) SetSize(width, height int) { - w.Cmd(nfs.SAVE, "etc/webview.size", kit.Format("%v,%v", width, height)) + w.Cmd(nfs.SAVE, CONF_SIZE, kit.Format("%v,%v", width, height)) } func (w WebView) System(arg ...string) string { return w.Cmdx(cli.SYSTEM, arg) } func (w WebView) Power() string { diff --git a/render.go b/render.go index bd62825e..92a61cd3 100644 --- a/render.go +++ b/render.go @@ -46,13 +46,9 @@ func Render(m *Message, cmd string, args ...Any) string { case RENDER_ANCHOR: return kit.Format(`%s`, kit.Select(arg[0], arg, 1), arg[0]) case RENDER_IMAGES: - return kit.Format(``, arg[0], m.Option(MSG_HEIGHT), m.Option(MSG_WIDTH)) + return kit.Format(``, arg[0]) case RENDER_VIDEOS: - if kit.Int(m.Option(MSG_HEIGHT)) < kit.Int(m.Option(MSG_WIDTH)) { - return kit.Format(`