From 2495a1536221d793381b9524780665c6f1720e7b Mon Sep 17 00:00:00 2001 From: workeroncloud Date: Thu, 2 Jul 2026 09:45:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E2=8C=98K):=20=E5=85=A8=E6=96=87=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E6=94=B9=E4=B8=BA=E4=B8=80=E9=94=AE=E5=BC=80=E5=85=B3?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E7=94=A8=E5=86=8D=E6=89=8B=E8=BE=93=E3=80=8C?= =?UTF-8?q?=E5=86=85=E5=AE=B9:=E3=80=8D=E5=89=8D=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 搜索框旁新增「▤ 搜内容」胶囊开关,点击或 ⇧Tab 即切换全文搜索 - 开启后直接输入关键词就搜文件内容(含 PDF、截图 OCR),placeholder 与空态提示随模式切换 - 「内容:」「content:」前缀完全兼容,老习惯不受影响 - 快捷键提示行补充 ⇧Tab 说明,中英文案同步进 i18n 词典 --- public/app.js | 26 +++++++++++++++++++++----- public/i18n-dict.js | 8 ++++++-- public/index.html | 3 ++- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/public/app.js b/public/app.js index c76cb4c..fa03a43 100644 --- a/public/app.js +++ b/public/app.js @@ -1904,29 +1904,44 @@ function truncNote() { // ---------- 命令面板 ---------- const cmdk = { - results: [], active: 0, timer: null, scopeAll: true, + results: [], active: 0, timer: null, scopeAll: true, contentMode: false, open() { $('#cmdk').classList.remove('hidden'); this.updateScopeLabel(); + this.updateModeLabel(); const inp = $('#cmdk-input'); inp.value = ''; inp.focus(); - $('#cmdk-results').innerHTML = '
输入开始搜索 · 文件名模糊匹配,「内容:」搜全文(含 PDF、截图里的文字)
'; + $('#cmdk-results').innerHTML = `
${this.emptyHint()}
`; this.results = []; this.active = 0; }, close() { $('#cmdk').classList.add('hidden'); }, toggleScope() { this.scopeAll = !this.scopeAll; this.updateScopeLabel(); this.search($('#cmdk-input').value); }, + // 全文搜索开关:点「搜内容」或 ⇧Tab 即切换,不用再手输「内容:」前缀(前缀仍兼容) + toggleMode() { this.contentMode = !this.contentMode; this.updateModeLabel(); this.search($('#cmdk-input').value); }, root() { return this.scopeAll ? state.home : (state.cwd || state.home); }, updateScopeLabel() { $('#cmdk-scope').textContent = this.scopeAll ? '全机(主目录及以下)' : '当前目录 ' + tilde(state.cwd || state.home); $('#scope-toggle').textContent = this.scopeAll ? '⤢ 全机' : '▢ 当前目录'; $('#scope-toggle').classList.toggle('on', this.scopeAll); }, + updateModeLabel() { + $('#mode-toggle').classList.toggle('on', this.contentMode); + $('#cmdk-input').placeholder = this.contentMode + ? '搜文件内容(全文,含 PDF、截图里的文字)…' + : '按文件名搜索… 用 “内容:” 前缀搜文件内容,如 “内容:useState”'; + if (!$('#cmdk-input').value.trim()) $('#cmdk-results').innerHTML = `
${this.emptyHint()}
`; + }, + emptyHint() { + return this.contentMode + ? '输入开始搜索 · 全文搜索(含 PDF、截图里的文字)' + : '输入开始搜索 · 文件名模糊匹配,点「搜内容」或用「内容:」前缀搜全文(含 PDF、截图里的文字)'; + }, search(q) { clearTimeout(this.timer); - if (!q.trim()) { $('#cmdk-results').innerHTML = '
输入开始搜索
'; return; } - const isContent = /^(内容[::]|content:)/i.test(q); + if (!q.trim()) { $('#cmdk-results').innerHTML = `
${this.emptyHint()}
`; return; } + const isContent = this.contentMode || /^(内容[::]|content:)/i.test(q); $('#cmdk-results').innerHTML = '
搜索中…
'; this.timer = setTimeout(async () => { const root = this.root(); @@ -2510,6 +2525,7 @@ function bindEvents() { document.addEventListener('click', (e) => { if (!e.target.closest('#context-menu')) closeContextMenu(); }); window.addEventListener('blur', closeContextMenu); $('#scope-toggle').onclick = () => cmdk.toggleScope(); + $('#mode-toggle').onclick = () => { cmdk.toggleMode(); $('#cmdk-input').focus(); }; $('#toggle-hidden').checked = state.showHidden; $('#toggle-hidden').onchange = (e) => { state.showHidden = e.target.checked; localStorage.setItem('fb_hidden', state.showHidden ? '1' : '0'); renderFiles(); }; @@ -2550,7 +2566,7 @@ function bindEvents() { if (e.key === 'Escape') cmdk.close(); else if (e.key === 'ArrowDown') { e.preventDefault(); cmdk.move(1); } else if (e.key === 'ArrowUp') { e.preventDefault(); cmdk.move(-1); } - else if (e.key === 'Tab') { e.preventDefault(); cmdk.toggleScope(); } + else if (e.key === 'Tab') { e.preventDefault(); e.shiftKey ? cmdk.toggleMode() : cmdk.toggleScope(); } else if (e.key === 'Enter') { e.preventDefault(); cmdk.choose(cmdk.active, e.metaKey || e.ctrlKey); } return; } diff --git a/public/i18n-dict.js b/public/i18n-dict.js index 72b5741..926bed7 100644 --- a/public/i18n-dict.js +++ b/public/i18n-dict.js @@ -223,13 +223,17 @@ window.FANBOX_DICT = { // ---------- 命令面板 ---------- '按文件名搜索… 用 “内容:” 前缀搜文件内容,如 “内容:useState”': 'Search by filename… prefix with “content:” to search inside files, e.g. “content:useState”', + '搜文件内容(全文,含 PDF、截图里的文字)…': 'Search inside files (full text, incl. PDFs and text in screenshots)…', '切换搜索范围(Tab)': 'Toggle search scope (Tab)', + '按内容全文搜索(⇧Tab)': 'Search inside files (⇧Tab)', + '▤ 搜内容': '▤ Full text', '⤢ 全机': '⤢ This Mac', '▢ 当前目录': '▢ This folder', '范围:': 'Scope: ', - '· Tab 切换范围 · ↑↓ 选择 · ↵ 打开 · ⌘↵ 在编辑器打开': '· Tab scope · ↑↓ select · ↵ open · ⌘↵ open in editor', + '· Tab 切换范围 · ⇧Tab 搜内容 · ↑↓ 选择 · ↵ 打开 · ⌘↵ 在编辑器打开': '· Tab scope · ⇧Tab full text · ↑↓ select · ↵ open · ⌘↵ open in editor', '全机(主目录及以下)': 'This Mac (home folder and below)', - '输入开始搜索 · 文件名模糊匹配,「内容:」搜全文(含 PDF、截图里的文字)': 'Type to search · fuzzy filename match; “content:” searches full text (incl. PDFs and text in screenshots)', + '输入开始搜索 · 文件名模糊匹配,点「搜内容」或用「内容:」前缀搜全文(含 PDF、截图里的文字)': 'Type to search · fuzzy filename match; click “Full text” or use the “content:” prefix to search inside files (incl. PDFs and text in screenshots)', + '输入开始搜索 · 全文搜索(含 PDF、截图里的文字)': 'Type to search · full-text search (incl. PDFs and text in screenshots)', '输入开始搜索': 'Type to search', '搜索中…': 'Searching…', '没有结果': 'No results', diff --git a/public/index.html b/public/index.html index 044c407..edac8ba 100644 --- a/public/index.html +++ b/public/index.html @@ -143,10 +143,11 @@
+ ESC
-
范围: · Tab 切换范围 · ↑↓ 选择 · ↵ 打开 · ⌘↵ 在编辑器打开
+
范围: · Tab 切换范围 · ⇧Tab 搜内容 · ↑↓ 选择 · ↵ 打开 · ⌘↵ 在编辑器打开