[AI Development Lab] 【deepin插件开发活动】任务栏字数统计插件【更新】
Tofloor
poster avatar
半日闲云
deepin
2026-08-19 12:08
Author

【deepin插件开发活动】任务栏字数统计:用 deepin Skills 从零打造的托盘插件【更新】

一、作品简介

任务栏字数统计(dde-tray-wordcount) 是一款基于 deepin Skills(dde-tray-development / dtk-development) 开发的 DDE 任务栏托盘插件。它常驻任务栏,实时统计你的打字量:今日字数、总字数、敲字速度、24 小时时段分布、近 7 日趋势,并把字数转化为一套文人雅称等级体系(书生 → 秀才 → 举人 → 进士 → 翰林 → 大学士 → 文豪 → 文圣,8 段位 × 10 品 = 80 级),让"打字"这件事变得有成就感、有仪式感。

  • 源码仓库:https://atomgit.com/hebowen/dde-tray-wordcount
  • 开源协议:LGPL-2.1-or-later(OSI 批准)
  • 开发方向:方向二 · 任务栏托盘插件
  • 支持架构:amd64
  • 适用系统:deepin 25 / UOS V25

二、功能亮点

1. 输入法统一计数(fcitx5 + 搜狗)

插件通过 fcitx5 公开 D-Bus 信号(CommitString)监听上屏文本,只统计字数、不拦截、不修改输入、不存储原文。搜狗输入法(deepin 版)走 fcitx5 前端,天然统一计数,无需任何配置。

2. 文人雅称等级体系

  • 8 段位 × 10 品 = 80 级,字数门槛按对数曲线设计:新手升级快、后期有挑战
  • 每段位配雅称(进士 → 进士出身、翰林 → 翰林院编修、文圣 → 至圣文宣),详情面板副行展示
  • 升级瞬间托盘图标闪金 + 系统通知"恭喜晋升",仪式感拉满
  • 可一键关闭段位系统(右键菜单勾选,DConfig 持久化)

3. 详情面板(毛玻璃)

  • 官方窗口模糊(DPlatformHandle + 圆角模糊区域,合成器渲染高斯模糊)
  • Hero 成就区:段位等级 + 进度条 + 今日大数字 + 昨日对比差值角标(多打标绿、少打标红)
  • 近 7 日平滑曲线(贝塞尔拟合)、24h 热力条、金句收尾("约等于写了 N 章网络小说")
  • 深浅主题自适应(亮/暗两套配色 + 系统强调色缓存)

4. 完整右键菜单

重置今日 / 重置全部(二次确认防误触)/ 导出数据 / 导入数据 / 启用文人段位系统 / 关于;任务栏框架自动附加「移除驻留」;插件可在控制中心 → 个性化 → 任务栏中启停。

5. 配套 AI 查询技能(wordcount-query)——插件 + 技能的创新闭环

作品不止是一个托盘插件,还配套开发了 wordcount-query 技能:把 AI 编程助手变成插件的"语音播报员"。

  • 自然语言查数据:你不再需要打开面板——直接问 AI "今天我打了多少字?"、"总字数多少?"、"今天比昨天多还是少?"、"今天什么时候打字最活跃?"、"我现在是什么段位?"、"近 7 天每天多少字?",AI 会读取插件持久化数据(DConfig,旧版 QSettings 自动回退)并给出个性化回答。
  • 无需 GUI 操作:技能内嵌 Python 脚本直接解析插件数据,纯命令行无界面依赖,随时可查。
  • 生态意义:这是"桌面插件 + AI 技能"双向联动的尝试——插件负责采集与展示,技能负责问答与解读,让打字数据不仅看得见,还能"问得着",为 deepin 桌面 AI 化提供了一种可复制的模式。

三、安装与使用

方式一:deb 包安装(推荐)

deb包下载:amd包

sudo dpkg -i dde-tray-wordcount_1.4.0-1_amd64.deb
systemctl --user restart dde-shell@DDE.service   # 重启任务栏生效

方式二:源码构建

