Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 21 additions & 5 deletions public/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = '<div class="cmdk-loading">输入开始搜索 · 文件名模糊匹配,「内容:」搜全文(含 PDF、截图里的文字)</div>';
$('#cmdk-results').innerHTML = `<div class="cmdk-loading">${this.emptyHint()}</div>`;
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 = `<div class="cmdk-loading">${this.emptyHint()}</div>`;
},
emptyHint() {
return this.contentMode
? '输入开始搜索 · 全文搜索(含 PDF、截图里的文字)'
: '输入开始搜索 · 文件名模糊匹配,点「搜内容」或用「内容:」前缀搜全文(含 PDF、截图里的文字)';
},
search(q) {
clearTimeout(this.timer);
if (!q.trim()) { $('#cmdk-results').innerHTML = '<div class="cmdk-loading">输入开始搜索</div>'; return; }
const isContent = /^(内容[::]|content:)/i.test(q);
if (!q.trim()) { $('#cmdk-results').innerHTML = `<div class="cmdk-loading">${this.emptyHint()}</div>`; return; }
const isContent = this.contentMode || /^(内容[::]|content:)/i.test(q);
$('#cmdk-results').innerHTML = '<div class="cmdk-loading">搜索中…</div>';
this.timer = setTimeout(async () => {
const root = this.root();
Expand Down Expand Up @@ -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(); };
Expand Down Expand Up @@ -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;
}
Expand Down
8 changes: 6 additions & 2 deletions public/i18n-dict.js
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
3 changes: 2 additions & 1 deletion public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -143,10 +143,11 @@
<div class="cmdk-input-wrap">
<span class="cmdk-icon"><svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="#9aa3b2" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg></span>
<input id="cmdk-input" placeholder="按文件名搜索… 用 “内容:” 前缀搜文件内容,如 “内容:useState”" autocomplete="off" />
<button id="mode-toggle" class="scope-toggle" title="按内容全文搜索(⇧Tab)">▤ 搜内容</button>
<button id="scope-toggle" class="scope-toggle on" title="切换搜索范围(Tab)">⤢ 全机</button>
<kbd>ESC</kbd>
</div>
<div id="cmdk-hint" class="cmdk-hint">范围:<b id="cmdk-scope"></b> · Tab 切换范围 · ↑↓ 选择 · ↵ 打开 · ⌘↵ 在编辑器打开</div>
<div id="cmdk-hint" class="cmdk-hint">范围:<b id="cmdk-scope"></b> · Tab 切换范围 · ⇧Tab 搜内容 · ↑↓ 选择 · ↵ 打开 · ⌘↵ 在编辑器打开</div>
<ul id="cmdk-results" class="cmdk-results"></ul>
</div>
</div>
Expand Down