From 3601129c3af199b952f69e6e85aee9e327ddab99 Mon Sep 17 00:00:00 2001 From: harveyshao Date: Tue, 14 Feb 2023 19:47:50 +0800 Subject: [PATCH] opt windows --- frame.js | 6 +++++- index.css | 4 ++-- panel/footer.css | 2 +- panel/footer.js | 3 ++- panel/header.css | 2 +- plugin/input/key.js | 6 ++++++ plugin/local/code/inner.css | 4 +++- plugin/local/code/inner.js | 10 ++-------- plugin/local/code/vimer.js | 7 +++++-- 9 files changed, 27 insertions(+), 17 deletions(-) diff --git a/frame.js b/frame.js index 6b56e2ec..4c315bc5 100644 --- a/frame.js +++ b/frame.js @@ -655,9 +655,11 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { }) Volcanos(chat.ONKEYMAP, {_init: function(can, target) { target = target||document.body can.onkeymap._build(can), target.onkeydown = function(event) { can.misc.Event(event, can, function(msg) { + if (can.user.isWindows && event.ctrlKey) { can.onkeymap.prevent(event) } if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return } can.onengine.signal(can, chat.ONKEYDOWN, can.request(event, {"model": can.user.isWebview && event.metaKey? "webview": "normal"})) }) }, target.onkeyup = function(event) { can.misc.Event(event, can, function(msg) { + if (can.user.isWindows && event.ctrlKey) { can.onkeymap.prevent(event) } if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return } can.onengine.signal(can, chat.ONKEYUP, can.request(event, {"model": "normal"})) }) } @@ -742,7 +744,7 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { target = target||documen if (event.key == lang.ESCAPE) { event.target.blur() } }, selectInputs: function(event, can, cb, target) { if (can.page.ismodkey(event)) { return } if (event.key == lang.ESCAPE) { return target.blur() } - if (event.ctrlKey || event.key == lang.TAB) { if (can.base.isUndefined(target._index)) { target._index = -1, target._value = target.value } + if (event.ctrlKey || can.base.isIn(event.key, "Tab", "ArrowUp", "ArrowDown")) { if (can.base.isUndefined(target._index)) { target._index = -1, target._value = target.value } function select(order) { if (order == -1) { target.value = target._value } var index = 0; return can.page.Select(can, can._output, [html.TBODY, html.TR], function(tr) { if (can.page.ClassList.has(can, tr, html.HIDDEN)) { return } can.page.ClassList.del(can, tr, html.SELECT); if (order == index++) { can.page.ClassList.add(can, tr, html.SELECT) @@ -751,7 +753,9 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { target = target||documen }).length } var total = select(target._index), key = event.key; if (event.key == lang.TAB) { key = event.shiftKey? "p": "n" } switch (key) { + case "ArrowDown": case "n": select(target._index = (target._index+2) % (total+1) - 1); break + case "ArrowUp": case "p": select(target._index = (target._index+total+1) % (total+1) - 1); break default: return } return can.Status(mdb.INDEX, target._index), can.onkeymap.prevent(event) diff --git a/index.css b/index.css index 8ee9d0a7..56890106 100644 --- a/index.css +++ b/index.css @@ -93,7 +93,7 @@ body>div.toast div.action { width:100%; display:block; } body>div.toast div.action>div.item { float:right; } body>div.carte { padding:0; } body>div.carte input[name=filter] { margin:5px; width:calc(100% - 10px); position:sticky; top:5px; } -body>div.carte div.item { padding:5px 10px; } +body>div.carte div.item { white-space:pre; padding:5px 10px; } body>div.carte div.item span.icon.gt { float:right; } body>div.input td { padding:5px; } body>div.input td span.icon { font-size:14px; margin-left:-25px; margin-right:10px; visibility:hidden; } @@ -158,7 +158,7 @@ div.item.select input { border-radius:0; min-width:60px; } div.project div.zone div.list { clear:both; } body.en fieldset.input.date.float>div.action>div.item.select { margin:0 5px; } -body.en fieldset.input.date.float>div.action>div.item.select select { width:65px; } +body.en fieldset.input.date.float>div.action>div.item.select select { width:64px; } body.en fieldset.input.date.float>div.action>div.item.select.year select { width:115px; } body.en fieldset.input.date.float>div.action>div.item.select.month select { width:115px; } body.zh fieldset.input.date.float>div.action>div.item.select { margin:0 5px; } diff --git a/panel/footer.css b/panel/footer.css index 367f0993..c23f81e7 100644 --- a/panel/footer.css +++ b/panel/footer.css @@ -9,7 +9,7 @@ fieldset.Footer>div.output div.cmd { padding:0; margin-left:40px; } fieldset.Footer>div.output div.cmd>span.delete { top:1px; right:5px; } fieldset.Footer>div.output div.cmd>input[name=cmd] { margin-right:0; width:120px; transition:all 1s; } fieldset.Footer>div.output div.cmd>input[name=cmd]:focus { width:320px; transition:all 0.5s; } -fieldset.Footer>div.output div.cmd:hover>input[name=cmd] { width:320px; transition:all 0.5s; } +// fieldset.Footer>div.output div.cmd:hover>input[name=cmd] { width:320px; transition:all 0.5s; } .picker { box-shadow:4px 4px 20px 4px #626bd0; } div.view span.keyword { color:#5cadd4; } diff --git a/panel/footer.js b/panel/footer.js index 78a5e9d1..dbf48e4a 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -1,6 +1,7 @@ (function() { var NTIP = "ntip", NLOG = "nlog", NCMD = "ncmd", NKEY = "nkey" Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.Conf(NKEY, can.core.Item(can.misc.localStorage(can)).length) - can.onimport._title(can, msg, target), can.onimport._state(can, msg, target), can.onimport._toast(can, msg, target), can.onimport._command(can, msg, target) + can.onimport._title(can, msg, target), can.onimport._command(can, msg, target) + can.onimport._state(can, msg, target), can.onimport._toast(can, msg, target) }, _title: function(can, msg, target) { can.user.isMobile || can.core.List(can.Conf(chat.TITLE)||msg.result, function(item) { can.page.Append(can, target, [{view: [chat.TITLE, "", item], title: "联系站长"}]) diff --git a/panel/header.css b/panel/header.css index cbe37ee9..6588c4af 100644 --- a/panel/header.css +++ b/panel/header.css @@ -11,4 +11,4 @@ fieldset.Header>div.output div.search.title { padding:0; margin-left:20px; } fieldset.Header>div.output div.search>span.delete { top:1px; right:5px; } fieldset.Header>div.output div.search>input { margin-right:0; transition:all 1s; } fieldset.Header>div.output div.search>input:focus { width:320px; transition:all 0.5s; } -fieldset.Header>div.output div.search:hover>input { width:320px; transition:all 0.5s; } +// fieldset.Header>div.output div.search:hover>input { width:320px; transition:all 0.5s; } diff --git a/plugin/input/key.js b/plugin/input/key.js index c822ca61..6dfd9d3c 100644 --- a/plugin/input/key.js +++ b/plugin/input/key.js @@ -22,5 +22,11 @@ Volcanos(chat.ONFIGURE, {key: { if (event.key == lang.ENTER) { return meta._enter && (!can.page.tagis(event.target, html.TEXTAREA) || event.ctrlKey) && meta._enter(event)? sub.close(): last(event) } sub.hidden() || can.onkeymap.selectCtrlN(event, can, sub._output, "tr:not(.hidden)>td:first-child", function(td) { return cb(sub, td.innerText, target.value), td }) || can.onmotion.delayOnce(can, function() { can.onkeymap.selectInputs(event, sub, function() { sub._load(event, sub, cb, target, meta.name) }, target) }, target.value.length < 3? 500: 150) + if (event.ctrlKey && can.user.isWindows) { can.onkeymap.prevent(event) } + if (can.base.isIn(event.key, "ArrowUp", "ArrowDown") && can.user.isWindows) { can.onkeymap.prevent(event) } + }, + onkeyup: function(event, can, meta, cb, target, sub, last) { if (event.key == lang.ESCAPE) { return last(event) } + if (event.ctrlKey && can.user.isWindows) { can.onkeymap.prevent(event) } + if (can.base.isIn(event.key, "ArrowUp", "ArrowDown") && can.user.isWindows) { can.onkeymap.prevent(event) } }, }}) diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index 841a045e..984e3b57 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -10,9 +10,11 @@ fieldset.inner>div.output div.content td.text span.constant { color:magenta; } fieldset.inner>div.output div.content td.text span.string { color:magenta; } fieldset.inner>div.output div.content td.text span.object { color:cyan; } fieldset.inner>div.output>div.layout>div.layout>div.content * { font-family:monospace; font-size:14px; outline:none; } +fieldset.inner>div.output>div.layout>div.path { font-family:monospace; font-size:14px; } +fieldset.inner>div.output>div.layout>div.tabs { font-family:monospace; font-size:14px; } fieldset.inner>div.output>div.project { width:230px; } fieldset.inner>div.output>div.project div.action { width:100%; } -fieldset.inner>div.output>div.project * { font-size:14px; outline:none; } +fieldset.inner>div.output>div.project * { font-family:monospace; font-size:14px; outline:none; } fieldset.inner>div.output>div.project>div.zone>div.item span.icon { font-size:22px; line-height:18px; width:20px; float:right; display:none; } fieldset.inner>div.output>div.project>div.zone:hover>div.item span.icon { display:block; } fieldset.inner>div.output>div.project>div.zone div.action>div.item { padding-right:0; width:100%; } diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index b74407c5..585e9b27 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -223,13 +223,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl }, can.ui.plug.parentNode) }, layout: function(can) { if (can.isSimpleMode()) { return can.page.style(can, can.ui.content, html.WIDTH, can.ConfWidth()) } - if (can.isCmdMode()) { - if (can.user.isWindows) { - can.ConfHeight(can.page.height()), can.ConfWidth(can.page.width()-8) - } else { - can.ConfHeight(can.page.height()), can.ConfWidth(can.page.width()) - } - } + if (can.isCmdMode()) { can.ConfHeight(can.page.height()), can.ConfWidth(can.page.width()) } can.ui.size = {profile: can.db.profile_size[can.onexport.keys(can)]||0.5, display: can.db.display_size[can.onexport.keys(can)]||3*html.ACTION_HEIGHT} can.ui.layout(can.ConfHeight(), can.ConfWidth(), 0, function(content_height, content_width) { var sub = can.ui.content._plugin; if (!sub) { return } if (content_height == sub.ConfHeight()+sub.onexport.actionHeight(sub)+sub.onexport.statusHeight(sub) && content_width == sub.ConfWidth()) { return } @@ -420,7 +414,7 @@ Volcanos(chat.ONACTION, {list: ["首页", "官网", "调试", "百度"], }, open: function(event, can) { var paths = can.core.List(can.db.paths, function(item) { if (can.base.endWith(item, "-story/", "-dict/")) { return } return item }).join(ice.FS) - paths = "src/,usr/icebergs/,usr/volcanos/" + // paths = "src/,usr/icebergs/,usr/volcanos/" var input = can.user.input(can.request(event, {paths: paths}), can, [{name: nfs.FILE, style: {width: can.ui.content.offsetWidth/2}, run: function(event, cmds, cb) { can.run(can.request(event, {paths: paths}), cmds, function(msg) { if (cmds[0] == ctx.ACTION && cmds[1] == mdb.INPUTS) { var _msg = can.onengine.signal(can, "tabview.open.inputs"), func = can.onexport.func(can) diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 22d662b3..091b01bd 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -284,8 +284,11 @@ Volcanos(chat.ONKEYMAP, { y: shy("向上滚屏", function(can) { can.current.scroll(-1) }), }, insert_ctrl: { - n: shy("向上滚屏", function(event) { can.onkeymap.prevent(event) }), - p: shy("向上滚屏", function(event) { can.onkeymap.prevent(event) }), + f: shy("光标右移", function(can, target) { can.onkeymap.cursorMove(target, 1) }), + b: shy("光标左移", function(can, target) { can.onkeymap.cursorMove(target, -1) }), + a: shy("光标行首", function(can, target) { can.onkeymap.cursorMove(target, 0, 0) }), + e: shy("光标行尾", function(can, target) { can.onkeymap.cursorMove(target, 0, -1) }), + d: shy("删除字符", function(can, target) { can.onkeymap.deleteText(target, target.selectionStart, 1) }), }, insert: { Escape: shy("退出编辑", function(event, can) { can.onkeymap._normal(can) }),