From 5fbfdc651f7e89596d9af6205c53ece2466b714e Mon Sep 17 00:00:00 2001 From: "douboer@gmail.com" Date: Wed, 4 Mar 2026 13:25:26 +0800 Subject: [PATCH] update at 2026-03-04 13:25:26 --- openclaw | 1 + pxterm/find_css.cjs | 2 ++ pxterm/mobile-scroll-optimization.md | 29 ++++++++++++++++++- .../archive/cjs_tools}/add_viewport_debug.cjs | 0 .../archive/cjs_tools}/clean_pointer.cjs | 0 .../archive/cjs_tools}/clean_terminal.cjs | 0 .../archive/cjs_tools}/clean_vars.cjs | 0 .../archive/cjs_tools}/fix_bracket2.cjs | 0 .../archive/cjs_tools}/fix_css.cjs | 0 .../archive/cjs_tools}/fix_handlers.cjs | 0 .../archive/cjs_tools}/fix_handlers2.cjs | 0 .../archive/cjs_tools}/fix_native.cjs | 0 .../archive/cjs_tools}/fix_passive.cjs | 0 .../archive/cjs_tools}/fix_pointerMove.cjs | 0 .../archive/cjs_tools}/fix_pointer_scroll.cjs | 0 .../cjs_tools}/fix_prevent_default.cjs | 0 .../cjs_tools}/fix_selection_conflict.cjs | 0 .../archive/cjs_tools}/fix_touch_action.cjs | 0 .../archive/cjs_tools}/fix_touch_action2.cjs | 0 .../archive/cjs_tools}/fix_touch_css.cjs | 0 .../archive/cjs_tools}/fix_touch_handlers.cjs | 0 .../cjs_tools}/fix_touch_handlers_passive.cjs | 0 .../archive/cjs_tools}/fix_touch_pointer.cjs | 0 .../archive/cjs_tools}/fix_touch_pointer2.cjs | 0 .../archive/cjs_tools}/fix_ts.cjs | 0 .../archive/cjs_tools}/fix_ts_2.cjs | 0 .../cjs_tools}/hook_pointer_scroll.cjs | 0 .../archive/cjs_tools}/let_xterm_scroll.cjs | 0 .../archive/cjs_tools}/patch_deep_log.cjs | 0 .../cjs_tools}/patch_ensure_all_listeners.cjs | 0 .../cjs_tools}/patch_passive_touch.cjs | 0 .../cjs_tools}/patch_prevent_default.cjs | 0 .../cjs_tools}/patch_revert_pointer.cjs | 0 .../cjs_tools}/patch_smooth_scroll.cjs | 0 .../archive/cjs_tools}/patch_touch.cjs | 0 .../archive/cjs_tools}/remove_momentum.cjs | 0 .../archive/cjs_tools}/remove_momentum2.cjs | 0 .../archive/cjs_tools}/revert.cjs | 0 .../cjs_tools}/test_global_capture.cjs | 0 .../archive/cjs_tools}/use_native.cjs | 0 pxterm/src/components/TerminalPanel.vue | 26 +++++++++++++++++ pxterm/src/styles/main.css | 8 +++++ pxterm/test.html | 13 +++++++++ pxterm/todo.md | 6 ++++ 44 files changed, 84 insertions(+), 1 deletion(-) create mode 160000 openclaw create mode 100644 pxterm/find_css.cjs rename pxterm/{ => scripts/archive/cjs_tools}/add_viewport_debug.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/clean_pointer.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/clean_terminal.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/clean_vars.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_bracket2.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_css.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_handlers.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_handlers2.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_native.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_passive.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_pointerMove.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_pointer_scroll.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_prevent_default.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_selection_conflict.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_touch_action.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_touch_action2.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_touch_css.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_touch_handlers.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_touch_handlers_passive.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_touch_pointer.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_touch_pointer2.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_ts.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/fix_ts_2.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/hook_pointer_scroll.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/let_xterm_scroll.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/patch_deep_log.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/patch_ensure_all_listeners.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/patch_passive_touch.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/patch_prevent_default.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/patch_revert_pointer.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/patch_smooth_scroll.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/patch_touch.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/remove_momentum.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/remove_momentum2.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/revert.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/test_global_capture.cjs (100%) rename pxterm/{ => scripts/archive/cjs_tools}/use_native.cjs (100%) create mode 100644 pxterm/test.html diff --git a/openclaw b/openclaw new file mode 160000 index 0000000..b10f438 --- /dev/null +++ b/openclaw @@ -0,0 +1 @@ +Subproject commit b10f438221ef37e69592f5eb61e0e3875bd0440c diff --git a/pxterm/find_css.cjs b/pxterm/find_css.cjs new file mode 100644 index 0000000..bca91c1 --- /dev/null +++ b/pxterm/find_css.cjs @@ -0,0 +1,2 @@ +const fs = require('fs'); +console.log(fs.readFileSync('node_modules/xterm/css/xterm.css', 'utf8').includes('xterm-cursor-blink')); diff --git a/pxterm/mobile-scroll-optimization.md b/pxterm/mobile-scroll-optimization.md index 35da56c..614f104 100644 --- a/pxterm/mobile-scroll-optimization.md +++ b/pxterm/mobile-scroll-optimization.md @@ -35,4 +35,31 @@ 凭借这种高度克制且动态的干扰策略,我们实现了“鱼与熊掌兼得”: 1. **完美原生选区**:长按仍能顺畅唤起 iOS 文本放大镜与蓝色选框。 2. **不断流的跟手滚动**:只要没有进入选区模式,手指在密集的字符网格上狂滑也不会触发浏览器原生手势劫持,配合 60fps 的 JS 帧动画达到了极致丝滑。 -3. **软键盘完整兼容**:没有使用全局焦点的强行剥夺,不阻碍日常的点击输入与键盘显隐。 \ No newline at end of file +3. **软键盘完整兼容**:没有使用全局焦点的强行剥夺,不阻碍日常的点击输入与键盘显隐。 +## 5. 最后的幽灵 Bug:触控目标为 SPAN 时滑动冻结 (The Phantom Bug: "SPAN" Target Blocking) +尽管我们实现了精密的动态拦截,但在实际使用中偶尔仍会触发严重的“屏幕冻结”。 +通过全局侦听所有触摸和指针事件,我们抓到了极其关键的日志: +**当手指正常滑动时**:目标(Target) 是每一行的 `DIV`,`touchmove` 和 `pointermove` 都能成对、连续触发,我们的 JS 动量接管运转完美。 +**当发生冻结时**:目标(Target) 变成了渲染终端彩色字符的内联元素 `SPAN`,紧接着**所有的 `touchmove` 事件就会离奇消失**,只剩下 `pointermove` 在孤零零地触发。 + +### 为什么碰到 `SPAN` 就不动了? +这源于开启了 `-webkit-user-select: text` 后,iOS Safari / WebKit 独有的**文本触摸启发式逻辑 (Text Interaction Heuristic)**: +当手指触摸在一个内联文本节点(如 `SPAN`)并且试图开始移动时,iOS 极大概率会将其判定为“光标拖拽”或“准备框选”。为了不打断系统的文本交互,iOS 会在非常底层的级别**没收(Swallow)后续所有的 `touchmove` 事件**。由于 `touchmove` 消失了,我们在 Vue 中原本用于拦截默认行为和计算 `dy` 滑动的代码根本没有执行的机会。于是表现为彻底断流结冰。 + +### 解决方案:视觉层穿透 (CSS Pointer-Events) +我们不能取消文本选择,否则长按复制功能就没了。但其实用户长按选中某行字,并不需要精确点击到那个细小的 `SPAN`,只要点击到包围它的块级元素 `DIV` 即可(iOS 支持依靠容器进行坐标选取)。 + +因此,最有效的解法是对所有终端内容层的 `SPAN` 施加“触控隐身”: +```css +/* 规避 iOS 触摸事件吞噬问题: + 当目标是 span 等特定内联元素时,iOS 容易在滑动中没收 touchmove。 + 将其鼠标事件穿透到 div (行) 上可以绕过引发吞没的 WebKit 内核特定文本触摸启发式逻辑 + 同时并不影响基于坐标的文本选择。 */ +.terminal-container.native-touch-selection .xterm-screen span { + pointer-events: none; +} +``` +**影响评估:** +- **滑动修复**:用户手指摸到的永远只有块级的 `DIV`(行),iOS 将其视为普通面板,从而持续派发我们亟需的 `touchmove`。彻底解决偶发冻结问题。 +- **选区保持**:包围层 `.xterm-rows > div` 仍具有 `user-select: text`,系统原生长按动作(包括双端拖拽把手)依靠父级空间坐标寻找文本,完全不受影响。 +- **xterm 功能**:xterm.js 其内部功能(如链接点击)通过捕捉整层的视口相对坐标映射到网格系来处理,也不受丢失底层 `SPAN` `target` 的影响。 diff --git a/pxterm/add_viewport_debug.cjs b/pxterm/scripts/archive/cjs_tools/add_viewport_debug.cjs similarity index 100% rename from pxterm/add_viewport_debug.cjs rename to pxterm/scripts/archive/cjs_tools/add_viewport_debug.cjs diff --git a/pxterm/clean_pointer.cjs b/pxterm/scripts/archive/cjs_tools/clean_pointer.cjs similarity index 100% rename from pxterm/clean_pointer.cjs rename to pxterm/scripts/archive/cjs_tools/clean_pointer.cjs diff --git a/pxterm/clean_terminal.cjs b/pxterm/scripts/archive/cjs_tools/clean_terminal.cjs similarity index 100% rename from pxterm/clean_terminal.cjs rename to pxterm/scripts/archive/cjs_tools/clean_terminal.cjs diff --git a/pxterm/clean_vars.cjs b/pxterm/scripts/archive/cjs_tools/clean_vars.cjs similarity index 100% rename from pxterm/clean_vars.cjs rename to pxterm/scripts/archive/cjs_tools/clean_vars.cjs diff --git a/pxterm/fix_bracket2.cjs b/pxterm/scripts/archive/cjs_tools/fix_bracket2.cjs similarity index 100% rename from pxterm/fix_bracket2.cjs rename to pxterm/scripts/archive/cjs_tools/fix_bracket2.cjs diff --git a/pxterm/fix_css.cjs b/pxterm/scripts/archive/cjs_tools/fix_css.cjs similarity index 100% rename from pxterm/fix_css.cjs rename to pxterm/scripts/archive/cjs_tools/fix_css.cjs diff --git a/pxterm/fix_handlers.cjs b/pxterm/scripts/archive/cjs_tools/fix_handlers.cjs similarity index 100% rename from pxterm/fix_handlers.cjs rename to pxterm/scripts/archive/cjs_tools/fix_handlers.cjs diff --git a/pxterm/fix_handlers2.cjs b/pxterm/scripts/archive/cjs_tools/fix_handlers2.cjs similarity index 100% rename from pxterm/fix_handlers2.cjs rename to pxterm/scripts/archive/cjs_tools/fix_handlers2.cjs diff --git a/pxterm/fix_native.cjs b/pxterm/scripts/archive/cjs_tools/fix_native.cjs similarity index 100% rename from pxterm/fix_native.cjs rename to pxterm/scripts/archive/cjs_tools/fix_native.cjs diff --git a/pxterm/fix_passive.cjs b/pxterm/scripts/archive/cjs_tools/fix_passive.cjs similarity index 100% rename from pxterm/fix_passive.cjs rename to pxterm/scripts/archive/cjs_tools/fix_passive.cjs diff --git a/pxterm/fix_pointerMove.cjs b/pxterm/scripts/archive/cjs_tools/fix_pointerMove.cjs similarity index 100% rename from pxterm/fix_pointerMove.cjs rename to pxterm/scripts/archive/cjs_tools/fix_pointerMove.cjs diff --git a/pxterm/fix_pointer_scroll.cjs b/pxterm/scripts/archive/cjs_tools/fix_pointer_scroll.cjs similarity index 100% rename from pxterm/fix_pointer_scroll.cjs rename to pxterm/scripts/archive/cjs_tools/fix_pointer_scroll.cjs diff --git a/pxterm/fix_prevent_default.cjs b/pxterm/scripts/archive/cjs_tools/fix_prevent_default.cjs similarity index 100% rename from pxterm/fix_prevent_default.cjs rename to pxterm/scripts/archive/cjs_tools/fix_prevent_default.cjs diff --git a/pxterm/fix_selection_conflict.cjs b/pxterm/scripts/archive/cjs_tools/fix_selection_conflict.cjs similarity index 100% rename from pxterm/fix_selection_conflict.cjs rename to pxterm/scripts/archive/cjs_tools/fix_selection_conflict.cjs diff --git a/pxterm/fix_touch_action.cjs b/pxterm/scripts/archive/cjs_tools/fix_touch_action.cjs similarity index 100% rename from pxterm/fix_touch_action.cjs rename to pxterm/scripts/archive/cjs_tools/fix_touch_action.cjs diff --git a/pxterm/fix_touch_action2.cjs b/pxterm/scripts/archive/cjs_tools/fix_touch_action2.cjs similarity index 100% rename from pxterm/fix_touch_action2.cjs rename to pxterm/scripts/archive/cjs_tools/fix_touch_action2.cjs diff --git a/pxterm/fix_touch_css.cjs b/pxterm/scripts/archive/cjs_tools/fix_touch_css.cjs similarity index 100% rename from pxterm/fix_touch_css.cjs rename to pxterm/scripts/archive/cjs_tools/fix_touch_css.cjs diff --git a/pxterm/fix_touch_handlers.cjs b/pxterm/scripts/archive/cjs_tools/fix_touch_handlers.cjs similarity index 100% rename from pxterm/fix_touch_handlers.cjs rename to pxterm/scripts/archive/cjs_tools/fix_touch_handlers.cjs diff --git a/pxterm/fix_touch_handlers_passive.cjs b/pxterm/scripts/archive/cjs_tools/fix_touch_handlers_passive.cjs similarity index 100% rename from pxterm/fix_touch_handlers_passive.cjs rename to pxterm/scripts/archive/cjs_tools/fix_touch_handlers_passive.cjs diff --git a/pxterm/fix_touch_pointer.cjs b/pxterm/scripts/archive/cjs_tools/fix_touch_pointer.cjs similarity index 100% rename from pxterm/fix_touch_pointer.cjs rename to pxterm/scripts/archive/cjs_tools/fix_touch_pointer.cjs diff --git a/pxterm/fix_touch_pointer2.cjs b/pxterm/scripts/archive/cjs_tools/fix_touch_pointer2.cjs similarity index 100% rename from pxterm/fix_touch_pointer2.cjs rename to pxterm/scripts/archive/cjs_tools/fix_touch_pointer2.cjs diff --git a/pxterm/fix_ts.cjs b/pxterm/scripts/archive/cjs_tools/fix_ts.cjs similarity index 100% rename from pxterm/fix_ts.cjs rename to pxterm/scripts/archive/cjs_tools/fix_ts.cjs diff --git a/pxterm/fix_ts_2.cjs b/pxterm/scripts/archive/cjs_tools/fix_ts_2.cjs similarity index 100% rename from pxterm/fix_ts_2.cjs rename to pxterm/scripts/archive/cjs_tools/fix_ts_2.cjs diff --git a/pxterm/hook_pointer_scroll.cjs b/pxterm/scripts/archive/cjs_tools/hook_pointer_scroll.cjs similarity index 100% rename from pxterm/hook_pointer_scroll.cjs rename to pxterm/scripts/archive/cjs_tools/hook_pointer_scroll.cjs diff --git a/pxterm/let_xterm_scroll.cjs b/pxterm/scripts/archive/cjs_tools/let_xterm_scroll.cjs similarity index 100% rename from pxterm/let_xterm_scroll.cjs rename to pxterm/scripts/archive/cjs_tools/let_xterm_scroll.cjs diff --git a/pxterm/patch_deep_log.cjs b/pxterm/scripts/archive/cjs_tools/patch_deep_log.cjs similarity index 100% rename from pxterm/patch_deep_log.cjs rename to pxterm/scripts/archive/cjs_tools/patch_deep_log.cjs diff --git a/pxterm/patch_ensure_all_listeners.cjs b/pxterm/scripts/archive/cjs_tools/patch_ensure_all_listeners.cjs similarity index 100% rename from pxterm/patch_ensure_all_listeners.cjs rename to pxterm/scripts/archive/cjs_tools/patch_ensure_all_listeners.cjs diff --git a/pxterm/patch_passive_touch.cjs b/pxterm/scripts/archive/cjs_tools/patch_passive_touch.cjs similarity index 100% rename from pxterm/patch_passive_touch.cjs rename to pxterm/scripts/archive/cjs_tools/patch_passive_touch.cjs diff --git a/pxterm/patch_prevent_default.cjs b/pxterm/scripts/archive/cjs_tools/patch_prevent_default.cjs similarity index 100% rename from pxterm/patch_prevent_default.cjs rename to pxterm/scripts/archive/cjs_tools/patch_prevent_default.cjs diff --git a/pxterm/patch_revert_pointer.cjs b/pxterm/scripts/archive/cjs_tools/patch_revert_pointer.cjs similarity index 100% rename from pxterm/patch_revert_pointer.cjs rename to pxterm/scripts/archive/cjs_tools/patch_revert_pointer.cjs diff --git a/pxterm/patch_smooth_scroll.cjs b/pxterm/scripts/archive/cjs_tools/patch_smooth_scroll.cjs similarity index 100% rename from pxterm/patch_smooth_scroll.cjs rename to pxterm/scripts/archive/cjs_tools/patch_smooth_scroll.cjs diff --git a/pxterm/patch_touch.cjs b/pxterm/scripts/archive/cjs_tools/patch_touch.cjs similarity index 100% rename from pxterm/patch_touch.cjs rename to pxterm/scripts/archive/cjs_tools/patch_touch.cjs diff --git a/pxterm/remove_momentum.cjs b/pxterm/scripts/archive/cjs_tools/remove_momentum.cjs similarity index 100% rename from pxterm/remove_momentum.cjs rename to pxterm/scripts/archive/cjs_tools/remove_momentum.cjs diff --git a/pxterm/remove_momentum2.cjs b/pxterm/scripts/archive/cjs_tools/remove_momentum2.cjs similarity index 100% rename from pxterm/remove_momentum2.cjs rename to pxterm/scripts/archive/cjs_tools/remove_momentum2.cjs diff --git a/pxterm/revert.cjs b/pxterm/scripts/archive/cjs_tools/revert.cjs similarity index 100% rename from pxterm/revert.cjs rename to pxterm/scripts/archive/cjs_tools/revert.cjs diff --git a/pxterm/test_global_capture.cjs b/pxterm/scripts/archive/cjs_tools/test_global_capture.cjs similarity index 100% rename from pxterm/test_global_capture.cjs rename to pxterm/scripts/archive/cjs_tools/test_global_capture.cjs diff --git a/pxterm/use_native.cjs b/pxterm/scripts/archive/cjs_tools/use_native.cjs similarity index 100% rename from pxterm/use_native.cjs rename to pxterm/scripts/archive/cjs_tools/use_native.cjs diff --git a/pxterm/src/components/TerminalPanel.vue b/pxterm/src/components/TerminalPanel.vue index 41ea2db..8b82a22 100644 --- a/pxterm/src/components/TerminalPanel.vue +++ b/pxterm/src/components/TerminalPanel.vue @@ -186,6 +186,8 @@ let asciiFallbackTimer: number | null = null; let asciiFallbackText = ""; let compositionGuardTimer: number | null = null; let compositionStartedAt = 0; +let cursorBlinkTimer: number | null = null; +let isCursorVisible = true; let lastKeyboardCommittedText = ""; let lastKeyboardCommittedAt = 0; let keyboardAssistBridgeText = ""; @@ -1224,6 +1226,7 @@ function initTerminal(): void { * 触屏端依赖 iOS 自身动量;桌面端保留平滑滚动。 */ smoothScrollDuration: nativeTouchSelectionEnabled ? 0 : TERMINAL_SMOOTH_SCROLL_DURATION_MS, + cursorBlink: false, theme: { background: settingsStore.settings.shellBgColor, foreground: settingsStore.settings.shellTextColor, @@ -1249,6 +1252,25 @@ function initTerminal(): void { terminal.open(containerRef.value); + terminal.onKey(({ domEvent }) => { + if (domEvent.key === "Enter" && terminal) { + terminal.scrollToBottom(); + } + }); + + if (cursorBlinkTimer !== null) { + window.clearInterval(cursorBlinkTimer); + } + isCursorVisible = true; + cursorBlinkTimer = window.setInterval(() => { + if (!terminal) return; + isCursorVisible = !isCursorVisible; + terminal.options.theme = { + ...terminal.options.theme, + cursor: isCursorVisible ? settingsStore.settings.shellAccentColor : "rgba(0,0,0,0)" + }; + }, 1800); + terminal.attachCustomKeyEventHandler((event) => { if (isCopyShortcut(event) && terminal?.hasSelection()) { const selected = terminal.getSelection(); @@ -2002,6 +2024,10 @@ watch( ); onBeforeUnmount(() => { + if (cursorBlinkTimer !== null) { + window.clearInterval(cursorBlinkTimer); + cursorBlinkTimer = null; + } window.removeEventListener("resize", handleResize); resizeObserver?.disconnect(); resizeObserver = null; diff --git a/pxterm/src/styles/main.css b/pxterm/src/styles/main.css index 7d7744d..36c23fa 100644 --- a/pxterm/src/styles/main.css +++ b/pxterm/src/styles/main.css @@ -1367,6 +1367,14 @@ select.input { -webkit-touch-callout: default; } +/* 规避 iOS 触摸事件吞噬问题: + 当目标是 span 等特定内联元素时,iOS 容易在滑动中没收 touchmove。 + 将其鼠标事件穿透到 div (行) 上可以绕过引发吞没的 WebKit 内核特定文本触摸启发式逻辑 + 同时并不影响基于坐标的文本选择。 */ +.terminal-container.native-touch-selection .xterm-screen span { + pointer-events: none; +} + /* 移动端字体渲染优化 */ @media (pointer: coarse) { .terminal-container .xterm { diff --git a/pxterm/test.html b/pxterm/test.html new file mode 100644 index 0000000..12d51b9 --- /dev/null +++ b/pxterm/test.html @@ -0,0 +1,13 @@ + + + + + + + +
Hello world with pointer events none
+ + diff --git a/pxterm/todo.md b/pxterm/todo.md index 0fd5a69..d38c109 100644 --- a/pxterm/todo.md +++ b/pxterm/todo.md @@ -9,3 +9,9 @@ const DEV_PUBLIC_HOST = "shell.biboer.cn"; const DEV_CERT_PATH = "/Users/gavin/.acme.sh/shell.biboer.cn_ecc/fullchain.cer"; const DEV_KEY_PATH = "/Users/gavin/.acme.sh/shell.biboer.cn_ecc/shell.biboer.cn.key"; + +todo: +1. 点语音输入框,弹出第三方语音输入法,按住输入法的语音键,会跳到获取权限,但实际上,在应用中.已经获取过语音输入权限了 +2. 回车/ctrlc/命令, 光标行复位 +3. paste 点击不要在弹paste了。 +