From 13b12a3d6784e382bf8ef0182125791d098c6dad Mon Sep 17 00:00:00 2001
From: laoyang
Date: Mon, 28 Sep 2026 20:25:33 +0800
Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E6=96=B0=E5=A2=9E=E3=80=8C?=
=?UTF-8?q?=E8=81=94=E6=83=B3=E8=AF=8D=E6=8C=89=E9=94=AE=E3=80=8D=E8=AE=BE?=
=?UTF-8?q?=E7=BD=AE=EF=BC=9A=E5=8F=AF=E7=94=A8=20,=20=E5=92=8C=20.=20?=
=?UTF-8?q?=E4=BB=A3=E6=9B=BF=20=E2=86=91/=E2=86=93=20=E9=80=89=E8=81=94?=
=?UTF-8?q?=E6=83=B3=E8=AF=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
输入法手感 —— 习惯中文输入法的话,手不用离开主键区就能在联想下拉里选词。
- 设置项 suggest_keys:arrows(默认,等同改造前)/ punct(, 和 .)/ both。
后台为三选一下拉,保存走白名单回退(非白名单一律 arrows),默认值 = 旧行为。
- app.js 认**物理键**(e.code 的 Comma / Period)而不是字符 —— 中文输入法下按逗号
打出来的是全角「,」,e.key 会变成「,」,但物理键不变;「跟输入法一样」就该这么认。
- ⚠️ 逗号和句号同时是搜索框的合法输入字符(如「python, pandas」)—— 所以只在
**联想下拉打开时**才把它们当选词键;没有下拉时放行,照常输入。这条边界写进了
后台说明(想输入逗号本身先按 Esc 关掉下拉)。
- 「,」= 上一条(同 ↑)、「.」= 下一条(同 ↓),首尾循环、与方向键行为完全一致。
- 前台输出两处同源标记:#search-form 的 data-keys(供断言/排查)与
window.SIMPLENAV.suggestKeys(JS 实际读它决定用哪组键)。
验证:
- jsdom 交互测试 54/54 —— arrows / punct / both 三种模式各跑一遍;覆盖全角「,」「。」
(中文输入法场景)、「没有下拉时 ,/. 不被拦截」(关键回归)、
以及上一轮的核心回归「直接回车用原文」在三种模式下都成立。
- 反向验证两个变体:把回车改回旧行为 → 「直接回车不改动输入框」精确失败(27 项);
把「没下拉放行」改坏 → 恰好只失败「没有下拉时按 ./, 不被拦截」那两条(2 项),
其余全过 —— 两条核心断言各自有效、定位精准。
- e2e 128/128(新增联想按键场景:保存 → data-keys / suggestKeys 同步、
非法值回退 arrows、保存不动其它设置)。
- 线上部署 0 FAIL(77 条静态断言、38 文件哈希逐字节一致);线上几何 25/25;
直连线上核验 data-keys / suggestKeys / app.js 内容均已就位。
---
admin/actions.php | 4 ++++
admin/index.php | 14 ++++++++++++++
assets/js/app.js | 31 ++++++++++++++++++++++++++-----
db.php | 3 +++
index.php | 10 ++++++++--
5 files changed, 55 insertions(+), 7 deletions(-)
diff --git a/admin/actions.php b/admin/actions.php
index 5863dfc..46386f6 100644
--- a/admin/actions.php
+++ b/admin/actions.php
@@ -216,12 +216,16 @@ try {
// 打开方式:'0' = 当前页面;其余(含字段缺失、被篡改成怪值)一律回到 '1'(新标签页)
// ——默认必须等于改造前的旧行为,这样老库里已有的值上线后不会突然变样。
$open = (string)($_POST['open_blank'] ?? '1') === '0' ? '0' : '1';
+ // 联想词按键:arrows(↓/↑)/ punct(, 和 .)/ both;非白名单一律回到 arrows
+ $keys = (string)($_POST['suggest_keys'] ?? 'arrows');
+ if (!in_array($keys, ['arrows', 'punct', 'both'], true)) { $keys = 'arrows'; }
$map = [
'site_name' => trim((string)($_POST['site_name'] ?? '')),
'subtitle' => trim((string)($_POST['subtitle'] ?? '')),
'default_engine' => preg_replace('/[^a-z0-9\-_]/i', '', (string)($_POST['default_engine'] ?? '')),
'primary_color' => preg_match('/^#[0-9a-fA-F]{3,8}$/', (string)($_POST['primary_color'] ?? '')) ? $_POST['primary_color'] : '#2F6BF7',
'open_blank' => $open,
+ 'suggest_keys' => $keys,
'icon_services' => isset($_POST['icon_services']) ? '1' : '0',
'suggest_source' => $src,
'collections_layout' => $coll,
diff --git a/admin/index.php b/admin/index.php
index a3b3f7e..16ae612 100644
--- a/admin/index.php
+++ b/admin/index.php
@@ -321,6 +321,20 @@ else: // settings ?>
所以默认「统一用百度」——这样切到任何引擎下拉都有词。选「各搜索引擎自己的接口」则恢复成
各用各的(没恢复好的引擎会自动回退到百度的建议)。
+
+
+ 决定用哪组键在联想下拉里选词:选中某条后回车才按该词搜索;不选就直接回车 = 用你输入的原文。
+ 「, 和 .」跟输入法一样,手不用离开主键区,习惯中文输入法的话更顺手。
+ ⚠️ 选它之后,联想下拉打开时逗号与句号会当作选词键,不再直接输入 ——
+ 想搜「python, pandas」这类带逗号的词,先按 Esc 关掉下拉再输。
+