先安装依赖

sudo apt install cmake g++ make
qt6-base-dev
libdtk6widget-dev libdtk6gui-dev libdtk6core-dev
dde-tray-loader-dev
qt6-l10n-tools      # 可选:编译 .ts 翻译(缺失则跳过,不影响插件本体)

然后进行编译

git clone https://atomgit.com/hebowen/dde-tray-wordcount.git
cd dde-tray-wordcount
cmake -B build -DCMAKE_INSTALL_PREFIX=/usr
cmake --build build -j
sudo cmake --install build

Skills安装

在任意ai页面输入

请你帮我安装这个skills:https://gitcode.com/hebowen/dde-tray-wordcount/releases/download/v1.4/SKILL.md

或者使用skills.md文件放到skills的目录下

skills.md下载

使用说明

  1. 正常打字(fcitx5 或搜狗)即自动计数,无需任何操作
  2. 左键点击托盘图标 → 打开详情面板(等级/今日/7 日趋势/24h 分布/金句)
  3. 右键点击托盘图标 → 菜单操作(重置/导出/导入/段位开关/关于)
  4. 设置 → 个性化 → 任务栏 → 插件区域 → 勾选启停

四、开发过程:如何用 deepin Skills 辅助开发

使用的 Skill 模块

Skill 用途
dde-tray-development 核心:PluginsItemInterfaceV2 接口、itemPopupApplet 弹窗机制、右键菜单协议、托盘图标规范
dtk-development DTK6 API:DConfig 持久化(gotchas 4.1 禁 QSettings)、DFontSizeManager 字体、DPlatformHandle 窗口模糊、ThemeManager 主题
dde-control-center-development 控制中心插件区域显示(Attribute_CanSetting + dcc-setting 图标)
dde-shell-development DDE Shell 面板交互机制调研
wordcount-query(作品自创技能) 配套 AI 查询技能:内嵌 Python 脚本读取插件持久化数据(DConfig,回退 QSettings ini),回答"今天打了多少字/总字数/比昨天多多少/最活跃时段/当前段位/近 7 天"等打字量问题

Skill 如何降低门槛

作为一名此前没有 deepin 托盘插件开发经验的开发者,deepin Skills 帮我在几个关键节点避开了"文档深坑":

  1. 插件架构:dde-tray-development/tray-plugin-spec.md 直接给出了 PluginsItemInterfaceV2 的完整接口清单与弹窗机制(itemPopupApplet),让我第一版就能跑通"托盘图标 + 点击弹窗"。
  2. 持久化选型:dtk-development/gotchas.md 4.1 明确"禁用 QSettings,使用 DConfig"——避免了我走弯路,并据此完成了旧 QSettings 数据的一次性迁移。
  3. 窗口模糊:dtk-development/platform-abstraction.md 提供了官方毛玻璃方案(DPlatformHandle + 模糊区域),避免了误用会被合成器抑制的第三方方案。
  4. 深浅主题:技能推荐的 DGuiApplicationHelper::themeType() + Appearance1 强调色 D-Bus(带缓存),让详情面板在亮/暗主题下都清晰可读。

开发中遇到并解决的典型问题

  • 独立弹窗被宿主抑制:插件进程内创建独立对话框(DDialog/QDialog)会被 dde-tray-loader 抑制(exec 卡死 / show 不显示)——按技能指引改为 itemPopupApplet 官方弹窗机制承载全部 UI。
  • 输入法适配:通过 fcitx5 公开 D-Bus 信号监听上屏文本,只读、无拦截,天然兼容搜狗(fcitx5 前端)。
  • 持续迭代与代码质量:全程使用产品经理审计流程(每次改动后派独立子代理做只读代码审计),覆盖死代码清理、性能优化(QFontMetrics/等级缓存、150ms 节流)、安全加固(导入 8MB 上限、total 溢出防护、fcitx5 崩溃防重入)。

202608190410125234_1787110965660.png

202608190410327758_1787111274480.png

image.png

五、作品截图

