[AI Development Lab] 全局搜索非官方修改:新增结果筛选页,最小化可恢复
Tofloor
poster avatar
Deepin-12356
deepin
2026-10-17 20:47
Author

【Deepin 全局搜索 dde-grand-search 定制改造分享】增加结果筛选页

适用:Deepin 25 / UOS(Qt6 + DTK6 环境)
改造基线:官方 commit 51cc1d8(fix: show index hints only for enabled features)
交付形式:一份可直接 git apply 的 patch,覆盖官方源码一键应用

下载链接:

1.amd64.deb:dde-grand-search_6.1.1.2_amd64.zip

2.patch文件:dde-grand-search-改造.zip

3.修改后源码:太大了,放云盘了
qrcode-分享.jpeg
https://yun.139.com/shareweb/#/w/i/2yrhQGkvGmgdd

一、为什么做这次改造

官方 dde-grand-search 只有主搜索框(Super+空格呼出,搜完即走),没有"全部结果"筛选页。基于个人使用习惯利用豆包做了两类改造:

  1. 磁盘寿命优化:官方原有两处写盘(缩略图、应用日志)对 SSD 不友好,改为纯内存/静默;
  2. 自研"结果筛选页":在官方搜索基础上新增一个独立的全部结果浏览面板(文件/图片/PDF 预览 + 类型/时间筛选),并优化了它的交互体验(最小化即保留、恢复即回到原位置)。

二、改造内容

A. 磁盘寿命优化(针对官方原有的两处写盘)

项目 官方行为 改造后
缩略图缓存 PNG 落盘 ~/.cache/thumbnails + 写 URL/MTime 元数据 QCache 纯内存(上限 100 项),零落盘;键为 file:// URL 的 MD5
应用日志 Dtk Appender 写文件 / journal 不再注册任何 Appender,仅 critical/fatal 输出 stderr,其余丢弃

索引 sqlite 是业务必需写盘,保留;journald 收集 stderr 属系统层行为,源码无法屏蔽(已把应用日志降为仅 critical/fatal 出 stderr)。

B. 增加结果筛选页

截图_dde-grand-search_20261017202906.png

  • 新增"全部结果"面板:左栏类型/时间筛选 + 右侧结果列表 + 内嵌预览(office 文本/PDF/图片均内存渲染,不落盘);
  • 进入面板后,除 Esc / 点标题栏 X 外的一切离开都算"最小化":点击他处自动最小化、打开文件自动收起、点最小化按钮——数据全部保留在内存,可随时恢复;
  • 恢复直接回到面板:并记住滚动位置 + 上次选中的文件(延迟重建列表防恢复瞬间布局塌陷,X11 最小化→恢复的高度塌陷自动校正);
  • 结果页 Esc / 标题栏 X = 结束会话并直接退出进程:内存由进程退出自然回收,无残留,再次启动即全新;
  • 主搜索框保持官方手感:失焦 / 点击他处 / Esc 直接关闭;面板有会话时主窗关闭仅隐藏、进程常驻(保全面板可恢复),无会话时按官方退出进程;
  • 结果页会话数据全部留内存:原本每次搜索完成写 last-results.json 的存档也一并去掉(不落盘),进程常驻期间数据一直在内存。

三、怎么用

靠官方全局快捷键呼出主搜索框(配置在系统设置 → 键盘 → 快捷键 → 启动器/全局搜索)。改造后新增了结果页,呼出方式如下:

1)主搜索框

  • 按官方快捷键:呼出主搜索框,输入关键词,点搜索框右侧"显示全部搜索结果"按钮进入结果页。

2)结果页的三种恢复方式

  • 任务栏驻留图标(推荐,需手动驻留一次):面板打开时,任务栏(dde-dock)会出现 dde-grand-search 的图标;右键图标 → 选择"驻留"(固定),驻留后图标常驻任务栏,即使面板收起也能点击:
    • 面板有会话(搜过且未按 Esc/X)→ 点击图标直接恢复面板(回到上次滚动位置和选中项);
    • 面板无会话 → 点击图标弹出主搜索框。
  • 启动器"搜索结果"入口:安装后启动器(开始菜单)会多一个"搜索结果"图标(patch 新增 dde-grand-search-results.desktop),点击直接打开结果页(等价于 dde-grand-search --show-results)。
  • 面板会话中按 官方快捷键:面板有会话时优先恢复面板,无会话时弹主搜索框。

注意:Deepin 任务栏对后台常驻应用默认不常驻显示图标,建议按上面第 1 种方式手动驻留一次,之后的使用体验最顺(相当于给结果页一个常驻入口)。

3)退出

  • 结果页:Esc 或标题栏 X,进程直接退出;
  • 主搜索框:失焦/Esc,无会话时进程退出(官方行为)。

四、Patch 使用方法

重要:patch 基于官方 commit 51cc1d8 生成,请先切到该版本再 apply,否则官方后续更新可能导致冲突。

# 1. 获取官方源码
git clone https://github.com/linuxdeepin/dde-grand-search.git
cd dde-grand-search

# 2. 切到 patch 基线版本(fix: show index hints only for enabled features)
git checkout 51cc1d8

# 3. 应用 patch(已用 git apply --check 验证可干净应用)
git apply dde-grand-search-改造.patch
# 或 git am dde-grand-search-改造.patch

# 4. 构建(两种方式任选)
#   a) 直接 CMake:
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr
make -j$(nproc)

#   b) 打 deb 包(Deepin/UOS 环境):
dpkg-buildpackage -b -uc -us

依赖:Qt6(Widgets/DBus/Concurrent/Network/Xml/PrintSupport)、DTK6(DCore/DGui/DWidget/DLog)、deepin-pdfium(结果页 PDF 预览)、dfm6-search、lucene++。

五、Patch 内容一览

  • 50 个文件,+3486 / −329,无删除(不误伤官方任何文件)
  • 新增:src/grand-search/gui/resultbrowser/(结果页:窗口/预览/PDF 预览)、utils/keylistener.*、utils/pathinserter.*、dde-grand-search-results.desktop(启动器"搜索结果"入口)
  • 修改:thumbnailcache.*(缩略图纯内存)、framelogmanager.*(无日志)、resultbrowserwindow.*(会话纯内存 + 交互)、mainwindow.*、handlevisibility.*、main.cpp(--show-results 参数 + 任务栏分流)、daemon 各 searcher 优化等

六、注意事项

Patch 基线固定为官方 51cc1d8;若想基于更新版本,先 git checkout 51cc1d8 apply 后再 rebase 到新版(可能需要手动合并)

Reply Favorite View the author
All Replies
avatar
Deepin-12356
deepin
14 hours ago
#1

10月18日,修复和优化结果筛选页面自定义时间段功能

  • 日历顶栏年份编辑框强制加宽(轮询 setFixedWidth(120),修复修改年份时4 位年份只显示 2 位的问题)
  • "自定义时间"项三行显示(标题/从/到,yyyy-MM-dd)
  • 点击已选"自定义时间"可直接重选,无需先清除
  • 截图_dde-grand-search_20261018160124.png

下载:

amd64 .deb安装包:dde-grand-search_6.1.1.2_amd64.zip

patch:dde-grand-search-改造.zip

修改后源码(AI搞的patch不知道有没有遗漏,但是这个我是自己编译成功的):https://yun.139.com/shareweb/#/w/i/2yrhMX8pWWveu

Reply View the author
avatar
𰻞𰻝面
deepin
8 hours ago
#2

厉害。点赞!👍

Reply View the author