[AI Development Lab] 【deepin插件开发活动】任务栏字数统计插件
Tofloor
poster avatar
半日闲云
deepin
8 hours ago
Author

【deepin插件开发活动】任务栏字数统计 · 文人雅称等级制托盘插件(deb安装包在文章末尾提供,目前只有amd64的包)

参赛方向:方向二 · 任务栏托盘插件(dde-tray-development
一句话定位:驻留任务栏的"写作计量仪表盘"——在你用 fcitx5 / 搜狗输入法的任意应用里,默默记下你敲下的每一个字,并用一套文人雅称等级制把"码字"变成"升级打怪"。


一、作品信息

项目 内容
作品名称 任务栏字数统计(dde-tray-wordcount)
作者 半日闲云
参赛方向 方向二:任务栏托盘插件(基于 dde-tray-development skill)
源码仓库 https://atomgit.com/hebowen/dde-tray-wordcount
开源协议 LGPL-2.1-or-later(OSI 批准)
运行环境 deepin 25 / UOS V25,amd64 / arm64 / loongarch64
开发辅助 deepin Skills ·dde-tray-development 模块

二、作品简介与痛点

很多人每天在电脑前敲成千上万字——写文档、回消息、做笔记——却从没有一个"码字里程表"。现有工具要么局限于单个编辑器,要么把你的原文上传到云端。

本插件做了一件简单但没人做透的事:在桌面层面,统一计量你通过输入法上屏的全部文字,并把冷冰冰的数字包装成一套"书生 → 文圣"的文人雅称晋升体系。它不是另一个编辑器,而是常驻任务栏、零配置、零侵入的写作陪伴。

  • 你只管写,它只记数;
  • 原文不落盘、不上传,隐私友好;
  • 等级、速度、时段分布、近 7 日趋势一眼可见。

三、功能一览

功能 说明
fcitx5 / 搜狗统一计数 fcitx5 自带拼音、搜狗拼音(fcitx5 addon)上屏文本统一统计
文人雅称等级制 8 段位 × 10 品 =80 级,指数 1.5 曲线(前期有门槛、后期递增更难)
敲字速度 60 秒滚动窗口,实时字/分(Tooltip 显示)
今日 / 总字数 跨日自动重置今日,总字数永久持久化
24 小时时段分布热力图 详情面板内,看清自己几点最"高产"
近 7 日柱状图 详情面板内,周趋势一目了然
「约等于一部作品」 按总字数匹配经典名著,如"约等于写了一部《西游记》"
升级反馈 段位提升时托盘图标金色高亮 + 系统通知

文人雅称段位表:

段位 起始字数 缩写 主色
书生 0
秀才 500 青绿
举人 2,000
进士 5,000
翰林 10,000
大学士 20,000 深金
文豪 50,000 朱红
文圣 150,000 金紫

四、真实使用价值

  • 写作量化:把抽象的"今天写了多少"变成可感知的数字与目标,适合自媒体、学生、文案、程序员等高频码字人群。
  • 正向激励:等级晋升 + 里程碑作品类比,把"坚持写作"游戏化,降低拖延。
  • 隐私友好:不读你的文件、不存你的原文、不上传任何数据——只留统计数字,敢长期开着。
  • 零配置常驻:装好即生效,不抢焦点、不弹窗,存在感恰到好处。

五、创新性

  • 文化内核的 gamification:把"字数"映射成"书生→文圣"的古典科举晋升体系,是同赛道里少见的文化叙事 + 游戏化组合,而非单纯堆图表。
  • 桌面级而非应用级计量:在输入法提交层统一计数,覆盖所有走 fcitx5 的应用,比"给每个编辑器写插件"高明一个量级。
  • 任务栏原生形态:依附 DDE 任务栏,常驻不打扰,符合 deepin 桌面美学。

六、技术实现

6.1 架构

┌──────────────────────────────────────────────────┐
│  任意应用:浏览器 / 编辑器 / 终端 / 聊天 …          │
│        │ 上屏文本                                   │
│        ▼                                           │
│  fcitx5 InputContext1 ──CommitString──▶ (定向信号)  │
│        │                                           │
│        ▼  D-Bus 会话总线                            │
│  dbus-monitor --monitor  (BecomeMonitor)  ← 子进程  │
│        │  stdout 行解析(命中 member=CommitString) │
│        ▼                                           │
│  Fcitx5Monitor → CharCounter::count()              │
│        │  只取字数,原文内存中即用即弃               │
│        ▼                                           │
│  StatisticsEngine → QSettings 持久化计数            │
│        │                                           │
│        ▼                                           │
│  TrayIconWidget(QPainter 圆角矩形+段位字)         │
│  DetailPanel(等级进度 + 24h 热力图 + 7 日柱状图)   │
└──────────────────────────────────────────────────┘

6.2 为什么用 dbus-monitor?

实测 fcitx5 5.1.12(deepin 25)的 InputContext1 信号是定向信号(destination 指向创建输入上下文的应用),普通 QDBusConnection::connect / add_match 收不到,因此改用 D-Bus Monitor 模式(dbus-monitor --monitorBecomeMonitor)捕获。match 规则用 sender=org.fcitx.Fcitx5 限定来源,第三方进程无法冒充。

6.3 字数统计算法(标准口径)

输入 字数 说明
你好世界 4 4 个汉字
hello world 2 2 个英文词
你好 hello 3 2 中文 + 1 英文词
deepin系统v25好用 6 中英混排正确分词
你好,hello! 3 标点不计
12345 1 数字串算 1
😄 0 emoji 暂不计

6.4 代码结构(清晰、可维护)

6.5 安全与隐私

检查项 本插件
文件系统非法访问 ❌ 无;仅经 QSettings 写 ~/.config/deepin/dde-tray-wordcount.conf
异常外连 ❌ 无;不链接 QtNetwork,无任何网络上报
敏感数据采集 ⚠️ 经 BecomeMonitor 可读取会话全部上屏文本(含密码框/私聊),但仅统计字数、原文即用即弃、不落盘、不上传;README 已如实披露
输入原文落盘 / 上传 ❌ 均无
越权系统调用 ❌ 无;不用 polkit、不 sudo、不修改系统
修改 fcitx5 ❌ 无;不装 addon、不改配置、不重启
恶意代码 ❌ 无;全部源码开源可审计
运行时权限 ✅ 普通用户

遵循"最小权限、零侵入"原则。对"插件进程可读取本会话全部上屏文本"这一点已主动、如实说明,便于评审与用户知情决策。


七、UI/UX(评审项:UI/UX 设计 15%)

  • 托盘图标:QPainter 自绘圆角矩形 + 段位单字(书/秀/举…),暗色模式自动切换 wordcount.svg / wordcount-dark.svg
  • 详情面板:等级进度条 + 24 小时时段分布热力图 + 近 7 日柱状图,信息密度高但不杂乱。
  • 升级反馈:段位提升时图标金色高亮并触发系统通知,给予即时正反馈。

八、安装与使用

依赖

sudo apt install build-essential cmake \
    qt6-base-dev qt6-l10n-tools \
    libdtk6widget-dev \
    dde-tray-loader-dev fcitx5 dbus

从 deb 安装(推荐)

sudo apt-get install dde-tray-wordcount_1.0.0_amd64.deb
# 重启任务栏(deepin 25 宿主是 dde-shell)
systemctl --user restart dde-shell@DDE.service dde-shell-plugin@org.deepin.ds.desktop.service

从源码构建

mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make -j$(nproc)
sudo make install          # 系统级
# 或 make install-user     # 用户级(ostree 只读 /usr 时,无需 root)

卸载

sudo apt remove dde-tray-wordcount    # 保留统计
sudo apt purge  dde-tray-wordcount    # 彻底清理(并提示手动删配置)

九、兼容性与架构支持

架构 状态 deb 后缀
amd64 _amd64
arm64 _arm64
loongarch64 _loongarch64

CMake 经 CMAKE_SYSTEM_PROCESSOR 自动识别架构;打包脚本 debian/rulesDEB_HOST_MULTIARCH 自动选择安装路径。已在 deepin 25 完成构建 / 安装 / 运行 / 卸载全流程验证。


十、开发过程说明(基于 deepin Skills 辅助)

本作品基于 deepin Skills 的 dde-tray-development 模块完成开发,该模块提供了 dde-tray-loader 插件接口规范、打包与调试指引,帮助快速对齐 DDE 任务栏插件的开发约定(接口头文件 pluginsiteminterface_v2.h、Qt6 编译约束、用户级插件目录等)。

1787110965660.png

1787111274480.png

使用atomcode编写,workbuddy负责审计代码

开发关键节点:

  1. 用 skill 规范初始化插件骨架与 CMakeLists.txt;
  2. 按 skill 的接口契约实现 PluginsItemInterfaceV2itemWidget / itemTipsWidget / pluginName 等;
  3. 参考 skill 的打包指引产出 packaging/debian/*,并通过资格审核的"可复现文档"要求。

十一、演示截图


  • image.png
    图片中的秀代表我的打字等级,它会随着打字的总字数增长而升级

  • image.png
    等级进度与文人雅称,24 小时时段分布热力图,近 7 日柱状图 + "约等于一部作品"
  • image.png
    全面一览

十二,amd64版本的deb包下载

amd64安装包

下载之后双击点开进行安装

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

十三、致谢与结语

  • deepin Skillsdde-tray-development 提供 dde-tray-loader 插件开发规范
  • fcitx5 — D-Bus 输入框架
  • deepin 社区 — 插件开发大赛与调试支持

「翰林院编修,笔耕不辍。」🖊️
愿每个认真写字的人,都能看见自己的里程。


本作品为 2026-08-10 大赛启动后开发 / 实质性更新的参赛作品,源码以 LGPL-2.1-or-later 开源发布,可独立构建与安装。

Reply Favorite View the author
All Replies
avatar
鲜衣怒马
deepin
8 hours ago
#1

6啊, sad like

Reply View the author
avatar
半日闲云
deepin
8 hours ago
#2
鲜衣怒马

6啊, sad like

agree kissing_heart

Reply View the author
avatar
骑🐖追帅哥bot
Moderator
7 hours ago
#3

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

Reply View the author
avatar
buyike
deepin
7 hours ago
#4

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

Reply View the author
avatar
Linux初学者
deepin
6 hours ago
#5

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

Reply View the author
avatar
半日闲云
deepin
6 hours ago
#6
Linux初学者

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

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

Reply View the author
avatar
半日闲云
deepin
6 hours ago
#7
buyike

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

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

Reply View the author
avatar
半日闲云
deepin
5 hours ago
#8
Linux初学者

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

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

Reply View the author
avatar
半日闲云
deepin
4 hours ago
#9
buyike

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

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

Reply View the author
avatar
JesseyLawson
deepin
2 hours ago
#10

厉害👍

Reply View the author
avatar
半日闲云
deepin
an hour ago
#11
JesseyLawson

厉害👍

kissing_heart

Reply View the author