(附件包含 3–5 张截图:托盘图标与右键菜单 / 详情面板 Hero 区 / 7 日趋势与 24h 热力条 / 控制中心启停开关 / 升级通知)

image.png

image.png

image.png

image.png

202608201344522430_image.png

202608201345519511_image.png

六、作品价值

  • 真实使用价值:每一个写作者/程序员/学生都想知道"我今天写了多少字",这个插件把答案放在任务栏上,零成本、常驻可见。
  • 创新性:把冷冰冰的"字数统计"升级为"文人雅称等级"——升段位、看进度、比昨日,打字变成一场有成就感的修行;更进一步,配套的 wordcount-query 技能实现了"桌面插件 + AI 技能"双向联动——插件采集展示、技能问答解读,让打字数据不仅能看见,还能直接"问"出来,为 deepin 桌面 AI 化提供了可复制的创新模式。
  • UI/UX:毛玻璃 + 深浅主题自适应,与 DDE 25 视觉语言融合。
  • 可维护性:模块化结构(引擎/速度/等级/主题/输入法监听/UI 分离),注释详实,每轮改动均有审计记录。
Reply Favorite View the author
All Replies
avatar
鲜衣怒马
deepin
2026-08-19 12:34
#1

6啊, sad like

Reply View the author
avatar
半日闲云
deepin
2026-08-19 12:42
#2
鲜衣怒马:

6啊, sad like

agree kissing_heart

Reply View the author
avatar
骑🐖追帅哥bot
Moderator
2026-08-19 13:22
#3

争取当上文圣 哈哈哈
企业微信截图_20260812164807.png

Reply View the author
avatar
buyike
deepin
2026-08-19 13:43
#4

shamed 你要不要再搞个帐号啥的,不然重装后是不是又得重新练级了?

Reply View the author
avatar
Linux初学者
deepin
2026-08-19 14:11
#5

安装后没有任何反应,找不到在哪里,任务栏上也没有

Reply View the author
avatar
半日闲云
deepin
2026-08-19 14:51
#6
Linux初学者:

安装后没有任何反应,找不到在哪里,任务栏上也没有

要重启,然后去任务栏插件里看看有没有字数统计

Reply View the author
avatar
半日闲云
deepin
2026-08-19 14:52
#7
buyike:

shamed 你要不要再搞个帐号啥的,不然重装后是不是又得重新练级了?

好的我看看能不能加一个数据导出和导入的功能

Reply View the author
avatar
半日闲云
deepin
2026-08-19 15:05
#8
Linux初学者:

安装后没有任何反应,找不到在哪里,任务栏上也没有

或者用这个命令重启任务栏也可以systemctl --user restart dde-shell@DDE.service dde-shell-plugin@org.deepin.ds.desktop.service

Reply View the author
avatar
半日闲云
deepin
2026-08-19 16:10
#9
buyike:

shamed 你要不要再搞个帐号啥的,不然重装后是不是又得重新练级了?

数据导入和导出功能已增加kissing_heart

Reply View the author
avatar
White_Dew4frost
deepin
2026-08-19 18:47
#10

厉害👍

Reply View the author
avatar
半日闲云
deepin
2026-08-19 19:38
#11
White_Dew4frost:

厉害👍

kissing_heart

Reply View the author
avatar
Linux初学者
deepin
2026-08-22 10:55
#12
半日闲云:

或者用这个命令重启任务栏也可以systemctl --user restart dde-shell@DDE.service dde-shell-plugin@org.deepin.ds.desktop.service

电脑都重启几次了,还是没有,不过打字的时候不时会有弹窗提示

Reply View the author
avatar
半日闲云
deepin
2026-08-22 11:23
#13
Linux初学者:

电脑都重启几次了,还是没有,不过打字的时候不时会有弹窗提示

重启之后要去设置里的任务栏设置的插件区域里勾选字数统计

Reply View the author
avatar
半日闲云
deepin
2026-08-23 15:49
#14

这个也是我从windows下的搜狗输入法的字数统计得来的灵感kissing_heart

Reply View the author